跳到主要内容

FIX API

注意: 此 API 只能用于现货 (SPOT) 交易所。

基本信息

FIX API 订单接入会话

  • 端点为:tcp+tls://fix-oe.binance.com:9000
  • 支持下单,取消订单和查询当前限制使用情况。
  • 支持接收账户的所有 ExecutionReport<8>List Status<N>
  • 仅允许带有 FIX_API 的 API Key 连接。

FIX API Drop Copy 会话

  • 端点为:tcp+tls://fix-dc.binance.com:9000
  • 支持接收账户的所有 ExecutionReport<8>List Status<N>
  • 仅允许连接带有 FIX_APIFIX_API_READ_ONLY 的 API Key。

关于 QuickFix 模式 (Schema) 文件, 请点击 这里

FIX 连接需要 TLS 加密。请使用本地 TCP+TLS 连接或设置本地代理如 stunnel 来处理 TLS 加密。

API Key 权限

如果您需要使用 FIX API 的订单接入会话,您的 API key 必须配置 FIX_API 权限。 如果您需要使用 FIX API 的 Drop Copy 会话,您的 API key 必须配置 FIX_API_READ_ONLYFIX_API 权限。

FIX API 订单接入和 FIX API Drop Copy 会话仅支持 Ed25519 密钥。

关于如何设置 Ed25519 密钥对,请参考 本教程

关于消息处理顺序

初始消息 Logon<A> 中必需的 MessageHandling (25035) 字段被用于控制:是否在消息被撮合引擎处理前,需要重新排序消息。

  • UNORDERED(1) 允许不按顺序将来自客户端的消息发送到撮合引擎。
  • SEQUENTIAL(2) 来自客户端的消息始终以 MsgSeqNum(34) 中定义的顺序发送到撮合引擎。

[!TIP] 在有多个消息需要从客户端传输到服务器的情况时, UNORDERED(1) 应该会提供更好的性能。

响应模式

FIX API 允许单个账户的多个并发会话(参见 连接限制)。 默认情况下,所有会话将接收该账户的所有成功 ExecutionReport<8>ListStatus<N> 消息。这被称为 ExecutionReport 推送。

用户可以在初始消息 Logon<A> 中使用 ResponseMode (25036) 字段来改变这种行为。

  • EVERYTHING(1): 默认模式。
  • ONLY_ACKS(2): 无论操作成功还是失败,都只接收 ACK 消息。禁用 ExecutionReport 推送。

如何签署 Logon<A> 请求

Logon<A> 消息用于验证您与 FIX API 的连接。 这条消息必须是客户端发送的第一条消息。

  • Username (553) 字段必须包含 API key。
  • RawData (96) 字段必须包含使用 API key 生成的有效签名。

签名 payload 是一个文本字符串。该字符串通过按以下所列顺序去连接下列字段来构成, 并且以 SOH 字符作为分隔符:

  1. MsgType (35)
  2. SenderCompId (49)
  3. TargetCompId (56)
  4. MsgSeqNum (34)
  5. SendingTime (52)

请使用您的密钥签署 payload。请使用 base64 对签名进行编码。 生成的文本字符串是 RawData (96) 字段的值。

以下是实现签名算法的 Python 代码示例:

import base64

from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
from cryptography.hazmat.primitives.serialization import load_pem_private_key

def logon_raw_data(private_key: Ed25519PrivateKey,
sender_comp_id: str,
target_comp_id: str,
msg_seq_num: str,
sending_time: str):
"""
Computes the value of RawData (96) field in Logon<A> message.
"""
payload = chr(1).join([
'A',
sender_comp_id,
target_comp_id,
msg_seq_num,
sending_time,
])
signature = private_key.sign(payload.encode('ASCII'))
return base64.b64encode(signature).decode('ASCII')


with open('private_key.pem', 'rb') as f:
private_key = load_pem_private_key(data=f.read(),
password=None)

raw_data = logon_raw_data(private_key,
sender_comp_id='5JQmUOsm',
target_comp_id='SPOT',
msg_seq_num='1',
sending_time='20240612-08:52:21.613')

以下值可用于验证签名计算实现的正确性:

字段取值
MsgType (35)A
SenderCompID (49)EXAMPLE
TargetCompID (56)SPOT
MsgSeqNum (34)1
SendingTime (52)20240627-11:17:25.223

示例计算中使用的 Ed25519 密钥如下所示:

[!CAUTION] 以下密钥仅用于示范说明目的。请务必不要在任何实际应用中使用该密钥,因为它不安全,可能会危及您的加密实现。请在实际使用中生成属于您自己的唯一且安全的密钥。

-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIIJEYWtGBrhACmb9Dvy+qa8WEf0lQOl1s4CLIAB9m89u
-----END PRIVATE KEY-----

经过计算生成的签名:

4MHXelVVcpkdwuLbl6n73HQUXUf1dse2PCgT1DYqW9w8AVZ1RACFGM+5UdlGPrQHrgtS3CvsRURC1oj73j8gCA==

生成的 Logon <A> 消息:

8=FIX.4.4|9=247|35=A|34=1|49=EXAMPLE|52=20240627-11:17:25.223|56=SPOT|95=88|96=4MHXelVVcpkdwuLbl6n73HQUXUf1dse2PCgT1DYqW9w8AVZ1RACFGM+5UdlGPrQHrgtS3CvsRURC1oj73j8gCA==|98=0|108=30|141=Y|553=sBRXrJx2DsOraMXOaUovEhgVRcjOvCtQwnWj8VxkOh1xqboS02SPGfKi2h8spZJb|25035=2|10=227|

限制

消息限制

  • 每个连接都有一个关于 可以发送到交易所的消息数量 的限制。
  • 消息限制 不计算从接口发回到客户端的响应消息数量
  • 违反消息限制会立即导致 Logout <5> 并断开连接。
  • 要了解当前的限制和使用情况,请发送 LimitQuery<XLQ> 消息。 接口将发送 LimitResponse<XLR> 消息作为响应,其中包含了有关订单速率限制和消息限制的信息。

未成交订单计数

  • 要了解您在特定时间间隔内下了多少订单,请发送 LimitQuery<XLQ> 消息。 系统将发送一条 LimitResponse<XLR> 消息作为响应,其中会包含有关未成交订单计数和消息限制的信息。
  • 请注意,如果您的订单一直顺利完成交易,您可以在 API 持续下订单。更多信息,请参见现货未成交订单计数规则
  • 如果您超过了未成交的订单计数限制,您的消息将被拒绝,并且信息将用该接口的拒绝消息格式传回给您。
  • 未成交订单数量是按照每个账户来统计的

连接限制

  • 每个账户都有一个关于 可以同时建立的 TCP 连接数量 的限制。
  • 当 TCP 连接关闭时,限制值会减少。如果限制值没有立即减少,请等待最长不超过2倍于在 HeartBtInt (108) 内所定义的时间。 比如说,如果 HeartBtInt 的值为5, 那么请等待10秒钟。
  • 违反限制时, Reject <3> 消息会被发送给用户。该消息包含了有关违反连接限制和当前限制的信息。
  • 对于订单接入会话,其限制为每个账户 5 个并发 TCP 连接。
  • 对于 Drop Copy 会话,其限制为每个账户 10 个并发 TCP 连接。

错误处理

包含句法错误,缺少必填字段,或引用未知交易对的客户端消息将被服务器拒绝,并返回 Reject <3> 消息。

如果有效消息无法被处理并被拒绝,服务器将发送相应的拒绝响应。 请参阅各个消息的相关文档以了解可能会发生的响应。

请参阅响应中的 Text (58)ErrorCode (25016) 字段以了解拒绝原因。

错误代码列表可以在 错误代码 页面找到。

类型

仅支持可打印的 ASCII 字符和 SOH。

类型描述
BOOLEANEnum:YN.
CHAR单个字符。
INT有符号的 64 位整数。
LENGTH无符号的 64 位整数。
NUMINGROUP无符号的 64 位整数。
PRICE定点数。精度取决于 symbol 定义。
QTY定点数。精度取决于 symbol 定义。
SEQNUM无符号的 64 位整数。
STRING可打印的 ASCII 字符串。
UTCTIMESTAMP表示 UTC 日期时间的字符串。

支持的 UTCTIMESTAMP 格式:

  • 20011217-09:30:47 - 秒
  • 20011217-09:30:47.123 - 毫秒
  • 20011217-09:30:47.123456 - 微秒(用于来自交易所的消息)

客户端订单 ID 字段必须符合正则表达式 ^[a-zA-Z0-9-_]{1,36}$

  • ClOrdID (11)
  • OrigClOrdID (41)
  • ClListID (25014)
  • OrigClListID (25015)
  • CancelClOrdID (25034)

消息组件

在示例消息中, | 字符用于表示 SOH 字符:

8=FIX.4.4|9=113|35=A|34=1|49=SPOT|52=20240612-08:52:21.636837|56=5JQmUOsm|98=0|108=30|25037=4392a152-3481-4499-921a-6d42c50702e2|10=051|

出现在每条消息的开头。

Tag名称类型是否必须描述
8BeginStringSTRINGY始终为 FIX.4.4

必须是消息的第一个字段。
9BodyLengthLENGTHY消息长度(以字节为单位)。

必须是消息的第二个字段。
35MsgTypeSTRINGY必须是消息的第三个字段。

可能的值:

0 - HEARTBEAT

1 - TEST_REQUEST

3 - REJECT

5 - LOGOUT

8 - EXECUTION_REPORT

9 - ORDER_CANCEL_REJECT

A - LOGON

D - NEW_ORDER_SINGLE

E - NEW_ORDER_LIST

F - ORDER_CANCEL_REQUEST

N - LIST_STATUS

q - ORDER_MASS_CANCEL_REQUEST

r - ORDER_MASS_CANCEL_REPORT

XCN - ORDER_CANCEL_REQUEST_AND_NEW_ORDER_SINGLE

XLQ - LIMIT_QUERY

XLR - LIMIT_RESPONSE

B - NEWS
49SenderCompIDSTRINGY在账户的活动会话中必须是独特的。

必须使用正则表达式:^[a-zA-Z0-9-_]{1,8}$
56TargetCompIDSTRINGY在客户端的消息中必须设置为SPOT
34MsgSeqNumSEQNUMY整数消息序列号。

会导致间隙的值将被拒绝。
52SendingTimeUTCTIMESTAMPY消息传输时间(始终以 UTC 表示)。
25000RecvWindowINTNSendingTime (52) 后,用于标识请求有效时间的毫秒数。

Logon<A> 中默认为 5000 毫秒,最大值为 60000 毫秒。

Trailer

出现在每条消息的末尾。

Tag名称类型是否必须描述
10CheckSumSTRINGY始终为3个字符的数字字符串。其取值是通过对消息中每个前导字符的 ASCII 值进行求和计算得出的,其中包括 start-of-header(SOH)。

结果总和除以 256,余数形成 CheckSum 值。

为保持固定长度,CheckSum 字段采用右对齐并按需要进行零填充。

Administrative Messages

Heartbeat <0>

如果在心跳间隔(Logon<A> 中的 HeartBtInt (108))的期间没有传出流量,则由服务器发送。

由客户端发送则用于指示会话正常。

由客户端或服务器发送,用于给予 TestRequest<1> 消息有关响应。

Tag名称类型是否必须描述
112TestReqIDSTRINGN当 Heartbeat<35> 作为对 TestRequest<1> 的响应发送时,必须镜像 TestRequest<1> 中的值。

TestRequest <1>

如果在心跳间隔(Logon<A> 中的 HeartBtInt (108))的期间没有传入流量,则由服务器发送。

由客户端发送用于请求 Heartbeat<0> 响应。

注意: 如果客户端未能在超时范围内发送带有正确 TestReqID (112) 的 Heartbeat<0> 来响应 TestRequest<1> ,其连接将被断开。

Tag名称类型必填描述
112TestReqIDSTRINGY任意字符串,必须包含在 Heartbeat<0> 响应中。

Reject <3>

由服务器发送,用以响应无法处理的无效消息。

如果无法接受新连接,则由服务器发送。 请参阅 Connection Limits

请参阅 Text (58)ErrorCode (25016) 字段以了解拒绝原因。

Tag名称类型必填描述
45RefSeqNumINTN导致此 Reject<3> 发送的被拒绝消息的 MsgSeqNum (34)
371RefTagIDINTN如果存在,标识直接导致此 Reject<3> 消息发送的字段。
372RefMsgTypeSTRINGN导致此 Reject<3> 发送的被拒绝消息的 MsgType (35)
373SessionRejectReasonINTN拒绝的原因,可以是以下值之一。

通常伴随附加的文字描述

可能的值:

0- INVALID_TAG_NUMBER

1 - REQUIRED_TAG_MISSING

2 - TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE

3 - UNDEFINED_TAG

5 - VALUE_IS_INCORRECT

6 - INCORRECT_DATA_FORMAT_FOR_VALUE

8 - SIGNATURE_PROBLEM

10 - SENDINGTIME_ACCURACY_PROBLEM

12 - XML_VALIDATION_ERROR

13 - TAG_APPEARS_MORE_THAN_ONCE

14 - TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER

15 - REPEATING_GROUP_FIELDS_OUT_OF_ORDER

16 - INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP

99 - OTHER
25016ErrorCodeINTNAPI 错误代码(参见 错误代码)。
58TextSTRINGN人类可读的错误信息。

Logon<A>

由客户端发送,用以验证连接。 Logon<A> 必须是客户端发送的第一条消息。

由服务器发送,用以响应成功的登录。

注意: Logon<A> 在整个会话期间只能发送一次。

Logon Request

Tag名称类型是否必须描述
98EncryptMethodINTY必须为 0
108HeartBtIntINTY必须在 [5, 60] 范围内。Heartbeat 间隔(秒)。
95RawDataLengthLENGTHY紧随此字段之后的 RawData (96) 字段的长度。
96RawDataDATAY签名。 如何签署 Logon<A> 请求
141ResetSeqNumFlagBOOLEANY必须为 Y
553UsernameSTRINGYAPI key。仅支持 Ed25519 API keys。
25035MessageHandlingINTY可能的值:

1 - UNORDERED

2 - SEQUENTIAL

请参阅 关于消息处理顺序 了解更多信息。
25036ResponseModeINTN请参阅 响应模式
9406DropCopyFlagBOOLEANN登录到 Drop Copy 会话时,必须设置为"Y"。

示例消息:

8=FIX.4.4|9=248|35=A|34=1|49=5JQmUOsm|52=20240612-08:52:21.613|56=SPOT|95=88|96=KhJLbZqADWknfTAcp0ZjyNz36Kxa4ffvpNf9nTIc+K5l35h+vA1vzDRvLAEQckyl6VDOwJ53NOBnmmRYxQvQBQ==|98=0|108=30|141=Y|553=W5rcOD30c0gT4jHK8oX5d5NbzWoa0k4SFVoTHIFNJVZ3NuRpYb6ZyJznj8THyx5d|25035=1|10=000|

Logon Response

Tag名称类型是否必须描述
98EncryptMethodINTY始终为 0
108HeartBtIntINTY镜像 Logon 请求中的值。
25037UUIDSTRINGY提供请求服务的 FIX API 的 UUID。

示例消息:

8=FIX.4.4|9=113|35=A|34=1|49=SPOT|52=20240612-08:52:21.636837|56=5JQmUOsm|98=0|108=30|25037=4392a152-3481-4499-921a-6d42c50702e2|10=051|

Logout <5>

发送此消息以启动关闭连接的过程,并对 Logout 进行响应。

Tag名称类型是否必须描述
58TextSTRINGN

示例消息:

Logout 请求

8=FIX.4.4|9=55|35=5|34=3|49=GhQHzrLR|52=20240611-09:44:25.543|56=SPOT|10=249|

Logout 响应

8=FIX.4.4|9=84|35=5|34=4|49=SPOT|52=20240611-09:44:25.544001|56=GhQHzrLR|58=Logout acknowledgment.|10=212|

News <B>

当连接即将关闭时,由服务器发送。

Tag名称类型是否必须描述
148HeadlineSTRINGY

示例消息:

8=FIX.4.4|9=0000113|35=B|49=SPOT|56=OE|34=4|52=20240924-21:07:35.773537|148=Your connection is about to be closed. Please reconnect.|10=165|

Application Messages

下单消息

NewOrderSingle<D>

由客户端发送,用以提交新订单并进行执行。

请参阅 支持的订单类型 了解支持的字段组合。

注意: 许多字段会根据订单类型变为必填。 请参阅 支持的订单类型

Tag名称类型是否必须描述
11ClOrdIDSTRINGY分配给订单的 ClOrdID
38OrderQtyQTYN订单数量
40OrdTypeCHARY请参阅 表格 了解支持的订单类型和所需字段。

可能的值:

1 - MARKET

2 - LIMIT

3 - STOP

4 - STOP_LIMIT
18ExecInstCHARN可能的值:

6 - PARTICIPATE_DONT_INITIATE
44PricePRICEN订单价格
54SideCHARY订单方向。

可能的值:

1 - BUY

2 - SELL
55SymbolSTRINGY下单的交易对。
59TimeInForceCHARN可能的值:

1 - GOOD_TILL_CANCEL

3 - IMMEDIATE_OR_CANCEL

4 - FILL_OR_KILL
111MaxFloorQTYN用于冰山订单,指定订单在订单簿上的可见数量。
152CashOrderQtyQTYN以报价资产单位指定的订单数量,用于反向市场订单。
847TargetStrategyINTN
7940StrategyIDINTN值不能小于 1000000
25001SelfTradePreventionModeCHARN可能的值:

1 - NONE

2 - EXPIRE_TAKER

3 - EXPIRE_MAKER

4 - EXPIRE_BOTH
1100TriggerTypeCHARN可能的值: 4 - PRICE_MOVEMENT
1101TriggerActionCHARN可能的值:

1 - ACTIVATE
1102TriggerPricePRICEN止盈止损订单的激活价格。请参阅 表格
1107TriggerPriceTypeCHARN可能的值:

2 - LAST_TRADE
1109TriggerPriceDirectionCHARN用于区分 StopLoss 和 TakeProfit 订单。请参阅 表格

可能的值:

U - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_UP_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE

D - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_DOWN_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
25009TriggerTrailingDeltaBipsINTN提供以创建追踪订单。
25032SORBOOLEANN是否为此订单激活 SOR。

示例消息:

8=FIX.4.4|9=114|35=D|34=2|49=qNXO12fH|52=20240611-09:01:46.228|56=SPOT|11=1718096506197867067|38=5|40=2|44=10|54=1|55=LTCBNB|59=4|10=016|

响应:

支持的订单类型
订单名称Binance OrderType方向必填字段值用户值必填字段
Market orderMARKETBUY 或 SELL40=1|
Limit orderLIMITBUY 或 SELL40=2|
Limit maker orderLIMIT_MAKERBUY 或 SELL40=2|18=6|
Buy stop loss orderSTOP_LOSSBUY40=3|1100=4|1101=1|1107=2|1109=U|1102
Buy trailing stop loss orderSTOP_LOSSBUY40=3|1100=4|1101=1|1107=2|1109=U|1102,25009
Buy stop loss limit orderSTOP_LOSS_LIMITBUY40=4|1100=4|1101=1|1107=2|1109=U|1102
Buy trailing stop loss limit orderSTOP_LOSS_LIMITBUY40=4|1100=4|1101=1|1107=2|1109=U|1102,25009
Sell stop loss orderSTOP_LOSSSELL40=3|1100=4|1101=1|1107=2|1109=D|1102
Sell trailing stop loss orderSTOP_LOSSSELL40=3|1100=4|1101=1|1107=2|1109=D|1102,25009
Sell stop loss limit orderSTOP_LOSS_LIMITSELL40=4|1100=4|1101=1|1107=2|1109=D|1102
Sell trailing stop loss limit orderSTOP_LOSS_LIMITSELL40=4|1100=4|1101=1|1107=2|1109=D|1102,25009
Buy take profit orderTAKE_PROFITBUY40=3|1100=4|1101=1|1107=2|1109=D|1102
Buy trailing take profit orderTAKE_PROFITBUY40=3|1100=4|1101=1|1107=2|1109=D|1102,25009
Buy trailing take profit orderTAKE_PROFITBUY40=3|1100=4|1101=1|1107=2|25009
Buy take profit orderTAKE_PROFIT_LIMITBUY40=4|1100=4|1101=1|1107=2|1109=D|1102
Buy trailing take profit limit orderTAKE_PROFIT_LIMITBUY40=4|1100=4|1101=1|1107=2|1109=D|1102,25009
Buy trailing take profit limit orderTAKE_PROFIT_LIMITBUY40=4|1100=4|1101=1|1107=2|25009
Sell take profit orderTAKE_PROFITSELL40=3|1100=4|1101=1|1107=2|1109=U|1102
Sell trailing take profit orderTAKE_PROFITSELL40=3|1100=4|1101=1|1107=2|1109=U|1102,25009
Sell trailing take profit orderTAKE_PROFITSELL40=3|1100=4|1101=1|1107=2|25009
Sell take profit limit orderTAKE_PROFIT_LIMITSELL40=4|1100=4|1101=1|1107=2|1109=U|1102
Sell trailing take profit limit orderTAKE_PROFIT_LIMITSELL40=4|1100=4|1101=1|1107=2|1109=U|1102,25009
Sell trailing take profit limit orderTAKE_PROFIT_LIMITSELL40=4|1100=4|1101=1|1107=2|25009

基于 Binance OrderType 的必填字段:

Binance OrderType额外的必填字段额外的信息
LIMIT38, 44, 59
MARKET38 或 152MARKET 订单使用 OrderQty (38) 字段来指定用户希望以市场价格买入或卖出的 base asset 数量。

例如,用户可以使用交易对为 BTCUSDTMARKET 订单来指定买入或卖出多少 BTC。



用户使用 MARKET 订单中的 quoteOrderQty 字段来指定花费(买入时)或接收(卖出时)quote 资产。正确的 quantity 将由市场流动性和 quoteOrderQty 来决定。

用交易对 BTCUSDT来举例:

BUY 方订单将使用由 quoteOrderQty 定义的 USDT 数额来购买尽可能多的 BTC。

SELL 方订单将出售 BTC 来换取尽可能多的由 CashOrderQty(152) 定义的 USDT 数额。
STOP_LOSS38, 1102 或 25009当满足条件时,将执行 MARKET 订单。(例如,满足 TriggerPrice (1102) 的条件或激活 TriggerTrailingDeltaBips (25009)
STOP_LOSS_LIMIT38, 44, 59, 1102 或 25009
TAKE_PROFIT38, 1102 或 25009当满足条件时,这将执行MARKET订单。(例如,满足 TriggerPrice (1102) 的条件或激活 TriggerTrailingDeltaBips (25009)
TAKE_PROFIT_LIMIT38, 44, 59, 1102 或 25009
LIMIT_MAKER38, 44这是一个 LIMIT 订单。如果订单被立即匹配并作为 taker 进行交易,那么该订单将被拒绝。

这也称为 POST-ONLY 订单。

ExecutionReport<8>

每当订单状态发生变化时由服务器发送。

注意:

  • 默认情况下,ExecutionReport<8> 会发送该账户的所有订单,包括在不同连接中提交的订单。 请参阅 响应模式 来了解其他行为选项。
  • FIX API 应该为 ExecutionReport<8> 推送提供更好的性能。
Tag名称类型是否必须描述
17ExecIDSTRINGN被拒绝订单时省略。
11ClOrdIDSTRINGN列表中分配的 ClOrdID
41OrigClOrdIDSTRINGN订单的原始 ClOrdID
37OrderIDINTN由交易所分配。
38OrderQtyQTYN订单数量。
40OrdTypeCHARY可能的值:

1 - MARKET

2 - LIMIT

3 - STOP_LOSS

4 - STOP_LIMIT
54SideCHARY可能的值:

1 - BUY

2 - SELL
55SymbolSTRINGY订单的交易对。
18ExecInstCHARN可能的值:

6 - PARTICIPATE_DONT_INITIATE
44PricePRICEN订单价格。
59TimeInForceCHARN可能的值:

1 - GOOD_TILL_CANCEL

3 - IMMEDIATE_OR_CANCEL

4 - FILL_OR_KILL
60TransactTimeUTCTIMESTAMPN此事件发生的时间戳。
25018OrderCreationTimeINTN
111MaxFloorQTYN出现在冰山订单中。
66ListIDSTRINGN出现在列表订单中。
152CashOrderQtyQTYN以 quote asset 单位指定的订单数量。
847TargetStrategyINTN订单提交请求中的 TargetStrategy (847)
7940StrategyIDINTN订单提交请求中的 StrategyID (7940)
25001SelfTradePreventionModeCHARN可能的值:

1 - NONE

2 - EXPIRE_TAKER

3 - EXPIRE_MAKER

4 - EXPIRE_BOTH
150ExecTypeCHARY注意: 如果订单因 SelfTradePreventionMode(25013) 过期,字段 PreventedMatchID(25024) 会被显示。

可能的值:

0 - NEW

4 - CANCELED

5 - REPLACED

8 - REJECTED

F - TRADE

C - EXPIRED
14CumQtyQTYY在此订单上交易的 base asset 总数。
151LeavesQtyQTYN剩余的可执行数量。
25017CumQuoteQtyQTYN在此订单上交易的 quote asset 总数。
1057AggressorIndicatorBOOLEANN出现在 trade execution reports 中。

指示订单在交易中是否为 taker。
1003TradeIDSTRINGN出现在 trade execution reports 中。
31LastPxPRICEN最后一次执行的价格。
32LastQtyQTYY最后一次执行的数量。
39OrdStatusCHARY可能的值:

0 - NEW

1 - PARTIALLY_FILLED

2 - FILLED

4 - CANCELED 6 - PENDING_CANCEL

8 - REJECTED

A - PENDING_NEW

C - EXPIRED

注意 FIX 不支持 EXPIRED_IN_MATCH 状态,并在 FIX 中转换为 EXPIRED
70AllocIDINTN由交易所分配的分配 ID。
574MatchTypeINTN可能的值:

1 - ONE_PARTY_TRADE_REPORT

4 - AUTO_MATCH
25021WorkingFloorINTN出现在可能有分配的订单中。
25022TrailingTimeUTCTIMESTAMPN仅出现在追踪止损订单中。
636WorkingIndicatorBOOLEANN当此订单进入订单簿时会被设置为 Y
25023WorkingTimeUTCTIMESTAMPN此订单出现在订单簿上的时间。
25024PreventedMatchIDINTN仅出现在因 STP 过期的订单中。
25025PreventedExecutionPricePRICEN仅出现在因 STP 过期的订单中。
25026PreventedExecutionQtyQTYN仅出现在因 STP 过期的订单中。
25027TradeGroupIDINTN仅出现在因 STP 过期的订单中。
25028CounterSymbolSTRINGN仅出现在因 STP 过期的订单中。
25029CounterOrderIDINTN仅出现在因 STP 过期的订单中。
25030PreventedQtyQTYN仅出现在因 STP 过期的订单中。
25031LastPreventedQtyQTYN仅出现在因 STP 过期的订单中。
25032SORBOOLEANN出现在使用 SOR 的订单中。
25016ErrorCodeINTNAPI 错误代码(请参阅 错误代码)。
58TextSTRINGN可读的错误消息。
136NoMiscFeesNUMINGROUPN杂费的重复组数量。
=>137MiscFeeAmtQTYYMiscFeeCurr(138) 资产计价的费用金额
=>138MiscFeeCurrSTRINGY杂费的货币。
=>139MiscFeeTypeINTY可能的值:

4 - EXCHANGE_FEES
1100TriggerTypeCHARN可能的值:

4 - PRICE_MOVEMENT
1101TriggerActionCHARN可能的值:

1 - ACTIVATE
1102TriggerPricePRICEN止盈止损订单的激活价格。请参阅 表格
1107TriggerPriceTypeCHARN可能的值:

2 - LAST_TRADE
1109TriggerPriceDirectionCHARN用于区分止损和止盈订单。请参阅 表格

可能的值:

U - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_UP_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE

D - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_DOWN_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
25009TriggerTrailingDeltaBipsINTN仅出现在追踪止损订单中。

示例消息:

8=FIX.4.4|9=330|35=8|34=2|49=SPOT|52=20240611-09:01:46.228950|56=qNXO12fH|11=1718096506197867067|14=0.00000000|17=144|32=0.00000000|37=76|38=5.00000000|39=0|40=2|44=10.00000000|54=1|55=LTCBNB|59=4|60=20240611-09:01:46.228000|150=0|151=5.00000000|636=Y|1057=Y|25001=1|25017=0.00000000|25018=20240611-09:01:46.228000|25023=20240611-09:01:46.228000|10=095|

OrderCancelRequest<F>

由客户发送的,用以取消订单或订单列表。

  • 要取消订单,需要 OrderID (11)OrigClOrdID (41)
  • 要取消订单列表,需要 ListID (66)OrigClListID (25015)

如果已取消的订单是订单列表的一部分,则整个订单列表将被取消。

Tag名称类型是否必须描述
11ClOrdIDSTRINGY请求的 ClOrdID
41OrigClOrdIDSTRINGN要取消订单的 ClOrdID (11)
37Order IDSTRINGN要取消订单的 OrderID (37)
25015OrigClListIDSTRINGN要取消订单列表的 ClListID (25014)
66ListIDSTRINGN要取消订单列表的 ListID (66)
55SymbolSTRINGY要取消订单的交易对。
25002CancelRestrictionsINTN取消的限制。可能的值:

1 - ONLY_NEW

2 - ONLY_PARTIALLY_FILLED

示例消息:

8=FIX.4.4|9=93|35=F|34=2|49=ieBwvCKy|52=20240613-01:11:13.784|56=SPOT|11=1718241073695674483|37=2|55=LTCBNB|10=210|

响应:

OrderCancelReject <9>

OrderCancelRequest<F> 失败时,由服务器发送的消息。

Tag名称类型是否必须描述
11ClOrdIDSTRINGY来自取消请求的 ClOrdID (11)
41OrigClOrdIDSTRINGN来自取消请求的 OrigClOrdID (41)
37OrderIDINTN来自取消请求的 OrderID (37)
25015OrigClListIDSTRINGN来自取消请求的 OrigClListID (25015)
66ListIDSTRINGN来自取消请求的 ListID (66)
55SymbolSTRINGY来自取消请求的 Symbol (55)
25002CancelRestrictionsINTN来自取消请求的 CancelRestrictions (25002)
434CxlRejResponseToCHARY此 OrderCancelReject<9> 响应的请求类型。

可能的值:

1 - ORDER_CANCEL_REQUEST
25016ErrorCodeINTYAPI error code (参考 错误代码).
58TextSTRINGY可读的错误消息。

示例消息:

8=FIX.4.4|9=137|35=9|34=2|49=SPOT|52=20240613-01:12:41.320869|56=OlZb8ht8|11=1718241161272843932|37=2|55=LTCBNB|58=Unknown order sent.|434=1|25016=-1013|10=087|

OrderCancelRequestAndNewOrderSingle<XCN>

由客户发送,用以取消订单并提交新订单以供执行。 在描述新订单时,请参阅 支持的订单类型 了解支持的字段组合。

注意: 取消始终是优先处理的,紧接着的是提交新订单。

Tag名称类型是否必须描述
25033OrderCancelRequestAndNewOrderSingleModeINTY用于定义: 如果取消失败,将会采取的后续操作 。
可能的值 :
1 - STOP_ON_FAILURE

2 -ALLOW_FAILURE
25038OrderRateLimitExceededModeINTN用于定义: 如果超过未成交订单计数,将会如何处理取消请求。
可能的值 :
1 - DO_NOTHING

2 - CANCEL_ONLY
37OrderIDINTN来自于取消订单的 OrderID
25034CancelClOrdIDSTRINGN待取消的 ClOrdID
41OrigClOrdIDSTRINGN来自待取消订单的 ClOrdID
11ClOrdIDSTRINGY用于分配给新订单的 ClOrdID
25002CancelRestrictionsINTN取消的限制。可能值 :

1 - ONLY_NEW

2 - ONLY_PARTIALLY_FILLED
38OrderQtyQTYN新订单的数量
40OrdTypeCHARY请参阅 [表格](#ordertype)以了解支持的订单类型以及相关的必填字段 。

可能的值 :

1 - MARKET

2 - LIMIT

3 - STOP

4 - STOP_LIMIT
18ExecInstCHARN可能的值:

6 - PARTICIPATE_DONT_INITIATE
44PricePRICEN新订单的价格
54SideCHARY订单方向。

可能的值:

1 - BUY

2 - SELL
55SymbolSTRINGY取消并下新订单所用的交易对。
59TimeInForceCHARN可能的值 :

1 - GOOD_TILL_CANCEL

3 - IMMEDIATE_OR_CANCEL

4 - FILL_OR_KILL
111MaxFloorQTYN用于冰山订单,用于定义订单在 orderbook 上的可见数量。
152CashOrderQtyQTYN用于反向市价单,用于定义 quote asset 单位中的订单数量。
847TargetStrategyINTN
7940StrategyIDINTN该值不能小于 1000000
25001SelfTradePreventionModeCHARN可能的值:

1 - NONE

2 - EXPIRE_TAKER

3 - EXPIRE_MAKER

4 - EXPIRE_BOTH
1100TriggerTypeCHARN可能的值: 4 - PRICE_MOVEMENT
1101TriggerActionCHARN可能的值:

1 - ACTIVATE
1102TriggerPricePRICEN止盈止损订单的激活价格。参见 表格
1107TriggerPriceTypeCHARN可能的值

2 - LAST_TRADE
1109TriggerPriceDirectionCHARN用于区分止损订单和止盈订单。参考 表格 .

可能的值 :

U - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_UP_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE

D -TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_DOWN_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
25009TriggerTrailingDeltaBipsINTN用以创建追踪订单。

示例消息:

8=FIX.4.4|9=160|35=XCN|34=2|49=JS8iiXK6|52=20240613-02:31:53.753|56=SPOT|11=1718245913721036458|37=8|38=5|40=2|44=4|54=1|55=LTCBNB|59=1|111=1|25033=1|25034=1718245913721036819|10=229|

响应:

OrderMassCancelRequest<q>

由客户端发送,用以取消交易品种上的所有挂单。

注意事项: 该账户的所有订单都将被取消,包括从不同连接中下的订单。

Tag名称类型是否必须描述
11ClOrdIDSTRINGY此批量取消请求的ClOrdId
55SymbolSTRINGY取消订单的交易对。
530MassCancelRequestTypeCHARY可能的值:

1 - CANCEL_SYMBOL_ORDERS

示例消息:

8=FIX.4.4|9=94|35=q|34=2|49=dpYPesqv|52=20240613-01:24:36.948|56=SPOT|11=1718241876901971671|55=ABCDEF|530=1|10=110|

响应:

由服务器发送,用以响应 OrderMassCancelRequest<q>

Tag名称类型是否必须描述
55SymbolSTRINGY取消请求中的 Symbol (55)
11ClOrdIDSTRINGY取消请求中的 ClOrdID (11)
530MassCancelRequestTypeCHARY取消请求中的 MassCancelRequestType (530)
531MassCancelResponseCHARY可能的值:

0 - CANCEL_REQUEST_REJECTED

1 - CANCEL_SYMBOL_ORDERS
532MassCancelRejectReasonINTN可能的值:

99 - OTHER
533TotalAffectedOrdersINTN取消了多少订单。
25016ErrorCodeINTNAPI 错误代码 (参考 错误代码).
58TextSTRINGN可读的错误消息。

示例消息:

8=FIX.4.4|9=109|35=r|34=2|49=SPOT|52=20240613-01:24:36.949763|56=dpYPesqv|11=1718241876901971671|55=LTCBNB|530=1|531=1|533=5|10=083|

NewOrderList<E>

由客户发送,用以提交需要执行的订单列表。 订单列表中的订单是相互依赖的。 欲了解支持的订单类型和触发说明,请参考支持的订单列表类型

Tag名称类型是否必须描述
25014ClListIDSTRINGYClListID,用于分配给订单列表。
1385ContingencyTypeINTN可能的值 :

1 -ONE_CANCELS_THE_OTHER

2 - ONE_TRIGGERS_THE_OTHER
73NoOrdersNUMINGROUPNOrders 数组中的元素个数。只允许输入2或者3。
=>11ClOrdIDSTRINGY用于分配给订单的ClOrdID
=>38OrderQtyQTYN订单数量
=>40OrdTypeCHARY请参阅 表格 以了解支持的订单类型及相关的必填字段 。

可能的值 :

1 - MARKET

2 - LIMIT

3 - STOP

4 - STOP_LIMIT
=>18ExecInstCHARN可能的值:

6 - PARTICIPATE_DONT_INITIATE
=>44PricePRICEN订单价格
=>54SideCHARY订单的方向。 可能的值 :

1 - BUY

2 - SELL
=>55SymbolSTRINGY订单的交易对。
=>59TimeInForceCHARN可能的值 :

1 - GOOD_TILL_CANCEL

3 - IMMEDIATE_OR_CANCEL

4 - FILL_OR_KILL
=>111MaxFloorQTYN用于冰山订单,这指定了订单在 order book上的可见数量。
=>152CashOrderQtyQTYN对于反向市场订单,在报价资产单位中指定的订单数量。
=>847TargetStrategyINTN
=>7940StrategyIDINTN该值不能小于 1000000.
=>25001SelfTradePreventionModeCHARN可能的值:

1 - NONE

2 - EXPIRE_TAKER

3 - EXPIRE_MAKER

4 - EXPIRE_BOTH
=>1100TriggerTypeCHARN可能的值:

4 - PRICE_MOVEMENT
=>1101TriggerActionCHARN可能的值:

1 - ACTIVATE
=>1102TriggerPricePRICEN止盈止损订单的激活价格。参见 表格
=>1107TriggerPriceTypeCHARN可能的值:

2 - LAST_TRADE
=>1109TriggerPriceDirectionCHARN用于区分止损订单和止盈订单。 参见 表格.

可能的值:

U - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_UP_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE

D - TRIGGER_IF_THE_PRICE_OF_THE_SPECIFIED_TYPE_GOES_DOWN_TO_OR_THROUGH_THE_SPECIFIED_TRIGGER_PRICE
=>25009TriggerTrailingDeltaBipsINTN用于追踪订单。
=>25010NoListTriggeringInstructionsNUMINGROUPNListTriggeringInstructions 数组中的元素个数。
==>25011ListTriggerTypeCHARN为了触发 pending order, working order 所需进行的操作。

可能的值:

1 - ACTIVATED

2 - PARTIALLY_FILLED

3 - FILLED
==>25012ListTriggerTriggerIndexINTN条件单的触发 Index:0-indexed。
==>25013ListTriggerActionCHARN在满足 ListTriggerType 条件后对此订单执行的操作。

可能的值:

1 - RELEASE

2 - CANCEL

示例消息:

8=FIX.4.4|9=236|35=E|34=2|49=Eg13pOvN|52=20240607-02:19:07.836|56=SPOT|73=2|11=w1717726747805308656|55=LTCBNB|54=2|38=1|40=2|44=0.25|59=1|11=p1717726747805308656|55=LTCBNB|54=2|38=1|40=1|25010=1|25011=3|25012=0|25013=1|1385=2|25014=1717726747805308656|10=171|

支持的订单列表类型

注意: 订单必须按照下表中 订单名称 中指定的顺序排列。

订单列表名称应急类型(1385)订单名称订单方允许的币安订单类型列出触发指令
OCO11. below order



2. above order
1. below order=SELL



2. above order=SELL
1. below order=STOP_LOSSSTOP_LOSS_LIMIT



2. above order=LIMIT_MAKER
1. below order:

25010=1|25011=2|25012=1|25013=2|



2. above order:

25010=1|25011=1|25012=0|25013=2|
OCO11. below order



2. above order
1. below order=BUY



2. above order=BUY
1. below order=LIMIT_MAKER



2. above order=STOP_LOSSSTOP_LOSS_LIMIT
1. below order:

25010=1|25011=1|25012=1|25013=2|



2. above order:

25010=1|25011=2|25012=0|25013=2|
OCO11. below order



2. above order
1. below order=SELL



2. above order=SELL
1. below order=STOP_LOSSSTOP_LOSS_LIMIT



2. above order= TAKE_PROFIT
1. below order:

25010=1|25011=1|25012=1|25013=2|



2. above order:

25010=1|25011=1|25012=0|25013=2|
OCO11. below order



2. above order
1. below order=BUY



2. above order=BUY
1. below order=TAKE_PROFIT



2. above order = STOP_LOSSSTOP_LOSS_LIMIT
1. below order:

25010=1|25011=1|25012=1|25013=2|



2. above order:

25010=1|25011=1|25012=0|25013=2|
OTO21. working order



2. pending order
1. working order=SELLBUY



2. pending order=SELLBUY
1. working order=LIMITLIMIT_MAKER



2. pending order=ANY
1. working order:

NONE



2. pending order:

25010=1|25011=3|25012=0|25013=1|
OTOCO21. working order



2. pending below order



3. pending above order
1. working order=SELLBUY



2. pending below order=SELL



3. pending above order=SELL
1. working order=LIMITLIMIT_MAKER



2. pending below order=STOP_LOSSSTOP_LOSS_LIMIT



3. pending above order=LIMIT_MAKER
1. working order:

NONE



2. pending below order:

25010=2|25011=3|25012=0|25013=2|25011=2|25012=2|25013=2|



3. pending above order:

25010=2|25011=3|25012=0|25013=2|25011=1|25012=1|25013=2|
OTOCO21. working order



2. pending below order



3. pending above order
1. working order=SELLBUY



2. pending below order=BUY



3. pending above order=BUY
1. working order=LIMITLIMIT_MAKER



2. pending below order=LIMIT_MAKER



3. pending above order=STOP_LOSSSTOP_LOSS_LIMIT
1. working order:

NONE



2. pending below order:

25010=2|25011=3|25012=0|25013=2|25011=1|25012=2|25013=2|



3. pending above order:

25010=2|25011=3|25012=0|25013=2|25011=2|25012=1|25013=2|
OTOCO21. working order



2. pending below order



3. pending above order
1. working order=SELLBUY



2. pending below order=SELL



3. pending above order=SELL
1. working order=LIMITLIMIT_MAKER



2. pending below order=STOP_LOSSSTOP_LOSS_LIMIT



3. pending above order=TAKE_PROFIT
1. working order:

NONE



2. pending below order:

25010=2|25011=3|25012=0|25013=2|25011=1|25012=2|25013=2|



3. pending above order:

25010=2|25011=3|25012=0|25013=2|25011=1|25012=1|25013=2|
OTOCO21. working order



2. pending below order



3. pending above order
1. working order=SELLBUY



2. pending below order=BUY



3. pending above order=BUY
1. working order=LIMITLIMIT_MAKER



2. pending below order=TAKE_PROFIT



3. pending above order=STOP_LOSSSTOP_LOSS_LIMIT
1. working order:

NONE



2. pending below order:

25010=2|25011=3|25012=0|25013=2|25011=1|25012=2|25013=2|



3. pending above order:

25010=2|25011=3|25012=0|25013=2|25011=1|25012=1|25013=2|

ListStatus<N>

每当订单列表状态发生变化时,由服务器发送的消息。

注意: 默认情况下,ListStatus<N> 会含有该账户的所有订单列表,包括在不同连接中提交的订单列表。 请参阅 响应模式 来了解其他行为选项。

Tag名称类型是否必须描述
55SymbolSTRINGY订单列表的交易对。
66ListIDSTRINGN由交易所分配的订单列表 ListID
25014ClListIDSTRINGN分配给请求的订单列表 ClListID
25015OrigClListIDSTRINGN
1385ContingencyTypeINTN可能的值:

1 - ONE_CANCELS_THE_OTHER

2 - ONE_TRIGGERS_THE_OTHER
429ListStatusTypeINTY可能的值:

2 - RESPONSE

4 - EXEC_STARTED

5 - ALL_DONE
431ListOrderStatusINTY可能的值:

3 - EXECUTING

6 - ALL_DONE

7 - REJECT
1386ListRejectReasonINTN可能的值:

99 - OTHER
103OrdRejReasonINTN可能的值:

99 - OTHER
60TransactTimeUTCTIMESTAMPN发生此事件时的时间戳。
25016ErrorCodeINTNAPI 错误代码 (参考 错误代码 ).
58TextSTRINGN可读的错误消息。
73NoOrdersNUMINGROUPNOrders 数组中的元素个数。
=>55SymbolSTRINGY订单的交易对。
=>37OrderIDINTY由交易所分配的订单 OrderID
=>11ClOrdIDSTRINGY分配给请求的订单 ClOrdID
=>25010NoListTriggeringInstructionsNUMINGROUPNListTriggeringInstructions 数组中的元素个数。
==>25011ListTriggerTypeCHARN可能的值:

1 - ACTIVATED

2 - PARTIALLY_FILLED

3 - FILLED
==>25012ListTriggerTriggerIndexINTN
==>25013ListTriggerActionCHARN可能的值

1 - RELEASE

2 - CANCEL

示例消息:

8=FIX.4.4|9=290|35=N|34=2|49=SPOT|52=20240607-02:19:07.837191|56=Eg13pOvN|55=ABCDEF|60=20240607-02:19:07.836000|66=25|73=2|55=LTCBNB|37=52|11=w1717726747805308656|55=ABCDEF|37=53|11=p1717726747805308656|25010=1|25011=3|25012=0|25013=1|429=4|431=3|1385=2|25014=1717726747805308656|25015=1717726747805308656|10=019|

Limit Messages

LimitQuery<XLQ>

由客户端发送,用于查询当前限制。

Tag名称类型是否必须描述
6136ReqIDSTRINGY此请求的 ID

示例消息:

8=FIX.4.4|9=82|35=XLQ|34=2|49=7buKHZxZ|52=20240614-05:35:35.357|56=SPOT|6136=1718343335357229749|10=170|

LimitResponse<XLR>

由服务器发送,以响应 LimitQuery<XLQ> 请求。

Tag名称类型是否必须描述
6136ReqIDSTRINGYReqID
25003NoLimitIndicatorsNUMINGROUPYLimitIndicator 数组中的元素个数。
=>25004LimitTypeCHARY可能的值

1 - ORDER_LIMIT

2 - MESSAGE_LIMIT
=>25005LimitCountINTY此限制的当前使用情况。
=>25006LimitMaxINTY此限制允许的最大值。
=>25007LimitResetIntervalINTN限制重置的频率。
=>25008LimitResetIntervalResolutionCHARNLimitResetInterval 的时间单位。可能的值:

s - SECOND

m - MINUTE

h - HOUR

d - DAY

示例消息:

8=FIX.4.4|9=225|35=XLR|34=2|49=SPOT|52=20240614-05:42:42.724057|56=uGnG0ef8|6136=1718343762723730315|25003=3|25004=2|25005=1|25006=1000|25007=10|25008=s|25004=1|25005=0|25006=200|25007=10|25008=s|25004=1|25005=0|25006=200000|25007=1|25008=d|10=241|