4XX
错误码用于指示错误的请求内容、行为、格式。403
错误码表示违反WAF限制(Web应用程序防火墙)。429
错误码表示警告访问频次超限,即将被封IP418
表示收到429后继续访问,于是被封了。5XX
错误码用于指示Aster Finance服务侧的问题。503
表示API服务端已经向业务核心提交了请求但未能获取响应,特别需要注意的是其不代表请求失败,而是未知。很可能已经得到了执行,也有可能执行失败,需要做进一步确认。异常响应格式如下:
{
"code": -1121,
"msg": "Invalid symbol."
}
GET
方法的接口, 参数必须在query string
中发送.POST
, PUT
, 和 DELETE
方法的接口, 在 request body
中发送(content type application/x-www-form-urlencoded
)/fapi/v3/exchangeInfo
接口中rateLimits
数组里包含有REST接口(不限于本篇的REST接口)的访问限制。包括带权重的访问频次限制、下单速率限制。本篇枚举定义
章节有限制类型的进一步说明。X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter)
的头,其中包含当前IP所有请求的已使用权重。X-MBX-ORDER-COUNT-(intervalNum)(intervalLetter)
的头,其中包含当前账户已用的下单限制数量。关于交易时效性
互联网状况并不100%可靠,不可完全依赖,因此你的程序本地到服务器的时延会有抖动.
这是我们设置recvWindow
的目的所在,如果你从事高频交易,对交易时效性有较高的要求,可以灵活设置recvWindow以达到你的要求。
鉴权类型 | 描述 |
---|---|
NONE | 不需要鉴权的接口 |
TRADE | 需要有效的signer和签名 |
USER_DATA | 需要有效的signer和签名 |
USER_STREAM | 需要有效的signer和签名 |
MARKET_DATA | 需要有效的signer和签名 |
参数 | 描述 |
---|---|
user | 主账户钱包地址 |
signer | API钱包地址 |
nonce | 当前时间戳,单位为微秒 |
signature | 签名 |
timestamp
参数,其值应当是请求发送时刻的unix时间戳(毫秒)recvWindow
来自定义。逻辑伪代码:
if (timestamp < serverTime + 1000 && serverTime - timestamp <= recvWindow) {
// process request
} else {
// reject request
}
Key | Value |
---|---|
user | 0x63DD5aCC6b1aa0f563956C0e534DD30B6dcF7C4e |
signer | 0x21cF8Ae13Bb72632562c6Fff438652Ba1a151bb0 |
privateKey | 0x4fd0a42218f3eae43a6ce26d22544e986139a01e5b34a62db53757ffca81bae1 |
#python
nonce = math.trunc(time.time()*1000000)
print(nonce)
#1748310859508867
//java
Instant now = Instant.now();
long microsecond = now.getEpochSecond() * 1000000 + now.getNano() / 1000;
my_dict = {'symbol': 'SANDUSDT', 'positionSide': 'BOTH', 'type': 'LIMIT', 'side': 'BUY',
'timeInForce': 'GTC', 'quantity': "190", 'price': 0.28694}
第一步将所有业务参数转字符串后按照ascII排序生成字符串:
#定义所有元素取值转换为字符串
def _trim_dict(my_dict) :
# 假设待删除的字典为d
for key in my_dict:
value = my_dict[key]
if isinstance(value, list):
new_value = []
for item in value:
if isinstance(item, dict):
new_value.append(json.dumps(_trim_dict(item)))
else:
new_value.append(str(item))
my_dict[key] = json.dumps(new_value)
continue
if isinstance(value, dict):
my_dict[key] = json.dumps(_trim_dict(value))
continue
my_dict[key] = str(value)
return my_dict
#移除空值元素
my_dict = {key: value for key, value in my_dict.items() if value is not None}
my_dict['recvWindow'] = 50000
my_dict['timestamp'] = int(round(time.time()*1000))
# my_dict['timestamp'] = 1749545309665
#将元素转换为字符串
_trim_dict(my_dict)
#根据ASCII排序生成字符串并移除特殊字符
json_str = json.dumps(my_dict, sort_keys=True).replace(' ', '').replace('\'','\"')
print(json_str)
{"positionSide":"BOTH","price":"0.28694","quantity":"190","recvWindow":"50000","side":"BUY","symbol":"SANDUSDT","timeInForce":"GTC","timestamp":"1749545309665","type":"LIMIT"}
第二步将第一步生成的字符串与账户信息以及nonce进行abi编码生成hash字符串:
from eth_abi import encode
from web3 import Web3
#使用WEB3 ABI对生成的字符串和user, signer, nonce进行编码
encoded = encode(['string', 'address', 'address', 'uint256'], [json_str, user, signer, nonce])
print(encoded.hex())
#000000000000000000000000000000000000000000000000000000000000008000000000000000000000000063dd5acc6b1aa0f563956c0e534dd30b6dcf7c4e00000000000000000000000021cf8ae13bb72632562c6fff438652ba1a151bb00000000000000000000000000000000000000000000000000006361457bcec8300000000000000000000000000000000000000000000000000000000000000af7b22706f736974696f6e53696465223a22424f5448222c227072696365223a22302e3238363934222c227175616e74697479223a22313930222c227265637657696e646f77223a223530303030222c2273696465223a22425559222c2273796d626f6c223a2253414e4455534454222c2274696d65496e466f726365223a22475443222c2274696d657374616d70223a2231373439353435333039363635222c2274797065223a224c494d4954227d0000000000000000000000000000000000
#keccak hex
keccak_hex =Web3.keccak(encoded).hex()
print(keccak_hex)
#9e0273fc91323f5cdbcb00c358be3dee2854afb2d3e4c68497364a2f27a377fc
第三步将第二步生成的hash用privateKey进行签名:
from eth_account import Account
from eth_abi import encode
from web3 import Web3, EthereumTesterProvider
from eth_account.messages import encode_defunct
signable_msg = encode_defunct(hexstr=keccak_hex)
signed_message = Account.sign_message(signable_message=signable_msg, private_key=priKey)
signature = '0x'+signed_message.signature.hex()
print(signature)
#0x0337dd720a21543b80ff861cd3c26646b75b3a6a4b5d45805d4c1d6ad6fc33e65f0722778dd97525466560c69fbddbe6874eb4ed6f5fa7e576e486d9b5da67f31b
第四步将所有参数以及第三步生成的signature组装成请求体:
my_dict['nonce'] = nonce
my_dict['user'] = user
my_dict['signer'] = signer
my_dict['signature'] = '0x'+signed_message.signature.hex()
url ='https://fapi.asterdex.com/fapi/v3/order'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'PythonApp/1.0'
}
res = requests.post(url,data=my_dict,headers=headers)
print(url)
#curl -X POST 'https://fapi.asterdex.com/fapi/v3/order' -d 'symbol=SANDUSDT&positionSide=BOTH&type=LIMIT&side=BUY&timeInForce=GTC&quantity=190&price=0.28694&recvWindow=50000×tamp=1749545309665&nonce=1748310859508867&user=0x63DD5aCC6b1aa0f563956C0e534DD30B6dcF7C4e&signer=0x21cF8Ae13Bb72632562c6Fff438652Ba1a151bb0&signature=0x0337dd720a21543b80ff861cd3c26646b75b3a6a4b5d45805d4c1d6ad6fc33e65f0722778dd97525466560c69fbddbe6874eb4ed6f5fa7e576e486d9b5da67f31b'
Key | Value |
---|---|
user | 0x63DD5aCC6b1aa0f563956C0e534DD30B6dcF7C4e |
signer | 0x21cF8Ae13Bb72632562c6Fff438652Ba1a151bb0 |
privateKey | 0x4fd0a42218f3eae43a6ce26d22544e986139a01e5b34a62db53757ffca81bae1 |
#python
nonce = math.trunc(time.time()*1000000)
print(nonce)
#1748310859508867
//java
Instant now = Instant.now();
long microsecond = now.getEpochSecond() * 1000000 + now.getNano() / 1000;
my_dict = {'symbol':'SANDUSDT','side':"SELL","type":'LIMIT','orderId':2194215}
第一步将所有业务参数转字符串后按照ascII排序生成字符串:
#定义所有元素取值转换为字符串
def _trim_dict(my_dict) :
for key in my_dict:
value = my_dict[key]
if isinstance(value, list):
new_value = []
for item in value:
if isinstance(item, dict):
new_value.append(json.dumps(_trim_dict(item)))
else:
new_value.append(str(item))
my_dict[key] = json.dumps(new_value)
continue
if isinstance(value, dict):
my_dict[key] = json.dumps(_trim_dict(value))
continue
my_dict[key] = str(value)
return my_dict
#移除空值元素
my_dict = {key: value for key, value in my_dict.items() if value is not None}
my_dict['recvWindow'] = 50000
my_dict['timestamp'] = int(round(time.time()*1000))
# my_dict['timestamp'] = 1749545309665
#将元素转换为字符串
_trim_dict(my_dict)
#根据ASCII排序生成字符串并移除特殊字符
json_str = json.dumps(my_dict, sort_keys=True).replace(' ', '').replace('\'','\"')
print(json_str)
#{"orderId":"2194215","recvWindow":"50000","side":"BUY","symbol":"SANDUSDT","timestamp":"1749545309665","type":"LIMIT"}
第二步将第一步生成的字符串与账户信息以及nonce进行abi编码生成hash字符串:
from eth_abi import encode
from web3 import Web3
#使用WEB3 ABI对生成的字符串和user, signer, nonce进行编码
encoded = encode(['string', 'address', 'address', 'uint256'], [json_str, user, signer, nonce])
print(encoded.hex())
#000000000000000000000000000000000000000000000000000000000000008000000000000000000000000063dd5acc6b1aa0f563956c0e534dd30b6dcf7c4e00000000000000000000000021cf8ae13bb72632562c6fff438652ba1a151bb00000000000000000000000000000000000000000000000000006361457bcec8300000000000000000000000000000000000000000000000000000000000000767b226f726465724964223a2232313934323135222c227265637657696e646f77223a223530303030222c2273696465223a22425559222c2273796d626f6c223a2253414e4455534454222c2274696d657374616d70223a2231373439353435333039363635222c2274797065223a224c494d4954227d00000000000000000000
keccak_hex =Web3.keccak(encoded).hex()
print(keccak_hex)
#6ad9569ea1355bf62de1b09b33b267a9404239af6d9227fa59e3633edae19e2a
第三步将第二步生成的hash用privateKey进行签名:
from eth_account import Account
from eth_abi import encode
from web3 import Web3, EthereumTesterProvider
from eth_account.messages import encode_defunct
signable_msg = encode_defunct(hexstr=keccak_hex)
signed_message = Account.sign_message(signable_message=signable_msg, private_key=priKey)
signature = '0x'+signed_message.signature.hex()
print(signature)
#0x4f5e36e91f0d4cf5b29b6559ebc2c808d3c808ebb13b2bcaaa478b98fb4195642c7473f0d1aa101359aaf278126af1a53bcb482fb05003bfb6bdc03de03c63151b
第四步将所有参数以及第三步生成的signature组装成请求体:
my_dict['nonce'] = nonce
my_dict['user'] = user
my_dict['signer'] = signer
my_dict['signature'] = '0x'+signed_message.signature.hex()
url ='https://fapi.asterdex.com/fapi/v3/order'
res = requests.get(url, params=my_dict)
print(url)
#curl -X GET 'https://fapi.asterdex.com/fapi/v3/order?symbol=SANDUSDT&side=BUY&type=LIMIT&orderId=2194215&recvWindow=50000×tamp=1749545309665&nonce=1748310859508867&user=0x63DD5aCC6b1aa0f563956C0e534DD30B6dcF7C4e&signer=0x21cF8Ae13Bb72632562c6Fff438652Ba1a151bb0&signature=0x4f5e36e91f0d4cf5b29b6559ebc2c808d3c808ebb13b2bcaaa478b98fb4195642c7473f0d1aa101359aaf278126af1a53bcb482fb05003bfb6bdc03de03c63151b'
#Python 3.9.6
#eth-account~=0.13.7
#eth-abi~=5.2.0
#web3~=7.11.0
#requests~=2.32.3
import json
import math
import time
import requests
from eth_abi import encode
from eth_account import Account
from eth_account.messages import encode_defunct
from web3 import Web3
user = '0x63DD5aCC6b1aa0f563956C0e534DD30B6dcF7C4e'
signer='0x21cF8Ae13Bb72632562c6Fff438652Ba1a151bb0'
priKey = "0x4fd0a42218f3eae43a6ce26d22544e986139a01e5b34a62db53757ffca81bae1"
host = 'https://fapi.asterdex.com'
placeOrder = {'url': '/fapi/v3/order', 'method': 'POST',
'params':{'symbol': 'SANDUSDT', 'positionSide': 'BOTH', 'type': 'LIMIT', 'side': 'BUY',
'timeInForce': 'GTC', 'quantity': "30", 'price': 0.325,'reduceOnly': True}}
getOrder = {'url':'/fapi/v3/order','method':'GET','params':{'symbol':'SANDUSDT','side':"BUY","type":'LIMIT','orderId':2194215}}
def call(api):
nonce = math.trunc(time.time() * 1000000)
my_dict = api['params']
send(api['url'],api['method'],sign(my_dict,nonce))
def sign(my_dict,nonce):
my_dict = {key: value for key, value in my_dict.items() if value is not None}
my_dict['recvWindow'] = 50000
my_dict['timestamp'] = int(round(time.time()*1000))
msg = trim_param(my_dict,nonce)
signable_msg = encode_defunct(hexstr=msg)
signed_message = Account.sign_message(signable_message=signable_msg, private_key=priKey)
my_dict['nonce'] = nonce
my_dict['user'] = user
my_dict['signer'] = signer
my_dict['signature'] = '0x'+signed_message.signature.hex()
print(my_dict['signature'])
return my_dict
def trim_param(my_dict,nonce) -> str:
_trim_dict(my_dict)
json_str = json.dumps(my_dict, sort_keys=True).replace(' ', '').replace('\'','\"')
print(json_str)
encoded = encode(['string', 'address', 'address', 'uint256'], [json_str, user, signer, nonce])
print(encoded.hex())
keccak_hex =Web3.keccak(encoded).hex()
print(keccak_hex)
return keccak_hex
def _trim_dict(my_dict) :
for key in my_dict:
value = my_dict[key]
if isinstance(value, list):
new_value = []
for item in value:
if isinstance(item, dict):
new_value.append(json.dumps(_trim_dict(item)))
else:
new_value.append(str(item))
my_dict[key] = json.dumps(new_value)
continue
if isinstance(value, dict):
my_dict[key] = json.dumps(_trim_dict(value))
continue
my_dict[key] = str(value)
return my_dict
def send(url, method, my_dict):
url = host + url
print(url)
print(my_dict)
if method == 'POST':
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'PythonApp/1.0'
}
res = requests.post(url, data=my_dict, headers=headers)
print(res.text)
if method == 'GET':
res = requests.get(url, params=my_dict)
print(res.text)
if method == 'DELETE':
res = requests.delete(url, data=my_dict)
print(res.text)
if __name__ == '__main__':
call(placeOrder)
# call(getOrder)
base asset
指一个交易对的交易对象,即写在靠前部分的资产名quote asset
指一个交易对的定价资产,即写在靠后部分资产名交易对类型:
合约类型 (contractType):
合约状态 (contractStatus, status):
订单状态 (status):
订单种类 (orderTypes, type):
订单方向 (side):
持仓方向:
有效方式 (timeInForce):
条件价格触发类型 (workingType)
响应类型 (newOrderRespType)
K线间隔:
m -> 分钟; h -> 小时; d -> 天; w -> 周; M -> 月
限制种类 (rateLimitType)
REQUEST_WEIGHT
{
"rateLimitType": "REQUEST_WEIGHT",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 2400
}
ORDERS
{
"rateLimitType": "ORDERS",
"interval": "MINUTE",
"intervalNum": 1,
"limit": 1200
}
REQUESTS_WEIGHT 单位时间请求权重之和上限
ORDERS 单位时间下单(撤单)次数上限
限制间隔
过滤器,即Filter,定义了一系列交易规则。
共有两类,分别是针对交易对的过滤器symbol filters
,和针对整个交易所的过滤器exchange filters
(暂不支持)
/exchangeInfo 响应中的格式:
{
"filterType": "PRICE_FILTER",
"minPrice": "0.00000100",
"maxPrice": "100000.00000000",
"tickSize": "0.00000100"
}
价格过滤器用于检测order订单中price参数的合法性
minPrice
定义了 price
/stopPrice
允许的最小值maxPrice
定义了 price
/stopPrice
允许的最大值。tickSize
定义了 price
/stopPrice
的步进间隔,即price必须等于minPrice+(tickSize的整数倍)
以上每一项均可为0,为0时代表这一项不再做限制。逻辑伪代码如下:
price
>= minPrice
price
<= maxPrice
price
-minPrice
) % tickSize
== 0*/exchangeInfo 响应中的格式:**
{
"filterType": "LOT_SIZE",
"minQty": "0.00100000",
"maxQty": "100000.00000000",
"stepSize": "0.00100000"
}
lots是拍卖术语,这个过滤器对订单中的quantity
也就是数量参数进行合法性检查。包含三个部分:
minQty
表示 quantity
允许的最小值.maxQty
表示 quantity
允许的最大值stepSize
表示 quantity
允许的步进值。逻辑伪代码如下:
quantity
>= minQty
quantity
<= maxQty
quantity
-minQty
) % stepSize
== 0参考LOT_SIZE,区别仅在于对市价单还是限价单生效
/exchangeInfo 响应中的格式:
{
"filterType": "MAX_NUM_ORDERS",
"limit": 200
}
定义了某个交易对最多允许的挂单数量(不包括已关闭的订单)
普通订单与条件订单均计算在内
/exchangeInfo format:
{
"filterType": "MAX_NUM_ALGO_ORDERS",
"limit": 100
}
定义了某个交易对最多允许的条件订单的挂单数量(不包括已关闭的订单)。
条件订单目前包括STOP
, STOP_MARKET
, TAKE_PROFIT
, TAKE_PROFIT_MARKET
, 和 TRAILING_STOP_MARKET
/exchangeInfo 响应中的格式:
{
"filterType": "PERCENT_PRICE",
"multiplierUp": "1.1500",
"multiplierDown": "0.8500",
"multiplierDecimal": 4
}
PERCENT_PRICE
定义了基于标记价格计算的挂单价格的可接受区间.
挂单价格必须同时满足以下条件:
price
<= markPrice
* multiplierUp
price
>= markPrice
* multiplierDown
/exchangeInfo 响应中的格式:
{
"filterType": "MIN_NOTIONAL",
"notioanl": "1"
}
MIN_NOTIONAL过滤器定义了交易对订单所允许的最小名义价值(成交额)。
订单的名义价值是价格
*数量
。
由于MARKET
订单没有价格,因此会使用 mark price 计算。
GET /fapi/v3/ping
响应:
{
}
测试能否联通
权重: 1
参数: NONE
响应:
{
"serverTime": 1499827319559 // 当前的系统时间
}
GET /fapi/v3/time
获取服务器时间
权重: 1
参数: NONE
响应:
{
"exchangeFilters": [],
"rateLimits": [ // API访问的限制
{
"interval": "MINUTE", // 按照分钟计算
"intervalNum": 1, // 按照1分钟计算
"limit": 2400, // 上限次数
"rateLimitType": "REQUEST_WEIGHT" // 按照访问权重来计算
},
{
"interval": "MINUTE",
"intervalNum": 1,
"limit": 1200,
"rateLimitType": "ORDERS" // 按照订单数量来计算
}
],
"serverTime": 1565613908500, // 请忽略。如果需要获取当前系统时间,请查询接口 “GET /fapi/v3/time”
"assets": [ // 资产信息
{
"asset": "BUSD",
"marginAvailable": true, // 是否可用作保证金
"autoAssetExchange": 0 // 保证金资产自动兑换阈值
},
{
"asset": "USDT",
"marginAvailable": true, // 是否可用作保证金
"autoAssetExchange": 0 // 保证金资产自动兑换阈值
},
{
"asset": "BNB",
"marginAvailable": false, // 是否可用作保证金
"autoAssetExchange": null // 保证金资产自动兑换阈值
}
],
"symbols": [ // 交易对信息
{
"symbol": "BLZUSDT", // 交易对
"pair": "BLZUSDT", // 标的交易对
"contractType": "PERPETUAL", // 合约类型
"deliveryDate": 4133404800000, // 交割日期
"onboardDate": 1598252400000, // 上线日期
"status": "TRADING", // 交易对状态
"maintMarginPercent": "2.5000", // 请忽略
"requiredMarginPercent": "5.0000", // 请忽略
"baseAsset": "BLZ", // 标的资产
"quoteAsset": "USDT", // 报价资产
"marginAsset": "USDT", // 保证金资产
"pricePrecision": 5, // 价格小数点位数(仅作为系统精度使用,注意同tickSize 区分)
"quantityPrecision": 0, // 数量小数点位数(仅作为系统精度使用,注意同stepSize 区分)
"baseAssetPrecision": 8, // 标的资产精度
"quotePrecision": 8, // 报价资产精度
"underlyingType": "COIN",
"underlyingSubType": ["STORAGE"],
"settlePlan": 0,
"triggerProtect": "0.15", // 开启"priceProtect"的条件订单的触发阈值
"filters": [
{
"filterType": "PRICE_FILTER", // 价格限制
"maxPrice": "300", // 价格上限, 最大价格
"minPrice": "0.0001", // 价格下限, 最小价格
"tickSize": "0.0001" // 订单最小价格间隔
},
{
"filterType": "LOT_SIZE", // 数量限制
"maxQty": "10000000", // 数量上限, 最大数量
"minQty": "1", // 数量下限, 最小数量
"stepSize": "1" // 订单最小数量间隔
},
{
"filterType": "MARKET_LOT_SIZE", // 市价订单数量限制
"maxQty": "590119", // 数量上限, 最大数量
"minQty": "1", // 数量下限, 最小数量
"stepSize": "1" // 允许的步进值
},
{
"filterType": "MAX_NUM_ORDERS", // 最多订单数限制
"limit": 200
},
{
"filterType": "MAX_NUM_ALGO_ORDERS", // 最多条件订单数限制
"limit": 100
},
{
"filterType": "MIN_NOTIONAL", // 最小名义价值
"notional": "1",
},
{
"filterType": "PERCENT_PRICE", // 价格比限制
"multiplierUp": "1.1500", // 价格上限百分比
"multiplierDown": "0.8500", // 价格下限百分比
"multiplierDecimal": 4
}
],
"OrderType": [ // 订单类型
"LIMIT", // 限价单
"MARKET", // 市价单
"STOP", // 止损单
"STOP_MARKET", // 止损市价单
"TAKE_PROFIT", // 止盈单
"TAKE_PROFIT_MARKET", // 止盈暑市价单
"TRAILING_STOP_MARKET" // 跟踪止损市价单
],
"timeInForce": [ // 有效方式
"GTC", // 成交为止, 一直有效
"IOC", // 无法立即成交(吃单)的部分就撤销
"FOK", // 无法全部立即成交就撤销
"GTX" // 无法成为挂单方就撤销
],
"liquidationFee": "0.010000", // 强平费率
"marketTakeBound": "0.30", // 市价吃单(相对于标记价格)允许可造成的最大价格偏离比例
}
],
"timezone": "UTC" // 服务器所用的时间区域
}
GET /fapi/v3/exchangeInfo
获取交易规则和交易对
权重: 1
参数: NONE
响应:
{
"lastUpdateId": 1027024,
"E": 1589436922972, // 消息时间
"T": 1589436922959, // 撮合引擎时间
"bids": [ // 买单
[
"4.00000000", // 价格
"431.00000000" // 数量
]
],
"asks": [ // 卖单
[
"4.00000200", // 价格
"12.00000000" // 数量
]
]
}
GET /fapi/v3/depth
权重:
limit | 权重 |
---|---|
5, 10, 20, 50 | 2 |
100 | 5 |
500 | 10 |
1000 | 20 |
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
limit | INT | NO | 默认 500; 可选值:[5, 10, 20, 50, 100, 500, 1000] |
响应:
;[
{
id: 28457, // 成交ID
price: '4.00000100', // 成交价格
qty: '12.00000000', // 成交量
quoteQty: '48.00', // 成交额
time: 1499865549590, // 时间
isBuyerMaker: true, // 买方是否为挂单方
},
]
GET /fapi/v3/trades
获取近期订单簿成交
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
limit | INT | NO | 默认:500,最大1000 |
响应:
;[
{
id: 28457, // 成交ID
price: '4.00000100', // 成交价格
qty: '12.00000000', // 成交量
quoteQty: '48.00', // 成交额
time: 1499865549590, // 时间
isBuyerMaker: true, // 买方是否为挂单方
},
]
GET /fapi/v3/historicalTrades
查询订单簿历史成交
权重: 20
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
limit | INT | NO | 默认值:500 最大值:1000. |
fromId | LONG | NO | 从哪一条成交id开始返回. 缺省返回最近的成交记录 |
响应:
;[
{
a: 26129, // 归集成交ID
p: '0.01633102', // 成交价
q: '4.70443515', // 成交量
f: 27781, // 被归集的首个成交ID
l: 27781, // 被归集的末个成交ID
T: 1498793709153, // 成交时间
m: true, // 是否为主动卖出单
},
]
GET /fapi/v3/aggTrades
归集交易与逐笔交易的区别在于,同一价格、同一方向、同一时间(按秒计算)的订单簿trade会被聚合为一条
权重: 20
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
fromId | LONG | NO | 从包含fromID的成交开始返回结果 |
startTime | LONG | NO | 从该时刻之后的成交记录开始返回结果 |
endTime | LONG | NO | 返回该时刻为止的成交记录 |
limit | INT | NO | 默认 500; 最大 1000. |
startTime
和endTime
,间隔必须小于一小时fromId
, startTime
, endTime
),默认返回最近的成交记录响应:
;[
[
1499040000000, // 开盘时间
'0.01634790', // 开盘价
'0.80000000', // 最高价
'0.01575800', // 最低价
'0.01577100', // 收盘价(当前K线未结束的即为最新价)
'148976.11427815', // 成交量
1499644799999, // 收盘时间
'2434.19055334', // 成交额
308, // 成交笔数
'1756.87402397', // 主动买入成交量
'28.46694368', // 主动买入成交额
'17928899.62484339', // 请忽略该参数
],
]
GET /fapi/v3/klines
每根K线的开盘时间可视为唯一ID
权重: 取决于请求中的LIMIT参数
LIMIT参数 | 权重 |
---|---|
[1,100) | 1 |
[100, 500) | 2 |
[500, 1000] | 5 |
> 1000 | 10 |
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
interval | ENUM | YES | 时间间隔 |
startTime | LONG | NO | 起始时间 |
endTime | LONG | NO | 结束时间 |
limit | INT | NO | 默认值:500 最大值:1500. |
响应:
;[
[
1591256400000, // 开盘时间
'9653.69440000', // 开盘价
'9653.69640000', // 最高价
'9651.38600000', // 最低价
'9651.55200000', // 收盘价(当前K线未结束的即为最新价)
'0 ', // 请忽略
1591256459999, // 收盘时间
'0', // 请忽略
60, // 构成记录数
'0', // 请忽略
'0', // 请忽略
'0', // 请忽略
],
]
GET /fapi/v3/indexPriceKlines
每根K线的开盘时间可视为唯一ID
权重: 取决于请求中的LIMIT参数
LIMIT参数 | 权重 |
---|---|
[1,100) | 1 |
[100, 500) | 2 |
[500, 1000] | 5 |
> 1000 | 10 |
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
pair | STRING | YES | 标的交易对 |
interval | ENUM | YES | 时间间隔 |
startTime | LONG | NO | 起始时间 |
endTime | LONG | NO | 结束时间 |
limit | INT | NO | 默认值:500 最大值:1500 |
响应:
;[
[
1591256400000, // 开盘时间
'9653.69440000', // 开盘价
'9653.69640000', // 最高价
'9651.38600000', // 最低价
'9651.55200000', // 收盘价(当前K线未结束的即为最新价)
'0 ', // 请忽略
1591256459999, // 收盘时间
'0', // 请忽略
60, // 构成记录数
'0', // 请忽略
'0', // 请忽略
'0', // 请忽略
],
]
GET /fapi/v3/markPriceKlines
每根K线的开盘时间可视为唯一ID
权重: 取决于请求中的LIMIT参数
LIMIT参数 | 权重 |
---|---|
[1,100) | 1 |
[100, 500) | 2 |
[500, 1000] | 5 |
> 1000 | 10 |
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
interval | ENUM | YES | 时间间隔 |
startTime | LONG | NO | 起始时间 |
endTime | LONG | NO | 结束时间 |
limit | INT | NO | 默认值:500 最大值:1500 |
响应:
{
"symbol": "BTCUSDT", // 交易对
"markPrice": "11793.63104562", // 标记价格
"indexPrice": "11781.80495970", // 指数价格
"estimatedSettlePrice": "11781.16138815", // 预估结算价,仅在交割开始前最后一小时有意义
"lastFundingRate": "0.00038246", // 最近更新的资金费率
"nextFundingTime": 1597392000000, // 下次资金费时间
"interestRate": "0.00010000", // 标的资产基础利率
"time": 1597370495002 // 更新时间
}
当不指定symbol时相应
;[
{
symbol: 'BTCUSDT', // 交易对
markPrice: '11793.63104562', // 标记价格
indexPrice: '11781.80495970', // 指数价格
estimatedSettlePrice: '11781.16138815', // 预估结算价,仅在交割开始前最后一小时有意义
lastFundingRate: '0.00038246', // 最近更新的资金费率
nextFundingTime: 1597392000000, // 下次资金费时间
interestRate: '0.00010000', // 标的资产基础利率
time: 1597370495002, // 更新时间
},
]
GET /fapi/v3/premiumIndex
采集各大交易所数据加权平均
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | 交易对 |
响应:
;[
{
symbol: 'BTCUSDT', // 交易对
fundingRate: '-0.03750000', // 资金费率
fundingTime: 1570608000000, // 资金费时间
},
{
symbol: 'BTCUSDT',
fundingRate: '0.00010000',
fundingTime: 1570636800000,
},
]
GET /fapi/v3/fundingRate
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | 交易对 |
startTime | LONG | NO | 起始时间 |
endTime | LONG | NO | 结束时间 |
limit | INT | NO | 默认值:100 最大值:1000 |
startTime
和 endTime
都未发送, 返回最近 limit
条数据.startTime
和 endTime
之间的数据量大于 limit
, 返回 startTime
+ limit
情况下的数据。响应:
{
"symbol": "BTCUSDT",
"priceChange": "-94.99999800", //24小时价格变动
"priceChangePercent": "-95.960", //24小时价格变动百分比
"weightedAvgPrice": "0.29628482", //加权平均价
"lastPrice": "4.00000200", //最近一次成交价
"lastQty": "200.00000000", //最近一次成交额
"openPrice": "99.00000000", //24小时内第一次成交的价格
"highPrice": "100.00000000", //24小时最高价
"lowPrice": "0.10000000", //24小时最低价
"volume": "8913.30000000", //24小时成交量
"quoteVolume": "15.30000000", //24小时成交额
"openTime": 1499783499040, //24小时内,第一笔交易的发生时间
"closeTime": 1499869899040, //24小时内,最后一笔交易的发生时间
"firstId": 28385, // 首笔成交id
"lastId": 28460, // 末笔成交id
"count": 76 // 成交笔数
}
或(当不发送交易对信息)
;[
{
symbol: 'BTCUSDT',
priceChange: '-94.99999800', //24小时价格变动
priceChangePercent: '-95.960', //24小时价格变动百分比
weightedAvgPrice: '0.29628482', //加权平均价
lastPrice: '4.00000200', //最近一次成交价
lastQty: '200.00000000', //最近一次成交额
openPrice: '99.00000000', //24小时内第一次成交的价格
highPrice: '100.00000000', //24小时最高价
lowPrice: '0.10000000', //24小时最低价
volume: '8913.30000000', //24小时成交量
quoteVolume: '15.30000000', //24小时成交额
openTime: 1499783499040, //24小时内,第一笔交易的发生时间
closeTime: 1499869899040, //24小时内,最后一笔交易的发生时间
firstId: 28385, // 首笔成交id
lastId: 28460, // 末笔成交id
count: 76, // 成交笔数
},
]
GET /fapi/v3/ticker/24hr
请注意,不携带symbol参数会返回全部交易对数据,不仅数据庞大,而且权重极高
权重:
1
40
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | 交易对 |
响应:
{
"symbol": "LTCBTC", // 交易对
"price": "4.00000200", // 价格
"time": 1589437530011 // 撮合引擎时间
}
或(当不发送symbol)
;[
{
symbol: 'BTCUSDT', // 交易对
price: '6000.01', // 价格
time: 1589437530011, // 撮合引擎时间
},
]
GET /fapi/v3/ticker/price
返回最近价格
权重:
1
2
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | 交易对 |
响应:
{
"symbol": "BTCUSDT", // 交易对
"bidPrice": "4.00000000", //最优买单价
"bidQty": "431.00000000", //挂单量
"askPrice": "4.00000200", //最优卖单价
"askQty": "9.00000000", //挂单量
"time": 1589437530011 // 撮合引擎时间
}
或(当不发送symbol)
;[
{
symbol: 'BTCUSDT', // 交易对
bidPrice: '4.00000000', //最优买单价
bidQty: '431.00000000', //挂单量
askPrice: '4.00000200', //最优卖单价
askQty: '9.00000000', //挂单量
time: 1589437530011, // 撮合引擎时间
},
]
GET /fapi/v3/ticker/bookTicker
返回当前最优的挂单(最高买单,最低卖单)
权重:
1
2
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | 交易对 |
id
是无符号整数,作为往来信息的唯一标识。响应
{
"result": null,
"id": 1
}
请求
{
"method": "SUBSCRIBE",
"params":
[
"btcusdt@aggTrade",
"btcusdt@depth"
],
"id": 1
}
响应
{
"result": null,
"id": 312
}
{
"method": "UNSUBSCRIBE",
"params":
[
"btcusdt@depth"
],
"id": 312
}
响应
{
"result": [
"btcusdt@aggTrade"
],
"id": 3
}
{
"method": "LIST_SUBSCRIPTIONS",
"id": 3
}
当前,唯一可以设置的属性是设置是否启用combined
("组合")信息流。
当使用/ws/
("原始信息流")进行连接时,combined属性设置为false
,而使用 /stream/
进行连接时则将属性设置为true
。
响应
{
"result": null
"id": 5
}
{
"method": "SET_PROPERTY",
"params":
[
"combined",
true
],
"id": 5
}
响应
{
"result": true, // Indicates that combined is set to true.
"id": 2
}
{
"method": "GET_PROPERTY",
"params":
[
"combined"
],
"id": 2
}
错误信息 | 描述 |
---|---|
{"code": 0, "msg": "Unknown property"} | SET_PROPERTY 或 GET_PROPERTY 中应用的参数无效 |
{"code": 1, "msg": "Invalid value type: expected Boolean"} | 仅接受true 或false |
{"code": 2, "msg": "Invalid request: property name must be a string"} | 提供的属性名无效 |
{"code": 2, "msg": "Invalid request: request ID must be an unsigned integer"} | 参数id 未提供或id 值是无效类型 |
{"code": 2, "msg": "Invalid request: unknown variant %s, expected one of SUBSCRIBE , UNSUBSCRIBE , LIST_SUBSCRIPTIONS , SET_PROPERTY , GET_PROPERTY at line 1 column 28"} |
错字提醒,或提供的值不是预期类型 |
{"code": 2, "msg": "Invalid request: too many parameters"} | 数据中提供了不必要参数 |
{"code": 2, "msg": "Invalid request: property name must be a string"} | 未提供属性名 |
{"code": 2, "msg": "Invalid request: missing field method at line 1 column 73"} |
数据未提供method |
{"code":3,"msg":"Invalid JSON: expected value at line %s column %s"} | JSON 语法有误. |
aggTrade中的价格'p'或ticker/miniTicker中的价格'c'均可以作为最新成交价。
Payload:
{
"e": "aggTrade", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBUSDT", // 交易对
"a": 5933014, // 归集成交 ID
"p": "0.001", // 成交价格
"q": "100", // 成交量
"f": 100, // 被归集的首个交易ID
"l": 105, // 被归集的末次交易ID
"T": 123456785, // 成交时间
"m": true // 买方是否是做市方。如true,则此次成交是一个主动卖出单,否则是一个主动买入单。
}
同一价格、同一方向、同一时间(100ms计算)的trade会被聚合为一条.
Stream Name:
<symbol>@aggTrade
Update Speed: 100ms
Payload:
{
"e": "markPriceUpdate", // 事件类型
"E": 1562305380000, // 事件时间
"s": "BTCUSDT", // 交易对
"p": "11794.15000000", // 标记价格
"i": "11784.62659091", // 现货指数价格
"P": "11784.25641265", // 预估结算价,仅在结算前最后一小时有参考价值
"r": "0.00038167", // 资金费率
"T": 1562306400000 // 下次资金时间
}
Stream Name:
<symbol>@markPrice
或 <symbol>@markPrice@1s
Update Speed: 3000ms 或 1000ms
Payload:
[
{
"e": "markPriceUpdate", // 事件类型
"E": 1562305380000, // 事件时间
"s": "BTCUSDT", // 交易对
"p": "11185.87786614", // 标记价格
"i": "11784.62659091" // 现货指数价格
"P": "11784.25641265", // 预估结算价,仅在结算前最后一小时有参考价值
"r": "0.00030000", // 资金费率
"T": 1562306400000 // 下个资金时间
}
]
Stream Name:
!markPrice@arr
或 !markPrice@arr@1s
Update Speed: 3000ms 或 1000ms
Payload:
{
"e": "kline", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBUSDT", // 交易对
"k": {
"t": 123400000, // 这根K线的起始时间
"T": 123460000, // 这根K线的结束时间
"s": "BNBUSDT", // 交易对
"i": "1m", // K线间隔
"f": 100, // 这根K线期间第一笔成交ID
"L": 200, // 这根K线期间末一笔成交ID
"o": "0.0010", // 这根K线期间第一笔成交价
"c": "0.0020", // 这根K线期间末一笔成交价
"h": "0.0025", // 这根K线期间最高成交价
"l": "0.0015", // 这根K线期间最低成交价
"v": "1000", // 这根K线期间成交量
"n": 100, // 这根K线期间成交笔数
"x": false, // 这根K线是否完结(是否已经开始下一根K线)
"q": "1.0000", // 这根K线期间成交额
"V": "500", // 主动买入的成交量
"Q": "0.500", // 主动买入的成交额
"B": "123456" // 忽略此参数
}
}
K线stream逐秒推送所请求的K线种类(最新一根K线)的更新。推送间隔250毫秒(如有刷新)
订阅Kline需要提供间隔参数,最短为分钟线,最长为月线。支持以下间隔:
m -> 分钟; h -> 小时; d -> 天; w -> 周; M -> 月
Stream Name:
<symbol>@kline_<interval>
Update Speed: 250ms
Payload:
{
"e": "24hrMiniTicker", // 事件类型
"E": 123456789, // 事件时间(毫秒)
"s": "BNBUSDT", // 交易对
"c": "0.0025", // 最新成交价格
"o": "0.0010", // 24小时前开始第一笔成交价格
"h": "0.0025", // 24小时内最高成交价
"l": "0.0010", // 24小时内最低成交价
"v": "10000", // 成交量
"q": "18" // 成交额
}
按Symbol刷新的24小时精简ticker信息.
Stream Name:
`<symbol>@miniTicker
Update Speed: 500ms
Payload:
;[
{
e: '24hrMiniTicker', // 事件类型
E: 123456789, // 事件时间(毫秒)
s: 'BNBUSDT', // 交易对
c: '0.0025', // 最新成交价格
o: '0.0010', // 24小时前开始第一笔成交价格
h: '0.0025', // 24小时内最高成交价
l: '0.0010', // 24小时内最低成交价
v: '10000', // 成交量
q: '18', // 成交额
},
]
所有symbol24小时精简ticker信息.需要注意的是,只有发生变化的ticker更新才会被推送。
Stream Name:
!miniTicker@arr
Update Speed: 1000ms
Payload:
{
"e": "24hrTicker", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBUSDT", // 交易对
"p": "0.0015", // 24小时价格变化
"P": "250.00", // 24小时价格变化(百分比)
"w": "0.0018", // 平均价格
"c": "0.0025", // 最新成交价格
"Q": "10", // 最新成交价格上的成交量
"o": "0.0010", // 24小时内第一比成交的价格
"h": "0.0025", // 24小时内最高成交价
"l": "0.0010", // 24小时内最低成交价
"v": "10000", // 24小时内成交量
"q": "18", // 24小时内成交额
"O": 0, // 统计开始时间
"C": 86400000, // 统计关闭时间
"F": 0, // 24小时内第一笔成交交易ID
"L": 18150, // 24小时内最后一笔成交交易ID
"n": 18151 // 24小时内成交数
}
按Symbol刷新的24小时完整ticker信息
Stream Name:
<symbol>@ticker
Update Speed: 500ms
Payload:
;[
{
e: '24hrTicker', // 事件类型
E: 123456789, // 事件时间
s: 'BNBUSDT', // 交易对
p: '0.0015', // 24小时价格变化
P: '250.00', // 24小时价格变化(百分比)
w: '0.0018', // 平均价格
c: '0.0025', // 最新成交价格
Q: '10', // 最新成交价格上的成交量
o: '0.0010', // 24小时内第一比成交的价格
h: '0.0025', // 24小时内最高成交价
l: '0.0010', // 24小时内最低成交价
v: '10000', // 24小时内成交量
q: '18', // 24小时内成交额
O: 0, // 统计开始时间
C: 86400000, // 统计结束时间
F: 0, // 24小时内第一笔成交交易ID
L: 18150, // 24小时内最后一笔成交交易ID
n: 18151, // 24小时内成交数
},
]
所有symbol 24小时完整ticker信息.需要注意的是,只有发生变化的ticker更新才会被推送。
Stream Name:
!ticker@arr
Update Speed: 1000ms
Payload:
{
"e":"bookTicker", // 事件类型
"u":400900217, // 更新ID
"E": 1568014460893, // 事件推送时间
"T": 1568014460891, // 撮合时间
"s":"BNBUSDT", // 交易对
"b":"25.35190000", // 买单最优挂单价格
"B":"31.21000000", // 买单最优挂单数量
"a":"25.36520000", // 卖单最优挂单价格
"A":"40.66000000" // 卖单最优挂单数量
}
实时推送指定交易对最优挂单信息
Stream Name: <symbol>@bookTicker
Update Speed: 实时
Payload:
{
// Same as <symbol>@bookTicker payload
}
所有交易对交易对最优挂单信息
Stream Name: !bookTicker
Update Speed: 实时
##强平订单
Payload:
{
"e":"forceOrder", // 事件类型
"E":1568014460893, // 事件时间
"o":{
"s":"BTCUSDT", // 交易对
"S":"SELL", // 订单方向
"o":"LIMIT", // 订单类型
"f":"IOC", // 有效方式
"q":"0.014", // 订单数量
"p":"9910", // 订单价格
"ap":"9910", // 平均价格
"X":"FILLED", // 订单状态
"l":"0.014", // 订单最近成交量
"z":"0.014", // 订单累计成交量
"T":1568014460893, // 交易时间
}
}
推送特定symbol
的强平订单快照信息。
1000ms内至多仅推送一条最近的强平订单作为快照
Stream Name: <symbol>@forceOrder
Update Speed: 1000ms
Payload:
{
"e": "depthUpdate", // 事件类型
"E": 1571889248277, // 事件时间
"T": 1571889248276, // 交易时间
"s": "BTCUSDT",
"U": 390497796,
"u": 390497878,
"pu": 390497794,
"b": [ // 买方
[
"7403.89", // 价格
"0.002" // 数量
],
[
"7403.90",
"3.906"
],
[
"7404.00",
"1.428"
],
[
"7404.85",
"5.239"
],
[
"7405.43",
"2.562"
]
],
"a": [ // 卖方
[
"7405.96", // 价格
"3.340" // 数量
],
[
"7406.63",
"4.525"
],
[
"7407.08",
"2.475"
],
[
"7407.15",
"4.800"
],
[
"7407.20",
"0.175"
]
]
}
推送有限档深度信息。levels表示几档买卖单信息, 可选 5/10/20档
Stream Names: <symbol>@depth<levels>
或 <symbol>@depth<levels>@500ms
或 <symbol>@depth<levels>@100ms
.
Update Speed: 250ms 或 500ms 或 100ms
Payload:
{
"e": "depthUpdate", // 事件类型
"E": 123456789, // 事件时间
"T": 123456788, // 撮合时间
"s": "BNBUSDT", // 交易对
"U": 157, // 从上次推送至今新增的第一个 update Id
"u": 160, // 从上次推送至今新增的最后一个 update Id
"pu": 149, // 上次推送的最后一个update Id(即上条消息的‘u’)
"b": [ // 变动的买单深度
[
"0.0024", // 价格
"10" // 数量
]
],
"a": [ // 变动的卖单深度
[
"0.0026", // 价格
"100" // 数量
]
]
}
orderbook的变化部分,推送间隔250毫秒,500毫秒,100毫秒(如有刷新)
Stream 名称:
<symbol>@depth
OR <symbol>@depth@500ms
OR <symbol>@depth@100ms
Update Speed: 250ms 或 500ms 或 100ms
u
< 步骤3中获取到的快照中的lastUpdateId
的部分丢弃(丢弃更早的信息,已经过期)。U
<= lastUpdateId
且 u
>= lastUpdateId
的event开始继续更新本地副本。pu
应该等于上一个event的u
,否则可能出现了丢包,请从step3重新进行初始化。响应:
{
"code": 200,
"msg": "success"
}
POST /fapi/v3/positionSide/dual (HMAC SHA256)
变换用户在 所有symbol 合约上的持仓模式:双向持仓或单向持仓。
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
dualSidePosition | STRING | YES | "true": 双向持仓模式;"false": 单向持仓模式 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"dualSidePosition": true // "true": 双向持仓模式;"false": 单向持仓模式
}
GET /fapi/v3/positionSide/dual (HMAC SHA256)
查询用户目前在 所有symbol 合约上的持仓模式:双向持仓或单向持仓。
权重: 30
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"code": 200,
"msg": "success"
}
POST /fapi/v3/multiAssetsMargin (HMAC SHA256)
变换用户在 所有symbol 合约上的联合保证金模式:开启或关闭联合保证金模式。
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
multiAssetsMargin | STRING | YES | "true": 联合保证金模式开启;"false": 联合保证金模式关闭 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"multiAssetsMargin": true // "true": 联合保证金模式开启;"false": 联合保证金模式关闭
}
GET /fapi/v3/multiAssetsMargin (HMAC SHA256)
查询用户目前在 所有symbol 合约上的联合保证金模式。
权重: 30
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"clientOrderId": "testOrder", // 用户自定义的订单号
"cumQty": "0",
"cumQuote": "0", // 成交金额
"executedQty": "0", // 成交量
"orderId": 22542179, // 系统订单号
"avgPrice": "0.00000", // 平均成交价
"origQty": "10", // 原始委托数量
"price": "0", // 委托价格
"reduceOnly": false, // 仅减仓
"side": "SELL", // 买卖方向
"positionSide": "SHORT", // 持仓方向
"status": "NEW", // 订单状态
"stopPrice": "0", // 触发价,对`TRAILING_STOP_MARKET`无效
"closePosition": false, // 是否条件全平仓
"symbol": "BTCUSDT", // 交易对
"timeInForce": "GTC", // 有效方法
"type": "TRAILING_STOP_MARKET", // 订单类型
"origType": "TRAILING_STOP_MARKET", // 触发前订单类型
"activatePrice": "9020", // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
"priceRate": "0.3", // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
"updateTime": 1566818724722, // 更新时间
"workingType": "CONTRACT_PRICE", // 条件价格触发类型
"priceProtect": false // 是否开启条件单触发保护
}
POST /fapi/v3/order (HMAC SHA256)
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
side | ENUM | YES | 买卖方向 SELL , BUY |
positionSide | ENUM | NO | 持仓方向,单向持仓模式下非必填,默认且仅可填BOTH ;在双向持仓模式下必填,且仅可选择 LONG 或 SHORT |
type | ENUM | YES | 订单类型 LIMIT , MARKET , STOP , TAKE_PROFIT , STOP_MARKET , TAKE_PROFIT_MARKET , TRAILING_STOP_MARKET |
reduceOnly | STRING | NO | true , false ; 非双开模式下默认false ;双开模式下不接受此参数; 使用closePosition 不支持此参数。 |
quantity | DECIMAL | NO | 下单数量,使用closePosition 不支持此参数。 |
price | DECIMAL | NO | 委托价格 |
newClientOrderId | STRING | NO | 用户自定义的订单号,不可以重复出现在挂单中。如空缺系统会自动赋值。必须满足正则规则 ^[\.A-Z\:/a-z0-9_-]{1,36}$ |
stopPrice | DECIMAL | NO | 触发价, 仅 STOP , STOP_MARKET , TAKE_PROFIT , TAKE_PROFIT_MARKET 需要此参数 |
closePosition | STRING | NO | true , false ;触发后全部平仓,仅支持STOP_MARKET 和TAKE_PROFIT_MARKET ;不与quantity 合用;自带只平仓效果,不与reduceOnly 合用 |
activationPrice | DECIMAL | NO | 追踪止损激活价格,仅TRAILING_STOP_MARKET 需要此参数, 默认为下单当前市场价格(支持不同workingType ) |
callbackRate | DECIMAL | NO | 追踪止损回调比例,可取值范围[0.1, 5],其中 1代表1% ,仅TRAILING_STOP_MARKET 需要此参数 |
timeInForce | ENUM | NO | 有效方法 |
workingType | ENUM | NO | stopPrice 触发类型: MARK_PRICE (标记价格), CONTRACT_PRICE (合约最新价). 默认 CONTRACT_PRICE |
priceProtect | STRING | NO | 条件单触发保护:"TRUE","FALSE", 默认"FALSE". 仅 STOP , STOP_MARKET , TAKE_PROFIT , TAKE_PROFIT_MARKET 需要此参数 |
newOrderRespType | ENUM | NO | "ACK", "RESULT", 默认 "ACK" |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
根据 order type
的不同,某些参数强制要求,具体如下:
Type | 强制要求的参数 |
---|---|
LIMIT |
timeInForce , quantity , price |
MARKET |
quantity |
STOP , TAKE_PROFIT |
quantity , price , stopPrice |
STOP_MARKET , TAKE_PROFIT_MARKET |
stopPrice |
TRAILING_STOP_MARKET |
callbackRate |
条件单的触发必须:
如果订单参数priceProtect
为true:
达到触发价时,MARK_PRICE
(标记价格)与CONTRACT_PRICE
(合约最新价)之间的价差不能超过改symbol触发保护阈值
触发保护阈值请参考接口GET /fapi/v3/exchangeInfo
返回内容相应symbol中"triggerProtect"字段
STOP
, STOP_MARKET
止损单:
买入: 最新合约价格/标记价格高于等于触发价stopPrice
卖出: 最新合约价格/标记价格低于等于触发价stopPrice
TAKE_PROFIT
, TAKE_PROFIT_MARKET
止盈单:
买入: 最新合约价格/标记价格低于等于触发价stopPrice
卖出: 最新合约价格/标记价格高于等于触发价stopPrice
TRAILING_STOP_MARKET
跟踪止损单:
买入: 当合约价格/标记价格区间最低价格低于激活价格activationPrice
,且最新合约价格/标记价高于等于最低价设定回调幅度。
卖出: 当合约价格/标记价格区间最高价格高于激活价格activationPrice
,且最新合约价格/标记价低于等于最高价设定回调幅度。
TRAILING_STOP_MARKET
跟踪止损单如果遇到报错 {"code": -2021, "msg": "Order would immediately trigger."}
表示订单不满足以下条件:
_ 买入: 指定的activationPrice
必须小于 latest price
_ 卖出: 指定的activationPrice
必须大于 latest price
newOrderRespType
如果传 RESULT
:
MARKET
订单将直接返回成交结果;timeInForce
的 LIMIT
订单将直接返回成交或过期拒绝结果。STOP_MARKET
, TAKE_PROFIT_MARKET
配合 closePosition
=true
:
quantity
参数reduceOnly
参数LONG
方向上不支持BUY
; SHORT
方向上不支持SELL
响应:
字段与下单接口一致,但均为无效值
POST /fapi/v3/order/test (HMAC SHA256)
用于测试订单请求,但不会提交到撮合引擎
权重: 1
参数:
参考 POST /fapi/v3/order
响应:
;[
{
clientOrderId: 'testOrder', // 用户自定义的订单号
cumQty: '0',
cumQuote: '0', // 成交金额
executedQty: '0', // 成交量
orderId: 22542179, // 系统订单号
avgPrice: '0.00000', // 平均成交价
origQty: '10', // 原始委托数量
price: '0', // 委托价格
reduceOnly: false, // 仅减仓
side: 'SELL', // 买卖方向
positionSide: 'SHORT', // 持仓方向
status: 'NEW', // 订单状态
stopPrice: '0', // 触发价,对`TRAILING_STOP_MARKET`无效
closePosition: false, // 是否条件全平仓
symbol: 'BTCUSDT', // 交易对
timeInForce: 'GTC', // 有效方法
type: 'TRAILING_STOP_MARKET', // 订单类型
origType: 'TRAILING_STOP_MARKET', // 触发前订单类型
activatePrice: '9020', // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
priceRate: '0.3', // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
updateTime: 1566818724722, // 更新时间
workingType: 'CONTRACT_PRICE', // 条件价格触发类型
priceProtect: false, // 是否开启条件单触发保护
},
{
code: -2022,
msg: 'ReduceOnly Order is rejected.',
},
]
POST /fapi/v3/batchOrders (HMAC SHA256)
权重: 5
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
batchOrders | list | YES | 订单列表,最多支持5个订单 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
side | ENUM | YES | 买卖方向 SELL , BUY |
positionSide | ENUM | NO | 持仓方向,单向持仓模式下非必填,默认且仅可填BOTH ;在双向持仓模式下必填,且仅可选择 LONG 或 SHORT |
type | ENUM | YES | 订单类型 LIMIT , MARKET , STOP , TAKE_PROFIT , STOP_MARKET , TAKE_PROFIT_MARKET , TRAILING_STOP_MARKET |
reduceOnly | STRING | NO | true , false ; 非双开模式下默认false ;双开模式下不接受此参数。 |
quantity | DECIMAL | YES | 下单数量 |
price | DECIMAL | NO | 委托价格 |
newClientOrderId | STRING | NO | 用户自定义的订单号,不可以重复出现在挂单中。如空缺系统会自动赋值. 必须满足正则规则 ^[\.A-Z\:/a-z0-9_-]{1,36}$ |
stopPrice | DECIMAL | NO | 触发价, 仅 STOP , STOP_MARKET , TAKE_PROFIT , TAKE_PROFIT_MARKET 需要此参数 |
activationPrice | DECIMAL | NO | 追踪止损激活价格,仅TRAILING_STOP_MARKET 需要此参数, 默认为下单当前市场价格(支持不同workingType ) |
callbackRate | DECIMAL | NO | 追踪止损回调比例,可取值范围[0.1, 4],其中 1代表1% ,仅TRAILING_STOP_MARKET 需要此参数 |
timeInForce | ENUM | NO | 有效方法 |
workingType | ENUM | NO | stopPrice 触发类型: MARK_PRICE (标记价格), CONTRACT_PRICE (合约最新价). 默认 CONTRACT_PRICE |
priceProtect | STRING | NO | 条件单触发保护:"TRUE","FALSE", 默认"FALSE". 仅 STOP , STOP_MARKET , TAKE_PROFIT , TAKE_PROFIT_MARKET 需要此参数 |
newOrderRespType | ENUM | NO | "ACK", "RESULT", 默认 "ACK" |
响应:
{
"avgPrice": "0.00000", // 平均成交价
"clientOrderId": "abc", // 用户自定义的订单号
"cumQuote": "0", // 成交金额
"executedQty": "0", // 成交量
"orderId": 1573346959, // 系统订单号
"origQty": "0.40", // 原始委托数量
"origType": "TRAILING_STOP_MARKET", // 触发前订单类型
"price": "0", // 委托价格
"reduceOnly": false, // 是否仅减仓
"side": "BUY", // 买卖方向
"positionSide": "SHORT", // 持仓方向
"status": "NEW", // 订单状态
"stopPrice": "9300", // 触发价,对`TRAILING_STOP_MARKET`无效
"closePosition": false, // 是否条件全平仓
"symbol": "BTCUSDT", // 交易对
"time": 1579276756075, // 订单时间
"timeInForce": "GTC", // 有效方法
"type": "TRAILING_STOP_MARKET", // 订单类型
"activatePrice": "9020", // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
"priceRate": "0.3", // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
"updateTime": 1579276756075, // 更新时间
"workingType": "CONTRACT_PRICE", // 条件价格触发类型
"priceProtect": false // 是否开启条件单触发保护
}
GET /fapi/v3/order (HMAC SHA256)
查询订单状态
CANCELED
或者 EXPIRED
, 并且权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
orderId | LONG | NO | 系统订单号 |
origClientOrderId | STRING | NO | 用户自定义的订单号 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
注意:
orderId
与 origClientOrderId
中的一个响应:
{
"clientOrderId": "myOrder1", // 用户自定义的订单号
"cumQty": "0",
"cumQuote": "0", // 成交金额
"executedQty": "0", // 成交量
"orderId": 283194212, // 系统订单号
"origQty": "11", // 原始委托数量
"price": "0", // 委托价格
"reduceOnly": false, // 仅减仓
"side": "BUY", // 买卖方向
"positionSide": "SHORT", // 持仓方向
"status": "CANCELED", // 订单状态
"stopPrice": "9300", // 触发价,对`TRAILING_STOP_MARKET`无效
"closePosition": false, // 是否条件全平仓
"symbol": "BTCUSDT", // 交易对
"timeInForce": "GTC", // 有效方法
"origType": "TRAILING_STOP_MARKET", // 触发前订单类型
"type": "TRAILING_STOP_MARKET", // 订单类型
"activatePrice": "9020", // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
"priceRate": "0.3", // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
"updateTime": 1571110484038, // 更新时间
"workingType": "CONTRACT_PRICE", // 条件价格触发类型
"priceProtect": false // 是否开启条件单触发保护
}
DELETE /fapi/v3/order (HMAC SHA256)
权重: 1
Parameters:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
orderId | LONG | NO | 系统订单号 |
origClientOrderId | STRING | NO | 用户自定义的订单号 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
orderId
与 origClientOrderId
必须至少发送一个
响应:
{
"code": "200",
"msg": "The operation of cancel all open order is done."
}
DELETE /fapi/v3/allOpenOrders (HMAC SHA256)
权重: 1
Parameters:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
;[
{
clientOrderId: 'myOrder1', // 用户自定义的订单号
cumQty: '0',
cumQuote: '0', // 成交金额
executedQty: '0', // 成交量
orderId: 283194212, // 系统订单号
origQty: '11', // 原始委托数量
price: '0', // 委托价格
reduceOnly: false, // 仅减仓
side: 'BUY', // 买卖方向
positionSide: 'SHORT', // 持仓方向
status: 'CANCELED', // 订单状态
stopPrice: '9300', // 触发价,对`TRAILING_STOP_MARKET`无效
closePosition: false, // 是否条件全平仓
symbol: 'BTCUSDT', // 交易对
timeInForce: 'GTC', // 有效方法
origType: 'TRAILING_STOP_MARKET', // 触发前订单类型
type: 'TRAILING_STOP_MARKET', // 订单类型
activatePrice: '9020', // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
priceRate: '0.3', // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
updateTime: 1571110484038, // 更新时间
workingType: 'CONTRACT_PRICE', // 条件价格触发类型
priceProtect: false, // 是否开启条件单触发保护
},
{
code: -2011,
msg: 'Unknown order sent.',
},
]
DELETE /fapi/v3/batchOrders (HMAC SHA256)
权重: 1
Parameters:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
orderIdList | LIST<LONG> | NO | 系统订单号, 最多支持10个订单 比如 [1234567,2345678] |
origClientOrderIdList | LIST<STRING> | NO | 用户自定义的订单号, 最多支持10个订单 比如 ["my_id_1","my_id_2"] 需要encode双引号。逗号后面没有空格。 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
orderIdList
与 origClientOrderIdList
必须至少发送一个,不可同时发送
响应:
{
"symbol": "BTCUSDT",
"countdownTime": "100000"
}
POST /fapi/v3/countdownCancelAll (HMAC SHA256)
权重: 10
Parameters:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | |
countdownTime | LONG | YES | 倒计时。 1000 表示 1 秒; 0 表示取消倒计时撤单功能。 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
该接口可以被用于确保在倒计时结束时撤销指定symbol上的所有挂单。 在使用这个功能时,接口应像心跳一样在倒计时内被反复调用,以便可以取消既有的倒计时并开始新的倒数计时设置。
用法示例:
以30s的间隔重复此接口,每次倒计时countdownTime设置为120000(120s)。
如果在120秒内未再次调用此接口,则您指定symbol上的所有挂单都会被自动撤销。
如果在120秒内以将countdownTime设置为0,则倒数计时器将终止,自动撤单功能取消。
系统会大约每10毫秒检查一次所有倒计时情况,因此请注意,使用此功能时应考虑足够的冗余。
我们不建议将倒记时设置得太精确或太小。
响应:
{
"avgPrice": "0.00000", // 平均成交价
"clientOrderId": "abc", // 用户自定义的订单号
"cumQuote": "0", // 成交金额
"executedQty": "0", // 成交量
"orderId": 1917641, // 系统订单号
"origQty": "0.40", // 原始委托数量
"origType": "TRAILING_STOP_MARKET", // 触发前订单类型
"price": "0", // 委托价格
"reduceOnly": false, // 是否仅减仓
"side": "BUY", // 买卖方向
"status": "NEW", // 订单状态
"positionSide": "SHORT", // 持仓方向
"stopPrice": "9300", // 触发价,对`TRAILING_STOP_MARKET`无效
"closePosition": false, // 是否条件全平仓
"symbol": "BTCUSDT", // 交易对
"time": 1579276756075, // 订单时间
"timeInForce": "GTC", // 有效方法
"type": "TRAILING_STOP_MARKET", // 订单类型
"activatePrice": "9020", // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
"priceRate": "0.3", // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
"updateTime": 1579276756075, // 更新时间
"workingType": "CONTRACT_PRICE", // 条件价格触发类型
"priceProtect": false // 是否开启条件单触发保护
}
GET /fapi/v3/openOrder (HMAC SHA256)
请小心使用不带symbol参数的调用
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
orderId | LONG | NO | 系统订单号 |
origClientOrderId | STRING | NO | 用户自定义的订单号 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
orderId
与 origClientOrderId
中的一个为必填参数响应:
;[
{
avgPrice: '0.00000', // 平均成交价
clientOrderId: 'abc', // 用户自定义的订单号
cumQuote: '0', // 成交金额
executedQty: '0', // 成交量
orderId: 1917641, // 系统订单号
origQty: '0.40', // 原始委托数量
origType: 'TRAILING_STOP_MARKET', // 触发前订单类型
price: '0', // 委托价格
reduceOnly: false, // 是否仅减仓
side: 'BUY', // 买卖方向
positionSide: 'SHORT', // 持仓方向
status: 'NEW', // 订单状态
stopPrice: '9300', // 触发价,对`TRAILING_STOP_MARKET`无效
closePosition: false, // 是否条件全平仓
symbol: 'BTCUSDT', // 交易对
time: 1579276756075, // 订单时间
timeInForce: 'GTC', // 有效方法
type: 'TRAILING_STOP_MARKET', // 订单类型
activatePrice: '9020', // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
priceRate: '0.3', // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
updateTime: 1579276756075, // 更新时间
workingType: 'CONTRACT_PRICE', // 条件价格触发类型
priceProtect: false, // 是否开启条件单触发保护
},
]
GET /fapi/v3/openOrders (HMAC SHA256)
请小心使用不带symbol参数的调用
权重:
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | 交易对 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
;[
{
avgPrice: '0.00000', // 平均成交价
clientOrderId: 'abc', // 用户自定义的订单号
cumQuote: '0', // 成交金额
executedQty: '0', // 成交量
orderId: 1917641, // 系统订单号
origQty: '0.40', // 原始委托数量
origType: 'TRAILING_STOP_MARKET', // 触发前订单类型
price: '0', // 委托价格
reduceOnly: false, // 是否仅减仓
side: 'BUY', // 买卖方向
positionSide: 'SHORT', // 持仓方向
status: 'NEW', // 订单状态
stopPrice: '9300', // 触发价,对`TRAILING_STOP_MARKET`无效
closePosition: false, // 是否条件全平仓
symbol: 'BTCUSDT', // 交易对
time: 1579276756075, // 订单时间
timeInForce: 'GTC', // 有效方法
type: 'TRAILING_STOP_MARKET', // 订单类型
activatePrice: '9020', // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
priceRate: '0.3', // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
updateTime: 1579276756075, // 更新时间
workingType: 'CONTRACT_PRICE', // 条件价格触发类型
priceProtect: false, // 是否开启条件单触发保护
},
]
GET /fapi/v3/allOrders (HMAC SHA256)
CANCELED
或者 EXPIRED
, 并且权重: 5
Parameters:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
orderId | LONG | NO | 只返回此orderID及之后的订单,缺省返回最近的订单 |
startTime | LONG | NO | 起始时间 |
endTime | LONG | NO | 结束时间 |
limit | INT | NO | 返回的结果集数量 默认值:500 最大值:1000 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
[
{
"accountAlias": "SgsR", // 账户唯一识别码
"asset": "USDT", // 资产
"balance": "122607.35137903", // 总余额
"crossWalletBalance": "23.72469206", // 全仓余额
"crossUnPnl": "0.00000000" // 全仓持仓未实现盈亏
"availableBalance": "23.72469206", // 下单可用余额
"maxWithdrawAmount": "23.72469206", // 最大可转出余额
"marginAvailable": true, // 是否可用作联合保证金
"updateTime": 1617939110373
}
]
GET /fapi/v3/balance (HMAC SHA256)
Weight: 5
Parameters:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"feeTier": 0, // 手续费等级
"canTrade": true, // 是否可以交易
"canDeposit": true, // 是否可以入金
"canWithdraw": true, // 是否可以出金
"updateTime": 0,
"totalInitialMargin": "0.00000000", // 但前所需起始保证金总额(存在逐仓请忽略), 仅计算usdt资产
"totalMaintMargin": "0.00000000", // 维持保证金总额, 仅计算usdt资产
"totalWalletBalance": "23.72469206", // 账户总余额, 仅计算usdt资产
"totalUnrealizedProfit": "0.00000000", // 持仓未实现盈亏总额, 仅计算usdt资产
"totalMarginBalance": "23.72469206", // 保证金总余额, 仅计算usdt资产
"totalPositionInitialMargin": "0.00000000", // 持仓所需起始保证金(基于最新标记价格), 仅计算usdt资产
"totalOpenOrderInitialMargin": "0.00000000", // 当前挂单所需起始保证金(基于最新标记价格), 仅计算usdt资产
"totalCrossWalletBalance": "23.72469206", // 全仓账户余额, 仅计算usdt资产
"totalCrossUnPnl": "0.00000000", // 全仓持仓未实现盈亏总额, 仅计算usdt资产
"availableBalance": "23.72469206", // 可用余额, 仅计算usdt资产
"maxWithdrawAmount": "23.72469206" // 最大可转出余额, 仅计算usdt资产
"assets": [
{
"asset": "USDT", //资产
"walletBalance": "23.72469206", //余额
"unrealizedProfit": "0.00000000", // 未实现盈亏
"marginBalance": "23.72469206", // 保证金余额
"maintMargin": "0.00000000", // 维持保证金
"initialMargin": "0.00000000", // 当前所需起始保证金
"positionInitialMargin": "0.00000000", // 持仓所需起始保证金(基于最新标记价格)
"openOrderInitialMargin": "0.00000000", // 当前挂单所需起始保证金(基于最新标记价格)
"crossWalletBalance": "23.72469206", //全仓账户余额
"crossUnPnl": "0.00000000" // 全仓持仓未实现盈亏
"availableBalance": "23.72469206", // 可用余额
"maxWithdrawAmount": "23.72469206", // 最大可转出余额
"marginAvailable": true, // 是否可用作联合保证金
"updateTime": 1625474304765 //更新时间
},
{
"asset": "BUSD", //资产
"walletBalance": "103.12345678", //余额
"unrealizedProfit": "0.00000000", // 未实现盈亏
"marginBalance": "103.12345678", // 保证金余额
"maintMargin": "0.00000000", // 维持保证金
"initialMargin": "0.00000000", // 当前所需起始保证金
"positionInitialMargin": "0.00000000", // 持仓所需起始保证金(基于最新标记价格)
"openOrderInitialMargin": "0.00000000", // 当前挂单所需起始保证金(基于最新标记价格)
"crossWalletBalance": "103.12345678", //全仓账户余额
"crossUnPnl": "0.00000000" // 全仓持仓未实现盈亏
"availableBalance": "103.12345678", // 可用余额
"maxWithdrawAmount": "103.12345678", // 最大可转出余额
"marginAvailable": true, // 否可用作联合保证金
"updateTime": 0 // 更新时间
}
],
"positions": [ // 头寸,将返回所有市场symbol。
//根据用户持仓模式展示持仓方向,即单向模式下只返回BOTH持仓情况,双向模式下只返回 LONG 和 SHORT 持仓情况
{
"symbol": "BTCUSDT", // 交易对
"initialMargin": "0", // 当前所需起始保证金(基于最新标记价格)
"maintMargin": "0", //维持保证金
"unrealizedProfit": "0.00000000", // 持仓未实现盈亏
"positionInitialMargin": "0", // 持仓所需起始保证金(基于最新标记价格)
"openOrderInitialMargin": "0", // 当前挂单所需起始保证金(基于最新标记价格)
"leverage": "100", // 杠杆倍率
"isolated": true, // 是否是逐仓模式
"entryPrice": "0.00000", // 持仓成本价
"maxNotional": "250000", // 当前杠杆下用户可用的最大名义价值
"positionSide": "BOTH", // 持仓方向
"positionAmt": "0", // 持仓数量
"updateTime": 0 // 更新时间
}
]
}
GET /fapi/v3/account (HMAC SHA256)
权重: 5
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"leverage": 21, // 杠杆倍数
"maxNotionalValue": "1000000", // 当前杠杆倍数下允许的最大名义价值
"symbol": "BTCUSDT" // 交易对
}
POST /fapi/v3/leverage (HMAC SHA256)
调整用户在指定symbol合约的开仓杠杆。
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
leverage | INT | YES | 目标杠杆倍数:1 到 125 整数 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"code": 200,
"msg": "success"
}
POST /fapi/v3/marginType (HMAC SHA256)
变换用户在指定symbol合约上的保证金模式:逐仓或全仓。
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
marginType | ENUM | YES | 保证金模式 ISOLATED(逐仓), CROSSED(全仓) |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"amount": 100.0,
"code": 200,
"msg": "Successfully modify position margin.",
"type": 1
}
POST /fapi/v3/positionMargin (HMAC SHA256)
针对逐仓模式下的仓位,调整其逐仓保证金资金。
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
positionSide | ENUM | NO | 持仓方向,单向持仓模式下非必填,默认且仅可填BOTH ;在双向持仓模式下必填,且仅可选择 LONG 或 SHORT |
amount | DECIMAL | YES | 保证金资金 |
type | INT | YES | 调整方向 1: 增加逐仓保证金,2: 减少逐仓保证金 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
[
{
"amount": "23.36332311", // 数量
"asset": "USDT", // 资产
"symbol": "BTCUSDT", // 交易对
"time": 1578047897183, // 时间
"type": 1, // 调整方向
"positionSide": "BOTH" // 持仓方向
},
{
"amount": "100",
"asset": "USDT",
"symbol": "BTCUSDT",
"time": 1578047900425,
"type": 1,
"positionSide": "LONG"
}
]
GET /fapi/v3/positionMargin/history (HMAC SHA256)
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
type | INT | NO | 调整方向 1: 增加逐仓保证金,2: 减少逐仓保证金 |
startTime | LONG | NO | 起始时间 |
endTime | LONG | NO | 结束时间 |
limit | INT | NO | 返回的结果集数量 默认值: 500 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
单向持仓模式下:
;[
{
entryPrice: '0.00000', // 开仓均价
marginType: 'isolated', // 逐仓模式或全仓模式
isAutoAddMargin: 'false',
isolatedMargin: '0.00000000', // 逐仓保证金
leverage: '10', // 当前杠杆倍数
liquidationPrice: '0', // 参考强平价格
markPrice: '6679.50671178', // 当前标记价格
maxNotionalValue: '20000000', // 当前杠杆倍数允许的名义价值上限
positionAmt: '0.000', // 头寸数量,符号代表多空方向, 正数为多,负数为空
symbol: 'BTCUSDT', // 交易对
unRealizedProfit: '0.00000000', // 持仓未实现盈亏
positionSide: 'BOTH', // 持仓方向
updateTime: 1625474304765, // 更新时间
},
]
双向持仓模式下:
[
{
"entryPrice": "6563.66500", // 开仓均价
"marginType": "isolated", // 逐仓模式或全仓模式
"isAutoAddMargin": "false",
"isolatedMargin": "15517.54150468", // 逐仓保证金
"leverage": "10", // 当前杠杆倍数
"liquidationPrice": "5930.78", // 参考强平价格
"markPrice": "6679.50671178", // 当前标记价格
"maxNotionalValue": "20000000", // 当前杠杆倍数允许的名义价值上限
"positionAmt": "20.000", // 头寸数量,符号代表多空方向, 正数为多,负数为空
"symbol": "BTCUSDT", // 交易对
"unRealizedProfit": "2316.83423560" // 持仓未实现盈亏
"positionSide": "LONG", // 持仓方向
"updateTime": 1625474304765 // 更新时间
},
{
"entryPrice": "0.00000", // 开仓均价
"marginType": "isolated", // 逐仓模式或全仓模式
"isAutoAddMargin": "false",
"isolatedMargin": "5413.95799991", // 逐仓保证金
"leverage": "10", // 当前杠杆倍数
"liquidationPrice": "7189.95", // 参考强平价格
"markPrice": "6679.50671178", // 当前标记价格
"maxNotionalValue": "20000000", // 当前杠杆倍数允许的名义价值上限
"positionAmt": "-10.000", // 头寸数量,符号代表多空方向, 正数为多,负数为空
"symbol": "BTCUSDT", // 交易对
"unRealizedProfit": "-1156.46711780" // 持仓未实现盈亏
"positionSide": "SHORT", // 持仓方向
"updateTime": 1625474304765 //更新时间
}
]
GET /fapi/v3/positionRisk (HMAC SHA256)
权重: 5
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
注意
请与账户推送信息ACCOUNT_UPDATE
配合使用,以满足您的及时性和准确性需求。
响应:
;[
{
buyer: false, // 是否是买方
commission: '-0.07819010', // 手续费
commissionAsset: 'USDT', // 手续费计价单位
id: 698759, // 交易ID
maker: false, // 是否是挂单方
orderId: 25851813, // 订单编号
price: '7819.01', // 成交价
qty: '0.002', // 成交量
quoteQty: '15.63802', // 成交额
realizedPnl: '-0.91539999', // 实现盈亏
side: 'SELL', // 买卖方向
positionSide: 'SHORT', // 持仓方向
symbol: 'BTCUSDT', // 交易对
time: 1569514978020, // 时间
},
]
GET /fapi/v3/userTrades (HMAC SHA256)
获取某交易对的成交历史
权重: 5
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | 交易对 |
startTime | LONG | NO | 起始时间 |
endTime | LONG | NO | 结束时间 |
fromId | LONG | NO | 返回该fromId及之后的成交,缺省返回最近的成交 |
limit | INT | NO | 返回的结果集数量 默认值:500 最大值:1000. |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
startTime
和 endTime
均未发送, 只会返回最近7天的数据。响应:
;[
{
symbol: '', // 交易对,仅针对涉及交易对的资金流
incomeType: 'TRANSFER', // 资金流类型
income: '-0.37500000', // 资金流数量,正数代表流入,负数代表流出
asset: 'USDT', // 资产内容
info: 'TRANSFER', // 备注信息,取决于流水类型
time: 1570608000000, // 时间
tranId: '9689322392', // 划转ID
tradeId: '', // 引起流水产生的原始交易ID
},
{
symbol: 'BTCUSDT',
incomeType: 'COMMISSION',
income: '-0.01000000',
asset: 'USDT',
info: 'COMMISSION',
time: 1570636800000,
tranId: '9689322392',
tradeId: '2059192',
},
]
GET /fapi/v3/income (HMAC SHA256)
权重: 30
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | 交易对 |
incomeType | STRING | NO | 收益类型 "TRANSFER","WELCOME_BONUS", "REALIZED_PNL","FUNDING_FEE", "COMMISSION", "INSURANCE_CLEAR", and "MARKET_MERCHANT_RETURN_REWARD" |
startTime | LONG | NO | 起始时间 |
endTime | LONG | NO | 结束时间 |
limit | INT | NO | 返回的结果集数量 默认值:100 最大值:1000 |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
startTime
和 endTime
均未发送, 只会返回最近7天的数据。incomeType
没有发送,返回所有类型账户损益资金流水。响应:
;[
{
symbol: 'ETHUSDT',
brackets: [
{
bracket: 1, // 层级
initialLeverage: 75, // 该层允许的最高初始杠杆倍数
notionalCap: 10000, // 该层对应的名义价值上限
notionalFloor: 0, // 该层对应的名义价值下限
maintMarginRatio: 0.0065, // 该层对应的维持保证金率
cum: 0, // 速算数
},
],
},
]
或 (若发送symbol)
{
"symbol": "ETHUSDT",
"brackets": [
{
"bracket": 1,
"initialLeverage": 75,
"notionalCap": 10000,
"notionalFloor": 0,
"maintMarginRatio": 0.0065,
"cum":0
},
]
}
GET /fapi/v3/leverageBracket
权重: 1
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
;[
{
symbol: 'ETHUSDT',
adlQuantile: {
// 对于全仓状态下的双向持仓模式的交易对,会返回 "LONG", "SHORT" 和 "HEDGE", 其中"HEDGE"的存在仅作为标记;如果多空均有持仓的情况下,"LONG"和"SHORT"应返回共同计算后相同的队列分数。
LONG: 3,
SHORT: 3,
HEDGE: 0, // HEDGE 仅作为指示出现,请忽略数值
},
},
{
symbol: 'BTCUSDT',
adlQuantile: {
// 对于单向持仓模式或者是逐仓状态下的双向持仓模式的交易对,会返回 "LONG", "SHORT" 和 "BOTH" 分别表示不同持仓方向上持仓的adl队列分数
LONG: 1, // 双开模式下多头持仓的ADL队列估算分
SHORT: 2, // 双开模式下空头持仓的ADL队列估算分
BOTH: 0, // 单开模式下持仓的ADL队列估算分
},
},
]
GET /fapi/v3/adlQuantile
权重: 5
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
每30秒更新数据
队列分数0,1,2,3,4,分数越高说明在ADL队列中的位置越靠前
对于单向持仓模式或者是逐仓状态下的双向持仓模式的交易对,会返回 "LONG", "SHORT" 和 "BOTH" 分别表示不同持仓方向上持仓的adl队列分数
对于全仓状态下的双向持仓模式的交易对,会返回 "LONG", "SHORT" 和 "HEDGE", 其中"HEDGE"的存在仅作为标记;其中如果多空均有持仓的情况下,"LONG"和"SHORT"返回共同计算后相同的队列分数。
响应:
[
{
"orderId": 6071832819,
"symbol": "BTCUSDT",
"status": "FILLED",
"clientOrderId": "autoclose-1596107620040000020",
"price": "10871.09",
"avgPrice": "10913.21000",
"origQty": "0.001",
"executedQty": "0.001",
"cumQuote": "10.91321",
"timeInForce": "IOC",
"type": "LIMIT",
"reduceOnly": false,
"closePosition": false,
"side": "SELL",
"positionSide": "BOTH",
"stopPrice": "0",
"workingType": "CONTRACT_PRICE",
"origType": "LIMIT",
"time": 1596107620044,
"updateTime": 1596107620087
}
{
"orderId": 6072734303,
"symbol": "BTCUSDT",
"status": "FILLED",
"clientOrderId": "adl_autoclose",
"price": "11023.14",
"avgPrice": "10979.82000",
"origQty": "0.001",
"executedQty": "0.001",
"cumQuote": "10.97982",
"timeInForce": "GTC",
"type": "LIMIT",
"reduceOnly": false,
"closePosition": false,
"side": "BUY",
"positionSide": "SHORT",
"stopPrice": "0",
"workingType": "CONTRACT_PRICE",
"origType": "LIMIT",
"time": 1596110725059,
"updateTime": 1596110725071
}
]
GET /fapi/v3/forceOrders
权重: 带symbol 20, 不带symbol 50
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | NO | |
autoCloseType | ENUM | NO | "LIQUIDATION": 强平单, "ADL": ADL减仓单. |
startTime | LONG | NO | |
endTime | LONG | NO | |
limit | INT | NO | Default 50; max 100. |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
响应:
{
"symbol": "BTCUSDT",
"makerCommissionRate": "0.0002", // 0.02%
"takerCommissionRate": "0.0004" // 0.04%
}
GET /fapi/v3/commissionRate (HMAC SHA256)
权重: 20
参数:
名称 | 类型 | 是否必需 | 描述 |
---|---|---|---|
symbol | STRING | YES | |
recvWindow | LONG | NO | |
timestamp | LONG | YES |
listenKey
从创建时刻起有效期为60分钟PUT
一个listenKey
延长60分钟有效期DELETE
一个 listenKey
立即关闭当前数据流,并使该listenKey
无效listenKey
的帐户上执行POST
将返回当前有效的listenKey
并将其有效期延长60分钟
> 对应实现:src/exchanges/aster/asterAdapter.ts
的 ensureListenKey()
会在 init 时复用已有 listenKey(含 ENV)、执行 keepAlive 或重新创建。响应:
{
"listenKey": "pqia91ma19a5s61cv6a81va65sdf19v8a65a1a5s61cv6a81va65sdf19v8a65a1"
}
POST /fapi/v3/listenKey
创建一个新的user data stream,返回值为一个listenKey,即websocket订阅的stream名称。如果该帐户具有有效的listenKey
,则将返回该listenKey
并将其有效期延长60分钟。
权重: 1
参数:
None
响应:
{
}
PUT /fapi/v3/listenKey
有效期延长至本次调用后60分钟
权重: 1
参数:
None
响应:
{
}
DELETE /fapi/v3/listenKey
关闭某账户数据流
权重: 1
参数:
None
Payload:
{
'e': 'listenKeyExpired', // 事件类型
'E': 1576653824250 // 事件时间
}
当前连接使用的有效listenKey过期时,user data stream 将会推送此事件。
注意:
listenKey
过期时才会收到此消息listenKey
Payload:
{
"e":"MARGIN_CALL", // 事件类型
"E":1587727187525, // 事件时间
"cw":"3.16812045", // 除去逐仓仓位保证金的钱包余额, 仅在全仓 margin call 情况下推送此字段
"p":[ // 涉及持仓
{
"s":"ETHUSDT", // symbol
"ps":"LONG", // 持仓方向
"pa":"1.327", // 仓位
"mt":"CROSSED", // 保证金模式
"iw":"0", // 若为逐仓,仓位保证金
"mp":"187.17127", // 标记价格
"up":"-1.166074", // 未实现盈亏
"mm":"1.614445" // 持仓需要的维持保证金
}
]
}
Payload:
{
"e": "ACCOUNT_UPDATE", // 事件类型
"E": 1564745798939, // 事件时间
"T": 1564745798938 , // 撮合时间
"a": // 账户更新事件
{
"m":"ORDER", // 事件推出原因
"B":[ // 余额信息
{
"a":"USDT", // 资产名称
"wb":"122624.12345678", // 钱包余额
"cw":"100.12345678", // 除去逐仓仓位保证金的钱包余额
"bc":"50.12345678" // 除去盈亏与交易手续费以外的钱包余额改变量
},
{
"a":"BUSD",
"wb":"1.00000000",
"cw":"0.00000000",
"bc":"-49.12345678"
}
],
"P":[
{
"s":"BTCUSDT", // 交易对
"pa":"0", // 仓位
"ep":"0.00000", // 入仓价格
"cr":"200", // (费前)累计实现损益
"up":"0", // 持仓未实现盈亏
"mt":"isolated", // 保证金模式
"iw":"0.00000000", // 若为逐仓,仓位保证金
"ps":"BOTH" // 持仓方向
},
{
"s":"BTCUSDT",
"pa":"20",
"ep":"6563.66500",
"cr":"0",
"up":"2850.21200",
"mt":"isolated",
"iw":"13200.70726908",
"ps":"LONG"
},
{
"s":"BTCUSDT",
"pa":"-10",
"ep":"6563.86000",
"cr":"-45.04000000",
"up":"-1423.15600",
"mt":"isolated",
"iw":"6570.42511771",
"ps":"SHORT"
}
]
}
}
账户更新事件的 event type 固定为 ACCOUNT_UPDATE
当账户信息有变动时,会推送此事件:
"FUNDING FEE" 引起的资金余额变化,仅推送简略事件:
ACCOUNT_UPDATE
将只会推送相关的用户资产余额信息B
(仅推送FUNDING FEE 发生相关的资产余额信息),而不会推送任何持仓信息P
。ACCOUNT_UPDATE
将只会推送相关的用户资产余额信息B
(仅推送"FUNDING FEE"所使用的资产余额信息),和相关的持仓信息P
(仅推送这笔"FUNDING FEE"发生所在的持仓信息),其余持仓信息不会被推送。字段"m"代表了事件推出的原因,包含了以下可能类型:
字段"bc"代表了钱包余额的改变量,即 balance change,但注意其不包含仓位盈亏及交易手续费。
Payload:
{
"e":"ORDER_TRADE_UPDATE", // 事件类型
"E":1568879465651, // 事件时间
"T":1568879465650, // 撮合时间
"o":{
"s":"BTCUSDT", // 交易对
"c":"TEST", // 客户端自定订单ID
// 特殊的自定义订单ID:
// "autoclose-"开头的字符串: 系统强平订单
// "adl_autoclose": ADL自动减仓订单
"S":"SELL", // 订单方向
"o":"TRAILING_STOP_MARKET", // 订单类型
"f":"GTC", // 有效方式
"q":"0.001", // 订单原始数量
"p":"0", // 订单原始价格
"ap":"0", // 订单平均价格
"sp":"7103.04", // 条件订单触发价格,对追踪止损单无效
"x":"NEW", // 本次事件的具体执行类型
"X":"NEW", // 订单的当前状态
"i":8886774, // 订单ID
"l":"0", // 订单末次成交量
"z":"0", // 订单累计已成交量
"L":"0", // 订单末次成交价格
"N": "USDT", // 手续费资产类型
"n": "0", // 手续费数量
"T":1568879465651, // 成交时间
"t":0, // 成交ID
"b":"0", // 买单净值
"a":"9.91", // 卖单净值
"m": false, // 该成交是作为挂单成交吗?
"R":false , // 是否是只减仓单
"wt": "CONTRACT_PRICE", // 触发价类型
"ot": "TRAILING_STOP_MARKET", // 原始订单类型
"ps":"LONG" // 持仓方向
"cp":false, // 是否为触发平仓单; 仅在条件订单情况下会推送此字段
"AP":"7476.89", // 追踪止损激活价格, 仅在追踪止损单时会推送此字段
"cr":"5.0", // 追踪止损回调比例, 仅在追踪止损单时会推送此字段
"rp":"0" // 该交易实现盈亏
}
}
当有新订单创建、订单有新成交或者新的状态变化时会推送此类事件
事件类型统一为 ORDER_TRADE_UPDATE
订单方向
订单类型
本次事件的具体执行类型
订单状态
有效方式:
Payload:
{
"e":"ACCOUNT_CONFIG_UPDATE", // 事件类型
"E":1611646737479, // 事件时间
"T":1611646737476, // 撮合时间
"ac":{
"s":"BTCUSDT", // 交易对
"l":25 // 杠杆倍数
}
}
Or
{
"e":"ACCOUNT_CONFIG_UPDATE", // 事件类型
"E":1611646737479, // 事件时间
"T":1611646737476, // 撮合时间
"ai":{ // 用户账户配置
"j":true // 联合保证金状态
}
}
当账户配置发生变化时会推送此类事件类型统一为ACCOUNT_CONFIG_UPDATE
当交易对杠杆倍数发生变化时推送消息体会包含对象ac
表示交易对账户配置,其中s
代表具体的交易对,l
代表杠杆倍数
当用户联合保证金状态发生变化时推送消息体会包含对象ai
表示用户账户配置,其中j
代表用户联合保证金状态
error JSON payload:
{
"code":-1121,
"msg":"Invalid symbol."
}
错误由两部分组成:错误代码和消息。 代码是通用的,但是消息可能会有所不同。
-1000 UNKNOWN
-1001 DISCONNECTED
-1002 UNAUTHORIZED
-1003 TOO_MANY_REQUESTS
-1004 DUPLICATE_IP
-1005 NO_SUCH_IP
-1006 UNEXPECTED_RESP
-1007 TIMEOUT
-1014 UNKNOWN_ORDER_COMPOSITION
-1015 TOO_MANY_ORDERS
-1016 SERVICE_SHUTTING_DOWN
-1020 UNSUPPORTED_OPERATION
-1021 INVALID_TIMESTAMP
-1022 INVALID_SIGNATURE
-1023 START_TIME_GREATER_THAN_END_TIME
-1100 ILLEGAL_CHARS
%s
中发现非法字符; 合法范围是%s
。-1101 TOO_MANY_PARAMETERS
%s
并收到了%s
。-1102 MANDATORY_PARAM_EMPTY_OR_MALFORMED
%s
未发送,为空/空或格式错误。%s
或%s
,但两者均为空!-1103 UNKNOWN_PARAM
-1104 UNREAD_PARAMETERS
%s
参数,但被发送了%s
。-1105 PARAM_EMPTY
%s
为空。-1106 PARAM_NOT_REQUIRED
%s
。-1111 BAD_PRECISION
-1112 NO_DEPTH
-1114 TIF_NOT_REQUIRED
TimeInForce
参数不需要。-1115 INVALID_TIF
timeInForce
-1116 INVALID_ORDER_TYPE
-1117 INVALID_SIDE
-1118 EMPTY_NEW_CL_ORD_ID
-1119 EMPTY_ORG_CL_ORD_ID
-1120 BAD_INTERVAL
-1121 BAD_SYMBOL
-1125 INVALID_LISTEN_KEY
listenKey
不存在。-1127 MORE_THAN_XX_HOURS
%s
小时。-1128 OPTIONAL_PARAMS_BAD_COMBO
-1130 INVALID_PARAMETER
%s
的数据无效。-1136 INVALID_NEW_ORDER_RESP_TYPE
-2010 NEW_ORDER_REJECTED
-2011 CANCEL_REJECTED
-2013 NO_SUCH_ORDER
-2014 BAD_API_KEY_FMT
-2015 REJECTED_MBX_KEY
-2016 NO_TRADING_WINDOW
-2018 BALANCE_NOT_SUFFICIENT
-2019 MARGIN_NOT_SUFFICIEN
-2020 UNABLE_TO_FILL
-2021 ORDER_WOULD_IMMEDIATELY_TRIGGER
-2022 REDUCE_ONLY_REJECT
ReduceOnly
订单被拒绝-2023 USER_IN_LIQUIDATION
-2024 POSITION_NOT_SUFFICIENT
-2025 MAX_OPEN_ORDER_EXCEEDED
-2026 REDUCE_ONLY_ORDER_TYPE_NOT_SUPPORTED
reduceOnly
-2027 MAX_LEVERAGE_RATIO
-2028 MIN_LEVERAGE_RATIO
-4000 INVALID_ORDER_STATUS
-4001 PRICE_LESS_THAN_ZERO
-4002 PRICE_GREATER_THAN_MAX_PRICE
-4003 QTY_LESS_THAN_ZERO
-4004 QTY_LESS_THAN_MIN_QTY
-4005 QTY_GREATER_THAN_MAX_QTY
-4006 STOP_PRICE_LESS_THAN_ZERO
-4007 STOP_PRICE_GREATER_THAN_MAX_PRICE
-4008 TICK_SIZE_LESS_THAN_ZERO
-4009 MAX_PRICE_LESS_THAN_MIN_PRICE
-4010 MAX_QTY_LESS_THAN_MIN_QTY
-4011 STEP_SIZE_LESS_THAN_ZERO
-4012 MAX_NUM_ORDERS_LESS_THAN_ZERO
-4013 PRICE_LESS_THAN_MIN_PRICE
-4014 PRICE_NOT_INCREASED_BY_TICK_SIZE
-4015 INVALID_CL_ORD_ID_LEN
-4016 PRICE_HIGHTER_THAN_MULTIPLIER_UP
-4017 MULTIPLIER_UP_LESS_THAN_ZERO
-4018 MULTIPLIER_DOWN_LESS_THAN_ZERO
-4019 COMPOSITE_SCALE_OVERFLOW
-4020 TARGET_STRATEGY_INVALID
%s
订单状态, 只减仓%b
。-4021 INVALID_DEPTH_LIMIT
limit
值不正确。%s
不是合理的深度信息的limit
值。-4022 WRONG_MARKET_STATUS
-4023 QTY_NOT_INCREASED_BY_STEP_SIZE
-4024 PRICE_LOWER_THAN_MULTIPLIER_DOWN
-4025 MULTIPLIER_DECIMAL_LESS_THAN_ZERO
-4026 COMMISSION_INVALID
%s
less than zero.%s
少于0%s
absolute value greater than %s
%s
绝对值大于%s
-4027 INVALID_ACCOUNT_TYPE
-4028 INVALID_LEVERAGE
%s
is not valid%s
不正确%s
already exist with %s
%s
已经存在于%s
-4029 INVALID_TICK_SIZE_PRECISION
-4030 INVALID_STEP_SIZE_PRECISION
-4031 INVALID_WORKING_TYPE
%s
%s
-4032 EXCEED_MAX_CANCEL_ORDER_SIZE
%s
%s
-4033 INSURANCE_ACCOUNT_NOT_FOUND
-4044 INVALID_BALANCE_TYPE
-4045 MAX_STOP_ORDER_EXCEEDED
-4046 NO_NEED_TO_CHANGE_MARGIN_TYPE
-4047 THERE_EXISTS_OPEN_ORDERS
-4048 THERE_EXISTS_QUANTITY
-4049 ADD_ISOLATED_MARGIN_REJECT
-4050 CROSS_BALANCE_INSUFFICIENT
-4051 ISOLATED_BALANCE_INSUFFICIENT
-4052 NO_NEED_TO_CHANGE_AUTO_ADD_MARGIN
-4053 AUTO_ADD_CROSSED_MARGIN_REJECT
-4054 ADD_ISOLATED_MARGIN_NO_POSITION_REJECT
-4055 AMOUNT_MUST_BE_POSITIVE
-4056 INVALID_API_KEY_TYPE
-4057 INVALID_RSA_PUBLIC_KEY
-4058 MAX_PRICE_TOO_LARGE
-4059 NO_NEED_TO_CHANGE_POSITION_SIDE
-4060 INVALID_POSITION_SIDE
-4061 POSITION_SIDE_NOT_MATCH
-4062 REDUCE_ONLY_CONFLICT
-4063 INVALID_OPTIONS_REQUEST_TYPE
-4064 INVALID_OPTIONS_TIME_FRAME
-4065 INVALID_OPTIONS_AMOUNT
-4066 INVALID_OPTIONS_EVENT_TYPE
-4067 POSITION_SIDE_CHANGE_EXISTS_OPEN_ORDERS
-4068 POSITION_SIDE_CHANGE_EXISTS_QUANTITY
-4069 INVALID_OPTIONS_PREMIUM_FEE
-4070 INVALID_CL_OPTIONS_ID_LEN
-4071 INVALID_OPTIONS_DIRECTION
-4072 OPTIONS_PREMIUM_NOT_UPDATE
-4073 OPTIONS_PREMIUM_INPUT_LESS_THAN_ZERO
-4074 OPTIONS_AMOUNT_BIGGER_THAN_UPPER
-4075 OPTIONS_PREMIUM_OUTPUT_ZERO
-4076 OPTIONS_PREMIUM_TOO_DIFF
-4077 OPTIONS_PREMIUM_REACH_LIMIT
-4078 OPTIONS_COMMON_ERROR
-4079 INVALID_OPTIONS_ID
-4080 OPTIONS_USER_NOT_FOUND
-4081 OPTIONS_NOT_FOUND
-4082 INVALID_BATCH_PLACE_ORDER_SIZE
-4083 PLACE_BATCH_ORDERS_FAIL
-4084 UPCOMING_METHOD
-4085 INVALID_NOTIONAL_LIMIT_COEF
-4086 INVALID_PRICE_SPREAD_THRESHOLD
-4087 REDUCE_ONLY_ORDER_PERMISSION
-4088 NO_PLACE_ORDER_PERMISSION
-4104 INVALID_CONTRACT_TYPE
-4114 INVALID_CLIENT_TRAN_ID_LEN
-4115 DUPLICATED_CLIENT_TRAN_ID
-4118 REDUCE_ONLY_MARGIN_CHECK_FAILED
-4131 MARKET_ORDER_REJECT
-4135 INVALID_ACTIVATION_PRICE
-4137 QUANTITY_EXISTS_WITH_CLOSE_POSITION
-4138 REDUCE_ONLY_MUST_BE_TRUE
-4139 ORDER_TYPE_CANNOT_BE_MKT
-4140 INVALID_OPENING_POSITION_STATUS
-4141 SYMBOL_ALREADY_CLOSED
-4142 STRATEGY_INVALID_TRIGGER_PRICE
-4144 INVALID_PAIR
-4161 ISOLATED_LEVERAGE_REJECT_WITH_POSITION
-4164 MIN_NOTIONAL
%s
,除了使用reduce only-4165 INVALID_TIME_INTERVAL
%s
天-4183 PRICE_HIGHTER_THAN_STOP_MULTIPLIER_UP
%s
-4184 PRICE_LOWER_THAN_STOP_MULTIPLIER_DOWN
%s