FIX 规范
机器翻译译自英文(docs.alpaca.markets)本页 84 段已全部译完
版本 1.2.0
支持的消息类型
| 消息 | MsgType | 描述 |
|---|---|---|
| Logon | A | 由 FIX 客户端发送以认证并建立 FIX 会话 |
| Heartbeat | 0 | 由客户端或服务器在工作 FIX 会话内按预设间隔发送 |
| Test Request | 1 | 发送以强制对方应用发送心跳 |
| Resend Request | 2 | 请求重传遗漏的消息 |
| Reject | 3 | 对无法处理的消息的响应 |
| Sequence Reset | 4 | 重置 FIX 会话序列号 |
| Logout | 5 | 安全断开连接的 FIX 会话 |
| New Order - Single | D | 提交新的单腿订单(股票或单腿期权) |
| New Order - Multileg | AB | 提交新的多腿订单(例如期权价差、备兑看涨) |
| Execution Report | 8 | 每当订单状态变化时发送 |
| Order Cancel Request | F | 请求取消订单(单腿或多腿) |
| Order Cancel/Replace Request | G | 请求修改单腿订单 |
| Multileg Order Cancel/Replace Request | AC | 请求修改多腿订单 |
| Order Cancel Reject | 9 | 如果取消或取消/替换请求(F、G 或 AC)无法执行则发送 |
消息头
所有消息的头部应包含以下标签:
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 8 | BeginString | Y | FIX.4.2 |
| 9 | BodyLength | Y | 消息体大小(字节) |
| 34 | MsgSeqNum | Y | 消息序列号 |
| 35 | MsgType | Y | 消息类型,应为本文档支持的类型之一 |
| 49 | SenderCompID | Y | 由 Alpaca 提供,必须出现在所有 FIX 消息中。在所有发给客户端的 FIX 消息中将作为 TargetCompID (56) 返回 |
| 52 | SendingTime | Y | 消息传输的 UTC 时间戳。支持的精度:毫秒、微秒、纳秒 |
| 56 | TargetCompID | Y | 由 Alpaca 提供,必须出现在所有 FIX 消息中。在所有发给客户端的 FIX 消息中将作为 SenderCompID (49) 返回 |
消息尾部
所有消息的尾部应包含以下标签:
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 10 | CheckSum | Y | 消息中的最后一个字段,以 <SOH> 结尾。值由 FIX 引擎根据消息数据计算 |
登录(A)
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | A - 用于登录 |
| 98 | EncryptMethod | Y | 0 - 无,唯一接受的值 |
| 108 | HeartBtInt | Y | 必须设置为 30 表示 30 秒 |
| 141 | ResetSeqNumFlag | N | Y - 将发送方和目标序列号都重置为 1 |
FIX 消息示例
|8=FIX.4.2|9=73|35=A|34=1|49=SENDER|52=20240524-16:02:42.003|56=ALPACA|98=0|108=30|141=Y|10=131|心跳(0)
如果自上次心跳间隔以来未收到任何消息,则由客户端或服务器发送。这也作为对 Test Request (1) 的响应发送。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | 0 - 用于心跳 |
| 112 | TestReqID | N | 仅在响应 Test Request (1) 发送心跳时必填 |
FIX 消息示例
|8=FIX.4.2|9=91|35=0|49=SENDER|56=ALPACA|34=2|52=20230330-16:52:321.029|10=049|测试请求(1)
可由客户端或服务器发送,以强制对方发送心跳(0)。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | 1 - 用于测试请求 |
| 112 | TestReqID | Y | 在结果心跳(0)中返回的标识符 |
FIX 消息示例
|8=FIX.4.2|9=91|35=1|49=SENDER|56=ALPACA|34=2|52=20230330-16:52:321.029|112=TEST|10=049|重发请求(2)
发送以请求重传遗漏的消息。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | 2 - 用于重发请求 |
| 7 | BeginSeqNo | Y | 请求消息的起始序列号 |
| 16 | EndSeqNo | Y | 请求消息的结束序列号 |
FIX 消息示例
|8=FIX.4.2|9=66|7=9|16=36|34=12|35=2|49=SENDER|52=20230627-14:10:21.769|56=ALPACA|10=126|拒绝(3)
当消息被 FIX 服务器拒绝或无法处理时发送。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | 3 - 用于拒绝 |
| 45 | RefSeqNum | Y | 被拒绝消息的序列号 |
| 58 | Text | N | 拒绝原因 |
| 371 | RefTagID | N | 引用的 FIX 字段的标签号 |
| 372 | RefMsgType | N | 引用的 FIX 消息的 MsgType (35) |
| 373 | SessionRejectReason | N | 拒绝原因代码。 0 - 无效的标签号 1 - 缺少必填标签 2 - 该消息类型未定义标签 3 - 不支持的消息类型 4 - 指定了标签但没有值 5 - 该标签的值不正确(超出范围) 6 - 值的数据格式不正确 9 - CompID 问题 10 - SendingTime 精度问题 11 - 无效的 MsgType |
FIX 消息示例
|8=FIX.4.2|9=0134|35=3|34=44196|49=ALPACA|56=TARGET|52=20230330-20:18:38.039|58=0005 Tag specified without a value|45=44196|371=11|372=8|373=4|10=092|序列重置(4)
发送以重置另一侧的传入序列号。序列重置应仅用于增加序列号。任何减少序列号的请求都将导致 Reject (3) 消息。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | 4 - 用于序列重置 |
| 36 | NewSeqNo | Y | 新序列号 |
| 123 | GapFillFlag | N | N - 序列重置以从乱序情况恢复,MsgSeqNum(34) 被忽略 Y - 缺口填充消息,MsgSeqNum(34) 字段必须有效 |
FIX 消息示例
|8=FIX.4.2|9=61|34=12|35=4|36=9|49=SENDER|52=20230627-14:14:51.732|56=ALPACA|10=156|登出(5)
可由客户端或服务器发送以终止会话。对方将回复确认的 Logout 消息作为确认。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | 5 - 用于 Logout |
FIX 消息示例
|8=FIX.4.2|9=56|34=12|35=5|49=SENDER|52=20230627-14:16:50.690|56=ALPACA|10=197|新订单 - 单腿(D)
由客户端发送以提交新的单腿订单。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | D - 用于新订单 - 单腿 |
| 1 | Account | Y | 账户号码 |
| 11 | ClOrdID | Y | 客户端分配的订单唯一标识符(不得超过 48 个字符) |
| 12 | Commission | N | 从账户持有人处收取的佣金 |
| 13 | CommType | N | 1 - 每股 2 - 百分比,5% 应表示为 .05 3 - 绝对值 |
| 18 | ExecInst | N | 1 - 不持有 5 - 持有 |
| 21 | HandlInst | Y | 1 - 无经纪商干预的自动执行,唯一接受的值 |
| 38 | OrderQty | N | 要交易的股数,如果未设置 CashOrderQty (152) 则必填 |
| 40 | OrdType | Y | 1 - 市价 2 - 限价 3 - 止损 4 - 止损限价 5 - 收盘市价 B - 收盘限价 |
| 44 | Price | N | 限价 40=2 和止损限价 40=4 订单必填 |
| 54 | Side | Y | 1 - 买入 2 - 卖出 |
| 55 | Symbol | Y | 股票代码 |
| 59 | TimeInForce | Y | 0 - 当日(day) 1 - 撤销前有效(gtc) 2 - 开盘时(opg) 3 - 立即成交或取消(ioc) 4 - 全部成交或取消(fok) 7 - 收盘时(cls) |
| 168 | EffectiveTime | N | 订单可执行的 UTC 时间戳。如果省略,订单立即生效。未来的 EffectiveTime 不保证立即路由或执行;适用的交易时段规则和所有其他订单验证仍然适用。支持的精度:秒 |
| 60 | TransactTime | Y | 客户端创建订单的 UTC 时间戳 |
| 77 | OpenClose | N | 指示交易产生的持仓是开仓还是平仓。 O - 开仓 C - 平仓 |
| 99 | StopPx | N | 止损 40=3 和止损限价 40=4 订单必填 |
| 109 | ClientID | N | 综合账户的子账户标签 |
| 152 | CashOrderQty | N | 要交易的名义价值,如果未设置 OrderQty (38) 则必填 |
| 336 | TradingSessionID | N | 8 - 盘前盘后交易 仅盘前盘后交易订单必填 |
| 167 | SecurityType | N | CS - 普通股(缺席时默认) OPT - 期权 提交单腿期权订单时必须为 OPT |
| 200 | MaturityMonthYear | N | 到期月份和年份,格式为 YYYYMM。当 167=OPT 时必填 |
| 201 | PutOrCall | N | 0 - 看跌 1 - 看涨 当 167=OPT 时必填 |
| 202 | StrikePrice | N | 期权合约的行权价(最多 3 位小数)。 当 167=OPT 时必填 |
| 205 | MaturityDay | N | 到期日(1-31)。 当 167=OPT 时必填 |
关于生效时间订单的说明
- 请联系你的 Alpaca 技术代表以启用此功能。
- EffectiveTime 支持 day 限价/stop_limit 订单,包括 extended_hours
- 订单在 EffectiveTime 之前不能成交。
- stop_limit 订单在 EffectiveTime 之前不评估止损触发。
- 订单可以在 EffectiveTime 之前取消。
- 如果 EffectiveTime 落在订单符合条件的交易时段之外,订单将保留到下一个符合条件的时段。
- 到达 EffectiveTime 不保证执行。价格、流动性、交易时段资格和其他验证仍然适用。
- EffectiveTime 必须使用 FIX UTCTimestamp 格式以 UTC 表示。支持的精度:秒
- 订单在其 EffectiveTime 之前可能具有 OrderStatus(39) = New 和 ExecType (150) = New。在这种情况下,New 表示 Alpaca 已接受订单;并不表示订单当前有资格执行。
关于单腿期权订单的说明
- 当
SecurityType (167) = OPT时,期权合约由Symbol (55)(标的根符号,例如AAPL)、MaturityMonthYear (200)、MaturityDay (205)、PutOrCall (201)和StrikePrice (202)的组合标识。 - 应提供
OpenClose (77)以消除持仓效果(开仓与平仓)的歧义。省略时,持仓意图从Side (54)推断:Buy→ 买入开仓,Sell→ 卖出平仓,Sell Short (5)→ 卖出开仓。 - 期权执行报告会回传
SecurityType、MaturityMonthYear、MaturityDay、PutOrCall和StrikePrice以及标准字段。
FIX 消息示例
|8=FIX.4.2|9=139|1=TEST_ACCOUNT|11=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|34=12|35=D|38=10|40=1|49=SENDER|52=20230613-14:01:37.330|54=1|55=SPY|56=ALPACA|59=1|10=030||8=FIX.4.2|9=141|1=TEST_ACCOUNT|11=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|34=12|35=D|40=1|49=SENDER|52=20230613-14:43:47.572|54=1|55=SPY|56=ALPACA|59=0|152=100|10=130||8=FIX.4.2|9=149|1=TEST_ACCOUNT|11=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|34=12|35=D|38=10|40=2|44=350.78|49=SENDER|52=20230613-14:45:58.303|54=1|55=SPY|56=ALPACA|59=0|10=005||8=FIX.4.2|9=149|1=TEST_ACCOUNT|11=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|34=12|35=D|38=10|40=3|49=SENDER|52=20230613-14:50:51.223|54=1|55=SPY|56=ALPACA|59=0|99=350.78|10=006||8=FIX.4.2|9=159|1=TEST_ACCOUNT|11=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|34=12|35=D|38=10|40=4|44=350.78|49=SENDER|52=20230613-15:26:35.992|54=1|55=SPY|56=ALPACA|59=0|99=350.78|10=246||8=FIX.4.2|9=149|1=TEST_ACCOUNT|11=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|34=12|35=D|38=10|40=2|44=350.78|49=SENDER|52=20230613-14:45:58.303|54=1|55=SPY|56=ALPACA|59=5|10=005||8=FIX.4.2|9=185|1=TEST_ACCOUNT|11=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|34=12|35=D|38=2|40=2|44=2.15|49=SENDER|52=20240910-14:45:58.303|54=1|55=META|56=ALPACA|59=0|60=20240910-14:45:58.303|77=O|167=OPT|200=202501|201=1|202=100|205=17|10=011||8=FIX.4.2|9=149|1=TEST_ACCOUNT|11=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|34=12|35=D|38=10|40=2|44=350.78|49=SENDER|52=20230613-14:45:58.303|54=1|55=SPY|56=ALPACA|59=0|168=20260727-00:00:00.000|10=005|执行报告(8)
每当订单收到更新时,由服务器发送。每份执行报告都包含字段 OrdStatus (39),用于传达 Alpaca 所理解的订单当前状态,以及字段 ExecType (150) 和 ExecTransType (20),用于描述消息的目的。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | 8 - 用于执行报告 |
| 1 | Account | Y | 账户号码 |
| 6 | AvgPx | Y | 该订单所有成交的平均价格 |
| 11 | ClOrdID | Y | 客户端分配的订单唯一标识符 |
| 12 | Commission | N | 成交/部分成交收取的佣金金额 |
| 14 | CumQty | Y | 订单已成交数量 |
| 15 | Currency | N | 账户基础货币,默认为 USD |
| 17 | ExecID | Y | Alpaca 分配的执行唯一标识符 |
| 19 | ExecRefID | N | 当 20=1 或 20=2 时,被取消或更正的原执行的 ExecID (17) |
| 20 | ExecTransType | Y | 交易类型。 0 - 新建 1 - 取消 2 - 更正 3 - 状态,用于止损触发时的 Restated (D) 消息 |
| 30 | LastMkt | N | 该成交的执行市场 |
| 31 | LastPx | N | 该成交的价格 |
| 32 | LastShares | N | 该成交的数量 |
| 37 | OrderID | Y | Alpaca 分配的订单唯一标识符 |
| 38 | OrderQty | N | 提供 CashOrderQty (152) 或 OrderQty (38) 之一 |
| 39 | OrdStatus | Y | 标识订单当前状态。 0 - 新建 1 - 部分成交 2 - 已成交 3 - 当日完成 4 - 已取消 5 - 已替换 6 - 待取消 8 - 已拒绝 A - 待新建 C - 已过期 E - 待替换 |
| 40 | OrdType | N | 与订单上指定的一致。 1 - 市价 2 - 限价 3 - 止损 4 - 止损限价 5 - 收盘市价 B - 收盘限价 |
| 41 | OrigClOrdID | N | 取消和取消/替换请求中原始订单的 ClOrdID (11) |
| 44 | Price | N | 当订单上指定时发送 |
| 54 | Side | Y | 1 - 买入 2 - 卖出 |
| 55 | Symbol | Y | 股票代码 |
| 58 | Text | N | 当 150=8 时包含拒绝原因 |
| 59 | TimeInForce | N | 与订单上指定的一致。 0 - 当日(day) 1 - 撤销前有效(gtc) 2 - 开盘时(opg) 3 - 立即成交或取消(ioc) 4 - 全部成交或取消(fok) 7 - 收盘时(cls) |
| 168 | EffectiveTime | N | 与订单关联的生效时间。当原始订单上提供了 EffectiveTime (168) 时填充。 |
| 60 | TransactTime | N | 执行发生时的服务器 UTC 时间,纳秒精度 |
| 99 | StopPx | N | 当订单上指定时发送 |
| 150 | ExecType | Y | 描述执行报告的类型。 0 - 新建 1 - 部分成交 2 - 成交 3 - 当日完成 4 - 已取消 5 - 已替换 6 - 待取消,Order Cancel Request (F) 的确认 8 - 已拒绝 A - 待新建 C - 已过期 D - 重述,用于止损价格触发 E - 待替换,Order Cancel/Replace Request (G) 的确认 |
| 151 | LeavesQty | Y | 订单未成交数量。当订单关闭(已成交、当日完成、已取消、已替换、已拒绝、已过期)时,值可为 0 |
| 152 | CashOrderQty | N | 提供 CashOrderQty (152) 或 OrderQty (38) 之一。指定订单上传递的名义金额 |
| 378 | ExecRestatementReason | N | 当 ExecType (150) = Restated (D) 时填充。 100 - 止损触发,用于止损和止损限价订单 |
| 77 | OpenClose | N | 执行的持仓效果。 O - 开仓 C - 平仓 多腿订单的腿执行报告中始终填充 |
| 167 | SecurityType | N | CS - 普通股 OPT - 期权 MLEG - 多腿工具(多腿订单的父执行报告) |
| 200 | MaturityMonthYear | N | 期权执行(167=OPT)时填充 |
| 201 | PutOrCall | N | 期权执行(167=OPT)时填充。0 - 看跌 1 - 看涨 |
| 202 | StrikePrice | N | 期权执行(167=OPT)时填充 |
| 205 | MaturityDay | N | 期权执行(167=OPT)时填充 |
| 442 | MultiLegReportingType | N | 仅在多腿父订单产生的执行报告中设置。 2 - 多腿证券的单条腿(每条腿一份执行报告) 3 - 多腿证券(父级执行报告) |
| 654 | LegRefID | N | 此执行报告对应腿的标识符。 在腿执行报告中填充( 442=2);与父订单上提供的 LegRefID 匹配 |
| 555 | NoLegs | N | NoLegs 重复组中的腿数量。 在父执行报告中填充( 442=3)。有关重复组字段,请参见 新订单 - 多腿(AB) |
关于多腿订单执行报告的说明
多腿父订单的每次状态转换都会产生:
- 每条腿一份执行报告,带有
MultiLegReportingType (442) = 2(单条腿)。腿执行报告携带该腿的LegRefID (654)、Side (54)、OrderQty (38) = parent_qty * LegRatioQty、期权标签(当腿为期权时)以及该腿持仓效果的OpenClose (77)。 - 可选地,一份父级执行报告,带有
MultiLegReportingType (442) = 3和SecurityType (167) = MLEG。父执行报告包含描述所有腿的NoLegs (555)重复组,并使用父级的ClOrdID (11)和OrderID (37)。是否发送父级执行报告在会话接入时约定。
对于成交,腿级 LastPx (31) 和 LastShares (32) 反映每条腿的执行,而父执行报告的 LastPx (31) 反映净价差价格(买入腿价格之和减去卖出腿价格之和,按腿比例缩放),LastShares (32) 反映完成的价差单位数量。
FIX 消息示例
|8=FIX.4.2|9=216|1=TEST_ACCOUNT|17=694bc450-3ca6-461e-8566-f977dcec9e2d|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=A|40=1|49=ALPACA|52=20230615-18:14:29.702|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:14:29.702|150=A|151=10|10=088||8=FIX.4.2|9=216|1=TEST_ACCOUNT|17=694bc450-3ca6-461e-8566-f977dcec9e2d|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=0|40=1|49=ALPACA|52=20230615-18:14:45.263|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:14:45.263|150=0|151=10|10=054||8=FIX.4.2|9=251|1=TEST_ACCOUNT|6=350.78|14=5|15=USD|17=694bc450-3ca6-461e-8566-f977dcec9e2d|31=350.78|32=5|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=1|40=1|49=ALPACA|52=20230615-18:15:00.622|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:15:00.622|150=1|151=5|10=185||8=FIX.4.2|9=253|1=TEST_ACCOUNT|6=350.78|14=10|15=USD|17=694bc450-3ca6-461e-8566-f977dcec9e2d|31=350.78|32=10|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=2|40=1|49=ALPACA|52=20230615-18:15:21.920|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:15:21.920|150=2|151=0|10=024||8=FIX.4.2|9=216|1=TEST_ACCOUNT|17=694bc450-3ca6-461e-8566-f977dcec9e2d|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=E|40=1|49=ALPACA|52=20230615-18:26:53.971|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:26:53.971|150=E|151=10|10=112||8=FIX.4.2|9=256|1=TEST_ACCOUNT|17=694bc450-3ca6-461e-8566-f977dcec9e2d|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=5|40=1|41=56fcd203-7a97-430d-b14c-b0d9a7f59f2f|49=ALPACA|52=20230615-18:15:38.108|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:15:38.108|150=5|151=10|10=144||8=FIX.4.2|9=216|1=TEST_ACCOUNT|17=694bc450-3ca6-461e-8566-f977dcec9e2d|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=6|40=1|49=ALPACA|52=20230615-18:24:50.191|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:24:50.191|150=6|151=10|10=060||8=FIX.4.2|9=216|1=TEST_ACCOUNT|17=694bc450-3ca6-461e-8566-f977dcec9e2d|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=4|40=1|49=ALPACA|52=20230615-18:17:45.813|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:17:45.813|150=4|151=10|10=070||8=FIX.4.2|9=227|1=TEST_ACCOUNT|17=694bc450-3ca6-461e-8566-f977dcec9e2d|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=8|40=1|49=ALPACA|52=20230615-18:15:51.825|54=1|55=SPY|56=SENDER|59=0|60=20230615-18:15:51.825|103=Price too low|150=8|10=191||8=FIX.4.2|9=296|1=TEST_ACCOUNT|6=2.15|14=2|15=USD|17=694bc450-3ca6-461e-8566-f977dcec9e2d|31=2.15|32=2|34=12|35=8|37=c5bfc5f6-163d-450e-bb4a-fb25188cde8e|39=2|40=2|44=2.15|49=ALPACA|52=20240910-14:46:01.220|54=1|55=META|56=SENDER|59=0|60=20240910-14:46:01.220|77=O|150=2|151=0|167=OPT|200=202501|201=1|202=100|205=17|10=189||8=FIX.4.2|9=320|1=TEST_ACCOUNT|6=79.25|11=PARENT_CLORDID|14=1|15=USD|17=4d6a8e2d-b86a-4ab9-9d3b-3a4dc6f5fa1c|31=79.25|32=1|34=18|35=8|37=ORDER_ID|39=1|40=2|44=10.5|49=ALPACA|52=20240910-15:00:00.001|54=1|55=AAPL|56=SENDER|59=0|60=20240910-15:00:00.001|77=O|150=1|151=1|167=OPT|200=202501|201=1|202=100|205=17|442=2|654=0|10=180||8=FIX.4.2|9=412|1=TEST_ACCOUNT|6=77.75|11=PARENT_CLORDID|14=2|15=USD|17=2bbf38f6-89f1-4f25-bb70-9f1e3ad7c1aa|31=77.75|32=2|34=22|35=8|37=ORDER_ID|39=2|40=2|44=10.5|49=ALPACA|52=20240910-15:00:05.500|56=SENDER|59=0|60=20240910-15:00:05.500|150=2|151=0|167=MLEG|442=3|555=2|600=AAPL|608=OC|611=20250117|612=100|624=1|623=1|564=O|654=0|600=AAPL|608=OP|611=20250117|612=100|624=2|623=1|564=O|654=1|10=224|订单取消请求(F)
由客户端发送,用于请求取消订单。同一消息类型用于取消单腿(股票/期权)和多腿订单。对于多腿订单,SecurityType (167) 应设置为 MLEG,Symbol (55) 应为父订单的标的根符号。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | F - 用于订单取消请求 |
| 1 | Account | Y | 账户号码 |
| 11 | ClOrdID | Y | 客户端分配的取消请求唯一标识符 |
| 41 | OrigClOrdID | Y | 客户端分配的待取消订单的 ClOrdID (11) |
| 54 | Side | Y | 与待取消订单上指定的一致 |
| 55 | Symbol | Y | 与待取消订单上指定的一致(多腿为标的根符号) |
| 60 | TransactTime | Y | 发起取消请求时的 UTC 时间戳 |
| 167 | SecurityType | N | 期权订单为 OPT,多腿订单为 MLEG |
要确认此消息,会立即发送带有 150=6 的 Execution Report (8),随后发送带有 150=4 的 Execution Report (8) 或 Order Cancel Reject (9) 消息。有时可能直接发送 Order Cancel Reject (9) 消息而不发送带有 150=6 的 Execution Report (8)。对于多腿订单,确认会为每条腿(442=2)生成,并在启用时在父级(442=3)生成。
FIX 消息示例
|8=FIX.4.2|9=190|35=F|34=5|49=SENDER|52=20240524-16:02:44.709|56=ALPACA|1=account1|11=b165965d-0c9d-467e-a174-ee30f3fe6dbe|41=b5db0b8e-bbc1-4906-aff8-c58d18ba3398|54=1|55=AAPL|60=20240524-16:02:44.709206406|10=226|订单取消/替换请求(G)
由客户端发送,用于请求修改单腿(股票或单腿期权)订单。要修改多腿订单,请改用 多腿订单取消/替换请求(AC)。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | G - 用于订单取消/替换请求 |
| 1 | Account | Y | 账户号码 |
| 11 | ClOrdID | Y | 客户端分配的替换订单唯一标识符(不得超过 48 个字符) |
| 21 | HandlInst | Y | 1 - 无经纪商干预的自动执行,唯一接受的值 |
| 38 | OrderQty | N | 订单修改后的数量 |
| 40 | OrdType | Y | 与原始订单上指定的一致 |
| 41 | OrigClOrdID | Y | 客户端分配的待修改订单的 ClOrdID (11) |
| 44 | Price | N | 订单修改后的价格 |
| 54 | Side | Y | 与原始订单上指定的一致 |
| 55 | Symbol | Y | 与原始订单上指定的一致 |
| 59 | TimeInForce | N | 订单修改后的订单有效期 |
| 60 | TransactTime | Y | 发起取消/替换请求时的 UTC 时间戳 |
| 99 | StopPx | N | 订单修改后的止损价 |
FIX 消息示例
|8=FIX.4.2|9=212|35=G|34=21|49=SENDER|52=20240524-16:16:58.956|56=ALPACA|1=account1|11=45169819-088a-4089-9758-f28e830e95f0|21=3|40=2|41=f001f209-2c3e-42e3-9ab1-10e74ee39fe5|44=1.50000|54=1|55=AAPL|60=20240524-16:16:58.956849295|10=173|订单取消失败(9)
如果 Order Cancel Request (F) 或 Order Cancel/Replace Request (G) 消息无法执行,则由服务器发送。一些常见的拒绝场景包括:
- 当订单已成交或已关闭时
- 当该订单已存在待处理的 Order Cancel Request (F) 或 Order Cancel/Replace Request (G) 时
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | 9 - 用于订单取消失败 |
| 1 | Account | Y | 账户号码 |
| 11 | ClOrdID | Y | 客户端分配的取消或取消/替换请求的唯一标识符 |
| 37 | OrderID | Y | Alpaca 分配的订单唯一标识符,该订单的取消或取消/替换请求被拒绝 |
| 39 | OrdStatus | Y | 应用此取消失败后的订单状态 |
| 41 | OrigClOrdID | Y | 取消或取消/替换请求被拒绝的订单的 ClOrdID (11) |
| 58 | Text | N | 拒绝原因 |
| 60 | TransactTime | N | 取消或替换拒绝发生时的服务器 UTC 时间 |
| 102 | CxlRejReason | N | 标识取消拒绝原因的代码。 0 - 太晚无法取消 1 - 未知订单 2 - 经纪商选项 3 - 订单已处于待取消或待替换状态 |
| 434 | CxlRejResponseTo | Y | 1 - 对 Order Cancel Request (F) 的响应 2 - 对 Order Cancel/Replace Request (G) 的响应 |
FIX 消息示例
|8=FIX.4.2|9=220|35=9|34=18|49=ALPACA|52=20240524-16:02:46.215|56=SENDER|1=account1|11=a7860828-4dc5-4f8f-bfb1-8fbca8855c88|37=f50af678-bba4-44ea-9b23-0fc452ed4921|39=6|41=2c017b79-a843-4146-a2b7-3bf83af89482|58=TOO_LATE_TO_CANCEL|434=1|10=116||8=FIX.4.2|9=198|35=9|34=45|49=ALPACA|52=20240524-16:16:59.085|56=SENDER|1=account1|11=5cdf9082-067b-4497-a90c-f5e8c666409b|37=UNKNOWN|39=8|41=c7feaf5a-54d2-458d-8ab2-9b2f337a28ec|58=replace pending for order|434=2|10=179|新订单 - 多腿(AB)
由客户端发送以提交新的多腿订单,例如期权价差、跨式、宽跨式或备兑看涨。尽管 FIX 会话运行在 BeginString=FIX.4.2 上,但 NewOrderMultileg 消息(35=AB)及其 NoLegs 重复组遵循 FIX 4.4 规范。
每条腿可以是期权合约或股票(用于将股票与期权结合的策略,如备兑看涨)。订单作为单个多腿请求提交,确认会在腿级和(可选)父级返回——详情请参见 执行报告(8)。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | AB - 用于新订单多腿 |
| 1 | Account | Y | 账户号码 |
| 11 | ClOrdID | Y | 客户端分配的父订单唯一标识符(不得超过 64 个字符) |
| 18 | ExecInst | N | 1 - 不持有 5 - 持有 |
| 21 | HandlInst | Y | 1 - 无经纪商干预的自动执行,唯一接受的值 |
| 38 | OrderQty | Y | 要交易的价差单位数量。每条腿的数量为 OrderQty * LegRatioQty (623) |
| 40 | OrdType | Y | 1 - 市价 2 - 限价 3 - 止损 4 - 止损限价 5 - 收盘市价 B - 收盘限价 |
| 44 | Price | N | 每价差单位的净借方/贷方价格。限价(40=2)和止损限价(40=4)订单必填 |
| 55 | Symbol | Y | 所有腿共有的标的根符号(例如 AAPL) |
| 59 | TimeInForce | Y | 0 - 当日(day) 1 - 撤销前有效(gtc) 2 - 开盘时(opg) 3 - 立即成交或取消(ioc) 4 - 全部成交或取消(fok) 7 - 收盘时(cls) |
| 60 | TransactTime | Y | 客户端创建订单的 UTC 时间戳 |
| 99 | StopPx | N | 止损(40=3)和止损限价(40=4)订单必填 |
| 152 | CashOrderQty | N | 要交易的的名义价值 |
| 167 | SecurityType | N | MLEG - 多腿工具(推荐) |
| 555 | NoLegs | Y | 订单中的腿数量。必须至少为 2。以下重复组字段重复 NoLegs 次。多腿订单不得在父级提供 Side (54) |
| →600 | LegSymbol | Y | 每条腿的符号。对于期权腿,为标的根符号(例如 AAPL);对于股票腿,为股票代码 |
| →608 | LegCFICode | Y | OC - 期权看涨 OP - 期权看跌 ES - 股票(用于备兑看涨等策略) |
| →611 | LegMaturityDate | N | 到期日期,格式为 YYYYMMDD。期权腿( LegCFICode = OC 或 OP)必填 |
| →612 | LegStrikePrice | N | 期权腿的行权价。 期权腿( LegCFICode = OC 或 OP)必填 |
| →623 | LegRatioQty | Y | 该腿相对于父 OrderQty 的比例。必须为正数。每条腿数量 = OrderQty * LegRatioQty |
| →624 | LegSide | Y | 1 - 买入 2 - 卖出 |
| →654 | LegRefID | Y | 客户端分配的每条腿标识符,在订单内唯一(最多 32 个字符)。在每条腿执行报告中回传 |
| →564 | LegPositionEffect | N | O - 开仓 C - 平仓 与 LegSide 结合以推导每条腿的持仓意图。省略时,意图从 LegSide 推断(买入 → 开仓,卖出 → 平仓) |
备注
- 在多腿订单中,如果父级包含
Side (54)、腿数少于 2 条或缺少任何必需的腿字段,将以 Business Message Reject(代码 9001)拒绝。 - 每条腿的执行报告会回传订单上提供的
LegRefID (654),因此腿级确认可以与原始腿关联。 - MOC(
40=5)和 LOC(40=B)订单类型等同于提交OrdTypeMarket / Limit 并设置TimeInForce (59) = 7(收盘时)。
FIX 消息示例
|8=FIX.4.2|9=350|35=AB|34=42|49=SENDER|52=20240910-15:00:00.000|56=ALPACA|1=account1|11=spread-001|21=1|38=2|40=2|44=10.5|55=AAPL|59=0|60=20240910-15:00:00.000|167=MLEG|555=2|600=AAPL|654=0|608=OC|611=20250117|612=100|624=1|623=1|564=O|600=AAPL|654=1|608=OC|611=20250117|612=105|624=2|623=1|564=O|10=147|多腿订单取消/替换请求(AC)
由客户端发送,用于请求修改多腿订单。与 新订单 - 多腿(AB) 类似,消息体遵循 FIX 4.4 规范,而会话保持 BeginString=FIX.4.2。
替换消息必须重新提供完整的 NoLegs 重复组。替换多腿订单将产生每条腿的 Pending Replace(150=E)和随后的 Replaced(150=5)执行报告,并在启用时在父级产生。
| 标签 | 字段 | 必填 | 描述 |
|---|---|---|---|
| 35 | MsgType | Y | AC - 用于多腿订单取消/替换请求 |
| 1 | Account | Y | 账户号码 |
| 11 | ClOrdID | Y | 客户端分配的替换订单唯一标识符(不得超过 64 个字符) |
| 21 | HandlInst | Y | 1 - 无经纪商干预的自动执行,唯一接受的值 |
| 38 | OrderQty | N | 订单修改后的价差数量 |
| 40 | OrdType | Y | 与原始订单上指定的一致 |
| 41 | OrigClOrdID | Y | 正在修改的父订单的 ClOrdID (11) |
| 44 | Price | N | 每价差单位修改后的净价格 |
| 55 | Symbol | Y | 标的根符号(与原始订单一致) |
| 59 | TimeInForce | N | 订单修改后的订单有效期 |
| 60 | TransactTime | Y | 发起取消/替换请求时的 UTC 时间戳 |
| 99 | StopPx | N | 订单修改后的止损价 |
| 167 | SecurityType | N | MLEG - 多腿工具(推荐) |
| 555 | NoLegs | Y | 重新提供完整的腿列表(≥ 2 条腿)。不得在父级提供 Side (54)。有关重复组字段(600、608、611、612、623、624、654、564),请参见 新订单 - 多腿(AB) |
备注
- 如果在同一
OrigClOrdID的前一个替换仍待处理时提交多腿取消/替换,将以 订单取消失败(9) 拒绝(text=replace pending for order)。 NoLegs组使用与新订单消息相同的规则进行验证;拒绝通过 Business Message Reject(代码 9001)返回。
FIX 消息示例
|8=FIX.4.2|9=370|35=AC|34=58|49=SENDER|52=20240910-15:05:00.000|56=ALPACA|1=account1|11=spread-001-rep|21=1|38=2|40=2|41=spread-001|44=11.0|55=AAPL|60=20240910-15:05:00.000|167=MLEG|555=2|600=AAPL|654=0|608=OC|611=20250117|612=100|624=1|623=1|564=O|600=AAPL|654=1|608=OC|611=20250117|612=105|624=2|623=1|564=O|10=189|版本历史
| 版本 | 日期 (DD/MM/YYYY) | 变更 |
|---|---|---|
| 0.1.0 | 08/05/2024 | 文档创建 |
| 0.1.1 | 24/05/2024 | 将 FIX 版本更改为 FIX.4.2 从消息头中移除 ApplVerID (1128) 在 Order Cancel Request (F) 和 Order Cancel/Replace Request (G) 中添加 ClOrdID (11) 和 OrigClOrdID (41) 为必填 从 Order Cancel Request (F) 和 Order Cancel/Replace Request (G) 中移除 OrderID (37) 在 Order Cancel/Replace Request (G) 中添加 OrderQty (38) 更新 FIX 示例 |
| 0.1.2 | 12/06/2024 | 从 Logon (A) 消息中移除 Account (1) 和 RawData (96) 在 Reject (3) 消息中添加 RefTagID (371)、RefMsgType (372) 和 SessionRejectReason (373) 在 New Order - Single (D) 中添加 HandlInst (21)、TransactTime (60) 和 OpenClose (77) 在 New Order - Single (D) 的 CommType (13) 中添加 1(每股)为接受值 将 Execution Report (8) 中的 AvgPx (6) 更新为必填 在 Execution Report (8) 中添加 Commission (12)、ExecRefID (19)、ExecTransType (20)、LastMkt (30)、OrderQty (38) 和 CashOrderQty (152) 从 Execution Report (8) 中移除 OrdRejReason (103) 更新 Execution Report (8) 中 ExecType (150) 的可能值 |
| 1.0.0 | 13/06/2024 | 在 Order Cancel Request (F) 中添加 Side (54)、Symbol (55) 和 TransactTime (60) 在 Order Cancel Reject (9) 中添加 OrderID (37) 在 Order Cancel/Replace Request (G) 中添加 HandlInst (21)、OrdType (40)、Side (54)、Symbol (55) 和 TransactTime (60) |
| 1.0.1 | 04/09/2024 | 在 New Order - Single (D) 的 OrdType (40) 中添加 Market on close (5) 和 Limit on close (B) 为值 在 New Order - Single (D) 的 TimeInForce (59) 中添加 At the Close (7) 为值 |
| 1.0.2 | 08/10/2024 | 在 Execution Report (8) 的 ExecType (150) 中添加 Restated (D) 为值 在 Execution Report (8) 中添加 ExecRestatementReason (378) 在 Execution Report (8) 的 ExecTransType (20) 中添加 Status (3) 为值 在 Order Cancel Reject (9) 中添加 TransactTime (60) |
| 1.0.3 | 14/01/2025 | 在 New Order - Single (D) 的 TimeInForce (59) 中添加 Good Till Crossing (5) 为值 在 New Order - Single (D) 中添加 ClientID (109) |
| 1.0.4 | 03/04/2025 | 从 New Order - Single (D) 的 TimeInForce (59) 中移除 Good Till Crossing (5) 为有效值 在 New Order - Single (D) 中添加 TradingSessionID (336) |
| 1.1.0 | 11/05/2026 | 添加期权 L3 支持: 在 New Order - Single (D) 中添加 SecurityType (167)、MaturityMonthYear (200)、PutOrCall (201)、StrikePrice (202) 和 MaturityDay (205) 以支持单腿期权订单 在 Execution Report (8) 中添加 SecurityType (167)、MaturityMonthYear (200)、PutOrCall (201)、StrikePrice (202)、MaturityDay (205)、OpenClose (77)、MultiLegReportingType (442)、LegRefID (654) 和 NoLegs (555) 在 Order Cancel Request (F) 中添加 SecurityType (167) 以支持取消多腿和期权订单 添加 New Order - Multileg (AB) 消息及 NoLegs (555) 重复组(LegSymbol 600, LegCFICode 608, LegMaturityDate 611, LegStrikePrice 612, LegRatioQty 623, LegSide 624, LegRefID 654, LegPositionEffect 564) 添加 Multileg Order Cancel/Replace Request (AC) 消息 |
| 1.2.0 | 30/07/2026 | 在 New Order - Single (D) 中添加 EffectiveTime (168) 在 Execution Report (8) 中添加 EffectiveTime (168) |