跳到主要内容

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
50SenderSubIDSPOTFUTURES
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)

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

标签名称描述
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)

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

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

返回 ExecType=IExecution 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
57TargetSubIDSPOTSPOTFUTURES
58Textexceeding rate limit详细信息
372RefMsgTypeF被拒绝消息的消息类型
380BusinessRejectReason4始终为 4:应用程序不可用