FIX API
[!NOTE] 此 API 只能用于现货 (
SPOT) 交易所。
一般 API 信息
- FIX 连接需要 TLS 加密。请使用本地 TCP+TLS 连接或设置本地代理如 stunnel 来处理 TLS 加密。
- API 处理请求的超时时间为 10 秒。如果撮合引擎的响应时间超过此时间,API 将返回 “Timeout waiting for response from backend server. Send status unknown; execution status unknown.”。(-1007 超时)
- 这并不总是意味着该请求在撮合引擎中失败。
- 如果请求状态未显示在 用户数据流 中,请执行 API 查询以获取其状态。
- 如果您的请求包含非 ASCII 字符的交易对名称,那么响应中可能包含以 UTF-8 编码的非 ASCII 字符。
- 为确保连接不中断,请确保您的客户端在 TLS 握手过程中发送 SNI(服务器名称指示),并对目标主机名进行证书验证。
- 未发送 SNI 的客户端可能会收到证书错误的消息,导致 TLS 握手或主机名验证失败。
示例实现
NodeJS
如果你正在使用 Node.js,并且通过原始 TLS 套接字(tls.connect())进行连接,你必须显式设置 servername 选项。请参考下面的示例:
const tls = require("tls");
const hostname = "fix-dc.binance.com"; //示例
const options = {
host: hostname,
port: 9002,
servername: hostname // 启用 SNI
};
注意:NodeJS 默认不启用 TLS 的 SNI(详见 https://nodejs.org/api/tls.html#tlsconnectoptions-callback)。
如果您使用 Node.js 中的标准 HTTPS 库(例如 https.request()、axios、fetch),通常在通过主机名/URL 连接时会自动设置 SNI。
其他语言/自定义 TLS 实现
使用自定义 TLS 代理或 TLS API 时,请确保将相应字段(通常名为 server_hostname、hostname 或 ServerName)设置为目标主机名,以便发送 SNI。
FIX 会话仅支持 Ed25519 密钥。
关于如何设置 Ed25519 密钥对,请参考 本教程。
FIX API 订单接入会话
- 端点为:
tcp+tls://fix-oe.binance.com:9000 - 支持下单,取消订单和查询当前限制使用情况。
- 支持接收账户的所有 ExecutionReport
<8>和 List Status<N>。 - 仅允许带有
FIX_API的 API Key 连接。 - 关于 QuickFIX 模式文件, 请点击 这里。
FIX API Drop Copy 会话
- 端点为:
tcp+tls://fix-dc.binance.com:9000 - 支持接收账户的所有 ExecutionReport
<8>和 List Status<N>。 - 仅允许连接带有
FIX_API或FIX_API_READ_ONLY的 API Key。 - 关于 QuickFIX 模式文件, 请点击 这里。
- Drop Copy 会话中的数据存在 1 秒的延迟。
FIX API Market Data 会话
- 端 点为:
tcp+tls://fix-md.binance.com:9000 - 支持市场数据流和活动工具查询。
- 不支持下订单或取消订单。
- 仅允许连接带有
FIX_API或FIX_API_READ_ONLY的 API 密钥。 - 关于 QuickFIX 模式文件,请点击 这里。
FIX 连接生命周期
- 所有 FIX API 会话将尽最大努力,尽可能长时间地保持开放状态。
- 没有最短连接时间保证,服务器可能随时进入维护状态。
- 当服务器进入维护状态时,系统将会向客户端每隔 10 秒发送一条 News
<B>消息,并持续 10 分钟,以提示客户端重新连接。收到此消息后,客户端应建立新会话并关闭旧会话。如果客户端未在规定的时间范围内关闭旧连接,那么服务器会将其注销并关闭会话。
- 当服务器进入维护状态时,系统将会向客户端每隔 10 秒发送一条 News
- 连接后,客户端必须发送 Logon
<A>请求。有关详情,请参阅 如何签署登录请求。 - 客户端应在断开连接之前发送 Logout
<5>消息来关闭会话。未能发送注销消息将导致在 2xHeartInt (108)定义的时间间隔内无法将会话的SenderCompID (49)用于新会话的建立。 - 系统允许在登录过程中协商
HeartInt (108)值。可接受值的范围为 5 到 60 秒。