Skip to main content

FIX 规范

机器翻译译自英文(docs.alpaca.markets)本页 84 段已全部译完

版本 1.2.0

支持的消息类型

消息MsgType描述
LogonA由 FIX 客户端发送以认证并建立 FIX 会话
Heartbeat0由客户端或服务器在工作 FIX 会话内按预设间隔发送
Test Request1发送以强制对方应用发送心跳
Resend Request2请求重传遗漏的消息
Reject3对无法处理的消息的响应
Sequence Reset4重置 FIX 会话序列号
Logout5安全断开连接的 FIX 会话
New Order - SingleD提交新的单腿订单(股票或单腿期权)
New Order - MultilegAB提交新的多腿订单(例如期权价差、备兑看涨)
Execution Report8每当订单状态变化时发送
Order Cancel RequestF请求取消订单(单腿或多腿)
Order Cancel/Replace RequestG请求修改单腿订单
Multileg Order Cancel/Replace RequestAC请求修改多腿订单
Order Cancel Reject9如果取消或取消/替换请求(F、G 或 AC)无法执行则发送

消息头

所有消息的头部应包含以下标签:

标签字段必填描述
8BeginStringYFIX.4.2
9BodyLengthY消息体大小(字节)
34MsgSeqNumY消息序列号
35MsgTypeY消息类型,应为本文档支持的类型之一
49SenderCompIDY由 Alpaca 提供,必须出现在所有 FIX 消息中。在所有发给客户端的 FIX 消息中将作为 TargetCompID (56) 返回
52SendingTimeY消息传输的 UTC 时间戳。支持的精度:毫秒、微秒、纳秒
56TargetCompIDY由 Alpaca 提供,必须出现在所有 FIX 消息中。在所有发给客户端的 FIX 消息中将作为 SenderCompID (49) 返回

消息尾部

所有消息的尾部应包含以下标签:

标签字段必填描述
10CheckSumY消息中的最后一个字段,以 <SOH> 结尾。值由 FIX 引擎根据消息数据计算

登录(A)

标签字段必填描述
35MsgTypeYA - 用于登录
98EncryptMethodY0 - 无,唯一接受的值
108HeartBtIntY必须设置为 30 表示 30 秒
141ResetSeqNumFlagNY - 将发送方和目标序列号都重置为 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) 的响应发送。

标签字段必填描述
35MsgTypeY0 - 用于心跳
112TestReqIDN仅在响应 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)。

标签字段必填描述
35MsgTypeY1 - 用于测试请求
112TestReqIDY在结果心跳(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)

发送以请求重传遗漏的消息。

标签字段必填描述
35MsgTypeY2 - 用于重发请求
7BeginSeqNoY请求消息的起始序列号
16EndSeqNoY请求消息的结束序列号

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 服务器拒绝或无法处理时发送。

标签字段必填描述
35MsgTypeY3 - 用于拒绝
45RefSeqNumY被拒绝消息的序列号
58TextN拒绝原因
371RefTagIDN引用的 FIX 字段的标签号
372RefMsgTypeN引用的 FIX 消息的 MsgType (35)
373SessionRejectReasonN拒绝原因代码。
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) 消息。

标签字段必填描述
35MsgTypeY4 - 用于序列重置
36NewSeqNoY新序列号
123GapFillFlagNN - 序列重置以从乱序情况恢复,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 消息作为确认。

标签字段必填描述
35MsgTypeY5 - 用于 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)

由客户端发送以提交新的单腿订单。

标签字段必填描述
35MsgTypeYD - 用于新订单 - 单腿
1AccountY账户号码
11ClOrdIDY客户端分配的订单唯一标识符(不得超过 48 个字符)
12CommissionN从账户持有人处收取的佣金
13CommTypeN1 - 每股
2 - 百分比,5% 应表示为 .05
3 - 绝对值
18ExecInstN1 - 不持有
5 - 持有
21HandlInstY1 - 无经纪商干预的自动执行,唯一接受的值
38OrderQtyN要交易的股数,如果未设置 CashOrderQty (152) 则必填
40OrdTypeY1 - 市价
2 - 限价
3 - 止损
4 - 止损限价
5 - 收盘市价
B - 收盘限价
44PriceN限价 40=2 和止损限价 40=4 订单必填
54SideY1 - 买入
2 - 卖出
55SymbolY股票代码
59TimeInForceY0 - 当日(day)
1 - 撤销前有效(gtc)
2 - 开盘时(opg)
3 - 立即成交或取消(ioc)
4 - 全部成交或取消(fok)
7 - 收盘时(cls)
168EffectiveTimeN订单可执行的 UTC 时间戳。如果省略,订单立即生效。未来的 EffectiveTime 不保证立即路由或执行;适用的交易时段规则和所有其他订单验证仍然适用。支持的精度:秒
60TransactTimeY客户端创建订单的 UTC 时间戳
77OpenCloseN指示交易产生的持仓是开仓还是平仓。
O - 开仓
C - 平仓
99StopPxN止损 40=3 和止损限价 40=4 订单必填
109ClientIDN综合账户的子账户标签
152CashOrderQtyN要交易的名义价值,如果未设置 OrderQty (38) 则必填
336TradingSessionIDN8 - 盘前盘后交易
仅盘前盘后交易订单必填
167SecurityTypeNCS - 普通股(缺席时默认)
OPT - 期权
提交单腿期权订单时必须为 OPT
200MaturityMonthYearN到期月份和年份,格式为 YYYYMM。
当 167=OPT 时必填
201PutOrCallN0 - 看跌
1 - 看涨
当 167=OPT 时必填
202StrikePriceN期权合约的行权价(最多 3 位小数)。
当 167=OPT 时必填
205MaturityDayN到期日(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),用于描述消息的目的。

标签字段必填描述
35MsgTypeY8 - 用于执行报告
1AccountY账户号码
6AvgPxY该订单所有成交的平均价格
11ClOrdIDY客户端分配的订单唯一标识符
12CommissionN成交/部分成交收取的佣金金额
14CumQtyY订单已成交数量
15CurrencyN账户基础货币,默认为 USD
17ExecIDYAlpaca 分配的执行唯一标识符
19ExecRefIDN当 20=1 或 20=2 时,被取消或更正的原执行的 ExecID (17)
20ExecTransTypeY交易类型。
0 - 新建
1 - 取消
2 - 更正
3 - 状态,用于止损触发时的 Restated (D) 消息
30LastMktN该成交的执行市场
31LastPxN该成交的价格
32LastSharesN该成交的数量
37OrderIDYAlpaca 分配的订单唯一标识符
38OrderQtyN提供 CashOrderQty (152) 或 OrderQty (38) 之一
39OrdStatusY标识订单当前状态。
0 - 新建
1 - 部分成交
2 - 已成交
3 - 当日完成
4 - 已取消
5 - 已替换
6 - 待取消
8 - 已拒绝
A - 待新建
C - 已过期
E - 待替换
40OrdTypeN与订单上指定的一致。
1 - 市价
2 - 限价
3 - 止损
4 - 止损限价
5 - 收盘市价
B - 收盘限价
41OrigClOrdIDN取消和取消/替换请求中原始订单的 ClOrdID (11)
44PriceN当订单上指定时发送
54SideY1 - 买入
2 - 卖出
55SymbolY股票代码
58TextN当 150=8 时包含拒绝原因
59TimeInForceN与订单上指定的一致。
0 - 当日(day)
1 - 撤销前有效(gtc)
2 - 开盘时(opg)
3 - 立即成交或取消(ioc)
4 - 全部成交或取消(fok)
7 - 收盘时(cls)
168EffectiveTimeN与订单关联的生效时间。当原始订单上提供了 EffectiveTime (168) 时填充。
60TransactTimeN执行发生时的服务器 UTC 时间,纳秒精度
99StopPxN当订单上指定时发送
150ExecTypeY描述执行报告的类型。
0 - 新建
1 - 部分成交
2 - 成交
3 - 当日完成
4 - 已取消
5 - 已替换
6 - 待取消,Order Cancel Request (F) 的确认
8 - 已拒绝
A - 待新建
C - 已过期
D - 重述,用于止损价格触发
E - 待替换,Order Cancel/Replace Request (G) 的确认
151LeavesQtyY订单未成交数量。当订单关闭(已成交、当日完成、已取消、已替换、已拒绝、已过期)时,值可为 0
152CashOrderQtyN提供 CashOrderQty (152) 或 OrderQty (38) 之一。指定订单上传递的名义金额
378ExecRestatementReasonN当 ExecType (150) = Restated (D) 时填充。
100 - 止损触发,用于止损和止损限价订单
77OpenCloseN执行的持仓效果。
O - 开仓
C - 平仓
多腿订单的腿执行报告中始终填充
167SecurityTypeNCS - 普通股
OPT - 期权
MLEG - 多腿工具(多腿订单的父执行报告)
200MaturityMonthYearN期权执行(167=OPT)时填充
201PutOrCallN期权执行(167=OPT)时填充。
0 - 看跌
1 - 看涨
202StrikePriceN期权执行(167=OPT)时填充
205MaturityDayN期权执行(167=OPT)时填充
442MultiLegReportingTypeN仅在多腿父订单产生的执行报告中设置。
2 - 多腿证券的单条腿(每条腿一份执行报告)
3 - 多腿证券(父级执行报告)
654LegRefIDN此执行报告对应腿的标识符。
在腿执行报告中填充(442=2);与父订单上提供的 LegRefID 匹配
555NoLegsNNoLegs 重复组中的腿数量。
在父执行报告中填充(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) 应为父订单的标的根符号。

标签字段必填描述
35MsgTypeYF - 用于订单取消请求
1AccountY账户号码
11ClOrdIDY客户端分配的取消请求唯一标识符
41OrigClOrdIDY客户端分配的待取消订单的 ClOrdID (11)
54SideY与待取消订单上指定的一致
55SymbolY与待取消订单上指定的一致(多腿为标的根符号)
60TransactTimeY发起取消请求时的 UTC 时间戳
167SecurityTypeN期权订单为 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)。

标签字段必填描述
35MsgTypeYG - 用于订单取消/替换请求
1AccountY账户号码
11ClOrdIDY客户端分配的替换订单唯一标识符(不得超过 48 个字符)
21HandlInstY1 - 无经纪商干预的自动执行,唯一接受的值
38OrderQtyN订单修改后的数量
40OrdTypeY与原始订单上指定的一致
41OrigClOrdIDY客户端分配的待修改订单的 ClOrdID (11)
44PriceN订单修改后的价格
54SideY与原始订单上指定的一致
55SymbolY与原始订单上指定的一致
59TimeInForceN订单修改后的订单有效期
60TransactTimeY发起取消/替换请求时的 UTC 时间戳
99StopPxN订单修改后的止损价

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) 时
标签字段必填描述
35MsgTypeY9 - 用于订单取消失败
1AccountY账户号码
11ClOrdIDY客户端分配的取消或取消/替换请求的唯一标识符
37OrderIDYAlpaca 分配的订单唯一标识符,该订单的取消或取消/替换请求被拒绝
39OrdStatusY应用此取消失败后的订单状态
41OrigClOrdIDY取消或取消/替换请求被拒绝的订单的 ClOrdID (11)
58TextN拒绝原因
60TransactTimeN取消或替换拒绝发生时的服务器 UTC 时间
102CxlRejReasonN标识取消拒绝原因的代码。
0 - 太晚无法取消
1 - 未知订单
2 - 经纪商选项
3 - 订单已处于待取消或待替换状态
434CxlRejResponseToY1 - 对 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)。

标签字段必填描述
35MsgTypeYAB - 用于新订单多腿
1AccountY账户号码
11ClOrdIDY客户端分配的父订单唯一标识符(不得超过 64 个字符)
18ExecInstN1 - 不持有
5 - 持有
21HandlInstY1 - 无经纪商干预的自动执行,唯一接受的值
38OrderQtyY要交易的价差单位数量。每条腿的数量为 OrderQty * LegRatioQty (623)
40OrdTypeY1 - 市价
2 - 限价
3 - 止损
4 - 止损限价
5 - 收盘市价
B - 收盘限价
44PriceN每价差单位的净借方/贷方价格。限价(40=2)和止损限价(40=4)订单必填
55SymbolY所有腿共有的标的根符号(例如 AAPL)
59TimeInForceY0 - 当日(day)
1 - 撤销前有效(gtc)
2 - 开盘时(opg)
3 - 立即成交或取消(ioc)
4 - 全部成交或取消(fok)
7 - 收盘时(cls)
60TransactTimeY客户端创建订单的 UTC 时间戳
99StopPxN止损(40=3)和止损限价(40=4)订单必填
152CashOrderQtyN要交易的的名义价值
167SecurityTypeNMLEG - 多腿工具(推荐)
555NoLegsY订单中的腿数量。必须至少为 2。以下重复组字段重复 NoLegs 次。多腿订单不得在父级提供 Side (54)
→600LegSymbolY每条腿的符号。对于期权腿,为标的根符号(例如 AAPL);对于股票腿,为股票代码
→608LegCFICodeYOC - 期权看涨
OP - 期权看跌
ES - 股票(用于备兑看涨等策略)
→611LegMaturityDateN到期日期,格式为 YYYYMMDD。
期权腿(LegCFICode = OC 或 OP)必填
→612LegStrikePriceN期权腿的行权价。
期权腿(LegCFICode = OC 或 OP)必填
→623LegRatioQtyY该腿相对于父 OrderQty 的比例。必须为正数。每条腿数量 = OrderQty * LegRatioQty
→624LegSideY1 - 买入
2 - 卖出
→654LegRefIDY客户端分配的每条腿标识符,在订单内唯一(最多 32 个字符)。在每条腿执行报告中回传
→564LegPositionEffectNO - 开仓
C - 平仓
与 LegSide 结合以推导每条腿的持仓意图。省略时,意图从 LegSide 推断(买入 → 开仓,卖出 → 平仓)

备注

  • 在多腿订单中,如果父级包含 Side (54)、腿数少于 2 条或缺少任何必需的腿字段,将以 Business Message Reject(代码 9001)拒绝。
  • 每条腿的执行报告会回传订单上提供的 LegRefID (654),因此腿级确认可以与原始腿关联。
  • MOC(40=5)和 LOC(40=B)订单类型等同于提交 OrdType Market / 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)执行报告,并在启用时在父级产生。

标签字段必填描述
35MsgTypeYAC - 用于多腿订单取消/替换请求
1AccountY账户号码
11ClOrdIDY客户端分配的替换订单唯一标识符(不得超过 64 个字符)
21HandlInstY1 - 无经纪商干预的自动执行,唯一接受的值
38OrderQtyN订单修改后的价差数量
40OrdTypeY与原始订单上指定的一致
41OrigClOrdIDY正在修改的父订单的 ClOrdID (11)
44PriceN每价差单位修改后的净价格
55SymbolY标的根符号(与原始订单一致)
59TimeInForceN订单修改后的订单有效期
60TransactTimeY发起取消/替换请求时的 UTC 时间戳
99StopPxN订单修改后的止损价
167SecurityTypeNMLEG - 多腿工具(推荐)
555NoLegsY重新提供完整的腿列表(≥ 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.008/05/2024文档创建
0.1.124/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.212/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.013/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.104/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.208/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.314/01/2025在 New Order - Single (D) 的 TimeInForce (59) 中添加 Good Till Crossing (5) 为值
在 New Order - Single (D) 中添加 ClientID (109)
1.0.403/04/2025从 New Order - Single (D) 的 TimeInForce (59) 中移除 Good Till Crossing (5) 为有效值
在 New Order - Single (D) 中添加 TradingSessionID (336)
1.1.011/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.030/07/2026在 New Order - Single (D) 中添加 EffectiveTime (168) 在 Execution Report (8) 中添加 EffectiveTime (168)