跳到主要内容

FIX API

FIX(Financial Information eXchange)是一种用于下单、接收订单更新和取消订单的标准电子消息协议。BTSE 的 FIX API 基于 FIX 4.2 规范。


连接​

环境主机端口
生产环境tcp+ssl://fix.btse.com9876
测试网tcp+ssl://fix.btse.io9876

现货和合约的会话通过 SenderSubID 分开:

SenderSubID市场
SPOT现货交易
FUTURES合约交易

频率限制​

组消息类型限制
认证Logon (A), Logout (5)每秒 2 次
通用所有其他消息每秒 30 次

超出频率限制时,会返回 Business Message Reject (j),其中 BusinessRejectReason: 4(应用程序不可用)。


通用请求属性​

所有客户端消息必须包含以下字段:

标签名称描述
8BeginString必须为 FIX.4.2
9BodyLength消息体长度(字节)
34MsgSeqNum序列号 — 从 1 开始,每条消息递增。重复或乱序将被拒绝。新连接时重置。
35MsgType消息类型
49SenderCompID客户端 API key
50SenderSubIDSPOT 或 FUTURES
52SendingTime消息发送时间(例如 20220916-07:29:07)
56TargetCompID必须为 BTSE
10CheckSum消息校验和

消息​

Logon (A)​

发起 FIX 会话。必须是发送的第一条消息。每个连接仅允许一个会话。

标签名称值描述
35MsgTypeA
95RawDataLength96RawData 字段的长度
96RawData(hex)HMAC-SHA384 签名。使用 FIX 字段分隔符(0x01)拼接:SendingTime + MsgType + MsgSeqNum + SenderCompID + TargetCompID,然后使用 API secret 进行 HMAC-SHA384 签名
98EncryptMethod0必须为 0(无加密)
108HeartBtInt30心跳间隔(秒)。每 N-5 秒发送一次心跳
141ResetSeqNumFlagY必须为 Y
5001ApplyNewSymbolNameY仅限合约。启用新交易对名称(例如 BTC-PERP)。没有此字段时,仅接受旧名称(例如 BTCPFC)
example

签名计算

// 使用 FIX 分隔符 (0x01) 拼接字段:
// SendingTime + 0x01 + MsgType + 0x01 + MsgSeqNum
// + 0x01 + SenderCompID + 0x01 + TargetCompID
//
// 然后:HMAC-SHA384(apiSecret, dataRaw)
// 将结果进行十六进制编码 → RawData (tag 96)

Heartbeat (0)​

保持会话活跃。每 N-5 秒发送一次,其中 N 是 Logon 中设置的心跳间隔。

标签名称值描述
35MsgType0
112TestReqID123如果是对 TestRequest 的响应,从 TestRequest 中复制

Test Request (1)​

请求心跳响应。

标签名称值描述
35MsgType1
112TestReqID123任意字符串 — 在 Heartbeat 中回传

Logout (5)​

终止会话。对方以另一条 Logout 消息响应;之后关闭连接。

标签名称值
35MsgType5

New Order Single (D)​

提交新订单。支持 Market 和 Limit 订单。

标签名称值描述
35MsgTypeD
21HandlInst1必须为 1(AutomatedExecutionNoIntervention)
11ClOrdIDorder123客户端选择的唯一订单标识符
55SymbolBTC-USD交易对名称
40OrdType21:Market · 2:Limit
38OrderQty1.1以基础货币为单位的订单数量(Limit 和 Market 卖单必填)
44Price18000Limit 或 Market 买单价格(Limit 和 Market 买单必填)
54Side11:买入 · 2:卖出
59TimeInForce11:GTC · 3:IOC · 4:FOK · a:30秒 · b:5分钟 · c:1小时 · d:12小时 · e:1周 · f:1个月
18ExecInst6可选:E:只减仓 · 6:仅做 maker
5002PositionIdBTC-PERP-USDT可选。要减少的仓位(合约)
5003PositionModeONEWAY可选。ONEWAY(默认) · HEDGE · ISOLATED

接受后,返回 Execution Report (8)。


Order Cancel Request (F)​

请求取消未完成的订单。仅提供 OrderID 或 OrigClOrdID 之一。

标签名称值描述
35MsgTypeF
37OrderIDorder123系统分配的订单 ID
41OrigClOrdIDorder123客户端分配的订单 ID
55SymbolBTC-USD交易对名称

成功时返回 Execution Report (8),失败时返回 Order Cancel Reject (9)。


Order Cancel Reject (9)​

当 Order Cancel Request 失败时由服务器发送。

标签名称值描述
35MsgType9
37OrderIDorder123从取消请求中复制(如果提供)
41OrigClOrdIDorder123从取消请求中复制(如果提供)
39OrdStatus44:已取消 · 8:拒绝
102CxlRejReason11:未知订单 · 99:其他
434CxlRejResponseTo1始终为 1

Order Status Request (H)​

查询订单状态。仅提供 OrderID 或 OrigClOrdID 之一。使用 OrderID = * 请求所有待处理订单。

标签名称值描述
35MsgTypeH
37OrderIDorder123要查询的订单,或 * 查询所有未完成订单
41OrigClOrdIDorder123客户端订单 ID
54Side11:买入 · 2:卖出
55SymbolBTC-USD交易对名称

返回 ExecType=I 的 Execution Report (8)。当没有未完成订单时,Text (58) 返回 "No open orders"。


Execution Report (8)​

在以下情况由服务器发送:订单成交、订单状态变更,或响应 New Order Single、Order Cancel Request 或 Order Status Request。

标签名称值描述
11ClOrdIDorder123客户端订单 ID
12Commission0.002交易手续费(仅成交时)
13CommType3始终为 3
14CumQty0.4累计成交数量
17ExecIDd840c8...执行 ID
31LastPx7999.25成交价格(仅成交时)
32LastShares0.4成交数量(仅成交时)
35MsgType8
37OrderIDd840c8...系统订单 ID
38OrderQty1.2原始订单数量
39OrdStatus0当前订单状态(见下表)
44Price8000原始订单价格
54Side11:买入 · 2:卖出
55SymbolBTC-USD交易对名称
58Texttext拒绝原因描述
59TimeInForce61:GTC · 3:IOC · 4:FOK · 6:GTD · a-f:自定义时长
60TransactTime20190525-08:26:38.989订单更新时间戳
103OrdRejReason1111:UNSUPPORTED_ORDER_CHARACTERISTIC — 详见 Text(58)
126ExpireTime20190525-08:26:38.989TimeInForce=GTD 且未设置 ExpireDate 时必填
150ExecType1此消息的原因(见下表)
151LeavesQty0.8剩余未成交数量
1057AggressorIndicatorYY:taker · N:maker(仅成交时)
5000LiquidationYY:市场强平订单

ExecType 值:

ExecType描述
0新订单
1部分成交
3完全成交
4订单已取消
5订单已修改
7订单退款(自成交)
8已拒绝(响应 New Order Single)
I订单状态(响应 Order Status Request)

OrdStatus 值:

OrdStatus描述
0新订单
1部分成交
3完全成交
4已取消
5已修改
7已退款
8已拒绝

Reject (3)​

在收到无效消息时由服务器发送。

标签名称值描述
35MsgType3
45RefSeqNum2被拒绝消息的序列号
371RefTagID38被拒绝字段的标签号
372RefMsgTypeD被拒绝消息的消息类型
58TextMissing quantity人类可读的拒绝原因
373SessionRejectReason1标识拒绝原因的代码

Business Message Reject (j)​

当超出频率限制时发送。

标签名称示例描述
35MsgTypej
45RefSeqNum11被拒绝消息的序列号
49SenderCompIDBTSE始终为 BTSE
56TargetCompIDc123...05a客户端 API key
57TargetSubIDSPOTSPOT 或 FUTURES
58Textexceeding rate limit详细信息
372RefMsgTypeF被拒绝消息的消息类型
380BusinessRejectReason4始终为 4:应用程序不可用