跳转至

cTrader FIX 引擎(参与规则)

简介

范围

本规范旨在作为 cTrader FIX 引擎 API 的实施指南,供软件开发人员使用。

FIX 版本

cTrader 支持 FIX 4.4 版本。 有关此版本的更多信息,请参阅这些 规范。

连接性

连接类型

可以通过互联网、VPN 隧道或与我们在英国的数据中心设施的交叉连接来连接 cTrader 的 FIX 引擎。 联系我们以获取更多详细信息。

序列号重置

FIX 会话的所有方在建立 FIX 会话时都应重置序列号。 请参阅登录消息。

消息

如 FIX 协议中定义的,cTrader FIX 服务器使用两个不同的数据级别(系统和应用程序)。 请注意,这是支持必要工作流程所需的最小消息集。 随着业务需求和 FIX 标准的发展,它可能会随时间而变化。

cTrader FIX 引擎

系统消息

  • Heartbeat(客户端 ↔ cTrader)
  • Test Request(客户端 ↔ cTrader)
  • Logon(客户端 → cTrader)
  • Logout(客户端 → cTrader)
  • Resend Request(客户端 ↔ cTrader)
  • Reject(客户端 ↔ cTrader)
  • Sequence Reset(客户端 ↔ cTrader)

应用程序消息

  • Market Data Request(客户端 → cTrader)
  • Market Data Snapshot/Full Refresh(客户端 ← cTrader)
  • Market Data Incremental Refresh(客户端 ← cTrader)
  • New Order Single(客户端 → cTrader)
  • Order Status Request(客户端 → cTrader)
  • Order Mass Status Request(客户端 → cTrader)
  • Execution Report(客户端 ← cTrader)
  • Business Message Reject(客户端 ← cTrader)
  • Request for Positions(客户端 → cTrader)
  • Position Report(客户端 ← cTrader)
  • Order Cancel Request(客户端 → cTrader)
  • Order Cancel Reject(客户端 ← cTrader)
  • Order Cancel/Replace Request(客户端 → cTrader)
  • Security List Request(客户端 → cTrader)
  • Security List(客户端 ← cTrader)

标准头

每个管理或应用程序消息前都有一个标准头。 标头用于识别消息类型、长度、目的地、序列号、发起点和时间。

发送给cTrader的所有消息都应包含以下字段的标准标头:

Tag 字段名称 必填 值 FIX格式 备注
8 BeginString 是 FIX.4.4 String 始终未加密,必须是消息中的第一个字段。
9 BodyLength 是 任何有效值 Integer 消息正文长度。 始终未加密,必须是消息中的第二个字段。
35 MsgType 是 A String 消息类型。 始终未加密,必须是消息中的第三个字段。
49 SenderCompID 是 任何有效值 String 交易方ID,格式如下:<Environment>.<BrokerUID>,.其中Environment是服务器的确定,如demo或live;BrokerUID由cTrader提供,Trader Login是交易者账户的数字标识符。
56 TargetCompID 是 CSERVER String 消息目标。 The valid value is CSERVER.
57 TargetSubID 是 QUOTE或TRADE String 附加会话限定符。 可能的值为QUOTE和TRADE。
50 SenderSubID 否 任何有效值 String 用于识别特定消息发起者的指定值。 如果TargetSubID=QUOTE,则必须设置为QUOTE。
34 MsgSeqNum 是 1 Integer 消息的序列号。
52 SendingTime 是 20131129-15:40:08.155 UTCTimestamp 消息传输时间,始终以UTC(协调世界时,也称为GMT)表示。

标准尾部

每条消息(管理或应用)都以标准尾部结束。 尾部用于分隔消息,包含CheckSum(tag=10)值的三位数表示。

Tag 字段名称 必填 值 FIX格式 备注
10 CheckSum 是 054 String 简单的三字节校验和。 始终是消息中的最后一个字段(例如,用作),尾随的<SOH>作为消息结束分隔符。 定义为三个字符(始终未加密)。

会话消息

Heartbeat (MsgType(35)=0)

心跳消息由cTrader和客户端应用程序发送,以确认连接处于活动状态。

提供商的客户端应用程序以登录消息中HeartBtInt(tag=108)字段定义的间隔发送重复心跳,或作为测试请求消息的响应。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
112 TestReqID 否 任何有效值 String 如果心跳是测试请求消息的结果,则需要TestReqID。
Standard Trailer 是

Test Request (MsgType(35)=1)

它强制请求接收方发送心跳。 接收系统从发送包含TestReqID的心跳消息作为响应。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
112 TestReqID 是 任何有效值 String 心跳消息ID。 TestReqID应该是递增的。
Standard Trailer 是

Logon (bidirectional) (MsgType(35)=A)

登录消息从客户端应用程序发送以开始cTrader FIX会话,cTrader向客户端应用程序发送响应。 一旦登录完成,报价和交易流程就可以在会话的生命周期内进行。

如果cTrader收到无效的登录消息(字段无效),cTrader会发送登出消息作为响应。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
98 EncryptMethod 是 0 Integer 定义消息加密方案。 目前仅支持传输级安全性。 有效值为0 = NONE_OTHER(不使用加密)。
108 HeartBtInt 是 任何有效值 Integer 心跳间隔(秒)。 该值在config.properties文件(客户端)中设置为SERVER.POLLING.INTERVAL。 默认间隔值为30秒。 如果HeartBtInt设置为0,则不需要心跳消息。
141 ResetSeqNumFlag 否 Y Boolean FIX会话的所有方都应重置序列号。 有效值为Y(重置)。
553 Username 否 任何有效值 String 数字用户ID。 该用户与SenderCompID值(用户的组织,tag=49)相关联。
554 Password 否 任何有效值 String 用户密码。
Standard Trailer 是

注意

Username字段(tag=553)必须包含数字交易者登录值,而SenderCompID(tag=49)必须包含环境、BrokerUID和以点分隔的交易者登录(例如,live.theBroker.12345)。

请参见下面的登录消息示例。

请求:

8=FIX.4.4|9=126|35=A|49=live.theBroker.12345|56=CSERVER|34=1|52=20170117-08:03:04|57=TRADE|50=any_string|98=0|108=30|141=Y|553=12345|554=passw0rd!|10=131|

响应(成功):

8=FIX.4.4|9=106|35=A|34=1|49=CSERVER|50=TRADE|52=20170117-08:03:04.509|56=live.theBroker.12345|57=any_string|98=0|108=30|141=Y|10=066|

响应(失败):

8=FIX.4.4|9=109|35=5|34=1|49=CSERVER|50=TRADE|52=20170117-08:03:04.509|56=live.theBroker.12345|58=InternalError: RET_INVALID_DATA|10=033|

Logout (MsgType(35)=5)

登出消息从客户端应用程序发送,请求结束与cTrader的会话,并作为cTrader的响应。 当市场参与者向cTrader发送登出消息时,会发生会话登出。 在终止会话之前,cTrader将取消所有仍在主动向请求方流出的价格。 如果cTrader收到无效的登录消息(字段无效),cTrader会发送登出消息作为响应,并在Text(tag=58)字段中提供错误详情。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
58 Text 否 任何有效值 String 登录拒绝详情。 仅用于cTrader到客户端的消息,作为无效登录消息的响应。
Standard Trailer 是

请参阅下面的登出消息示例。

请求:

8=FIX.4.4|9=86|35=5|49=live.theBroker.12345|56=CSERVER|34=161|52=20170117-09:22:33|57=TRADE|50=any_string|10=102|

响应:

8=FIX.4.4|9=90|35=5|34=160|49=CSERVER|50=TRADE|52=20170117-09:22:33.077|56=live.theBroker.12345|57=any_string|10=044|

Resend Request (MsgType(35)=2)

入站/出站消息用于请求重新发送一条或多条消息,通常在检测到序列编号存在差距时使用。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
7 BeginSeqNo 是 任何有效值 Integer 要重新发送的范围内第一条记录的消息序列号。
16 EndSeqNo 是 任何有效值 Integer 要重新发送的范围内最后一条记录的消息序列号。
Standard Trailer 是

Reject (bidirectional) (MsgType(35)=3)

当收到的消息由于违反会话级规则而无法处理时发送。 被拒绝的消息必须被记录,并且必须对传入的序列号进行递增。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
45 RefSeqNum 是 任何有效值 SeqNum 引用消息的序列号。
58 Text 否 任何有效值 String 自由格式的文本字符串。
354 EncodedTextLen 否 任何有效值 长度 EncodedText(非ASCII字符)字段的字节长度。
355 EncodedText 否 任何有效值 数据 使用MessageEncoding(标签=347)字段(来自标准头)中指定的格式编码的Text(标签=58)字段的表示。 如果使用ASCII表示,也应在Text(标签=58)字段中指定。
371 RefTagID 否 任何有效值 Integer 引发消息拒绝的FIX字段的标签号。
372 RefMsgType 否 任何有效值 String 引用的FIX消息的MsgType(标签=35)。
373 SessionRejectReason 否 任何有效值 Integer 拒绝的编码原因。 有效值为:
0 = 无效的标签号
1 = 缺少必需的标签
2 = 此消息类型未定义标签
3 = 未定义的标签
4 = 指定标签没有值
5 = 此标签的值超出范围
6 = 值的数据格式不正确
7 = 解密问题
8 = 签名错误
9 = CompID错误
10 = SendingTime精度错误
11 = MsgType无效
12 = XML验证错误
13 = 标签重复
14 = 指定的标签顺序不正确
15 = 重复组字段顺序不正确
16 = 重复组的NumInGroup计数不正确
17 = 非数据值中包含字段分隔符(SOH字符)
Standard Trailer 是

Sequence Reset (MsgType(35)=4)

入站/出站消息不应在应用程序级别使用。 序列重置消息只能增加序列号。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
123 GapFillFlag 否 Yes或No String 表示序列重置消息正在替换不会重新发送的管理或应用程序消息。
36 NewSeqNo 是 1 Integer 新的序列号。
Standard Trailer 是

应用程序消息

Market Data Request (MsgType(35)=V)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
262 MDReqID 是 任何有效值 String 唯一的报价请求ID。 新订阅使用新ID,取消订阅时使用与之前相同的ID。
263 SubscriptionRequestType 是 1或2 字符 1 = 快照加更新(订阅)。
2 = 禁用先前的快照加更新请求(取消订阅)。
264 MarketDepth 是 0或1 Integer 将提供完整订单簿。
0 = 深度订阅
1 = 现货订阅
265 MDUpdateType 是 任何有效值 Integer 仅支持增量刷新。
267 NoMDEntryTypes 是 2 Integer 始终设置为2(将发送买卖双方)。
269 MDEntryType 是 0或1 字符 此重复组包含请求者希望接收的所有类型的市场数据条目列表。
0 = Bid
1 = Offer
146 NoRelatedSym 是 任何有效值 Integer 请求的符号数量。
55 Symbol 是 任何有效值 多头 工具标识符由Spotware提供。
Standard Trailer 是

请参阅下面的市场数据请求消息示例。

对于现货

请求:

8=FIX.4.4|9=131|35=V|49=live.theBroker.12345|56=CSERVER|34=3|52=20170117-10:26:54|50=QUOTE|262=876316403|263=1|264=1|265=1|146=1|55=1|267=2|269=0|269=1|10=094|

响应:

8=FIX.4.4|9=134|35=W|34=2|49=CSERVER|50=QUOTE|52=20170117-10:26:54.630|56=live.theBroker.12345|57=any_string|55=1|268=2|269=0|270=1.06625|269=1|270=1.0663|10=118|

对于深度

请求:

8=FIX.4.4|9=131|35=V|49=live.theBroker.12345|56=CSERVER|34=2|52=20170117-11:13:44|50=QUOTE|262=876316411|263=1|264=0|265=1|146=1|55=1|267=2|269=0|269=1|10=087|

响应:

8=FIX.4.4|9=310|35=W|34=2|49=CSERVER|50=QUOTE|52=20180925-12:05:28.284|56=live.theBroker.12345|57=Quote|55=1|268=6|269=1|270=1.11132|271=3000000|278=16|269=1|270=1.11134|271=5000000|278=17|269=1|270=1.11133|271=3000000|278=15|269=0|270=1.1112|271=2000000|278=12|269=0|270=1.11121|271=1000000|278=13|269=0|270=1.11122|271=3000000|278=14|10=247|
8=FIX.4.4|9=693|35=X|34=2|49=CSERVER|50=QUOTE|52=20170117-11:13:44.461|56=live.theBroker.12345|57=any_string|268=12|279=0|269=1|278=7475|55=1|270=1.0691|271=2000000|279=0|269=1|278=7476|55=1|270=1.06911|271=3000000|279=0|269=1|278=7484|55=1|270=1.06931|271=34579000|279=0|269=1|278=7485|55=1|270=1.06908|271=1000000|279=0|269=1|278=7483|55=1|270=1.06906|271=500000|279=0|269=1|278=7482|55=1|270=1.06907|271=500000|279=0|269=1|278=7488|55=1|270=1.06909|271=3000000|279=0|269=0|278=7468|55=1|270=1.06898|271=500000|279=0|269=0|278=7467|55=1|270=1.06874|271=32371000|279=0|269=0|278=7457|55=1|270=1.06899|271=1000000|279=0|269=0|278=7478|55=1|270=1.06896|271=7000000|279=0|269=0|278=7477|55=1|270=1.06897|271=1500000|10=111|
8=FIX.4.4|9=376|35=X|34=3|49=CSERVER|50=QUOTE|52=20170117-11:13:44.555|56=live.theBroker.12345|57=any_string|268=8|279=0|269=0|278=7491|55=1|270=1.06897|271=1000000|279=0|269=0|278=7490|55=1|270=1.06898|271=1000000|279=0|269=0|278=7489|55=1|270=1.06874|271=32373000|279=0|269=1|278=7496|55=1|270=1.06931|271=34580000|279=2|278=7477|55=1|279=2|278=7468|55=1|279=2|278=7467|55=1|279=2|278=7484|55=1|10=192|

Market Data Snapshot/Full Refresh (MsgType(35)=W)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
262 MDReqID 是 任何有效值 String 先前发送的市场数据请求的ID。
55 Symbol 是 任何有效值 多头 工具标识符由Spotware提供。
268 NoMDEntries 是 任何有效值 Integer 后续条目的数量。
269 MDEntryType 否 0或1 字符 有效值为:
0 = 买入
1 = 卖出
仅当NoMDEntries(标签=268)> 0时才需要。
299 QuoteEntryID 否 任何有效值 String 作为QuoteSet一部分的报价的唯一标识。
270 MDEntryPx 否 1.2345 价格 市场数据条目的价格。 仅当 NoMDEntries (标签=268) > 0 时需要。
271 MDEntrySize 否 500000 交易量 市场数据条目的交易量。 仅当 NoMDEntries (标签=268) > 0 时需要。
278 MDEntryID 否 任何有效值 String 唯一的市场数据条目标识符。
Standard Trailer 是

Market Data Incremental Refresh (MsgType(35)=X)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
262 MDReqID 是 任何有效值 String 先前发送的市场数据请求的ID。
268 NoMDEntries 是 任何有效值 Integer 后续条目的数量。 此重复组包含请求者希望接收的所有类型市场数据条目的列表。
279 MDUpdateAction 是 0 或 2 字符 市场数据更新操作的类型。 有效值为:
0 = 新建
2 = 删除
269 MDEntryType 否 0或1 字符 有效值为:
0 = 买入
1 = 卖出
278 MDEntryID 是 任何有效值 String 市场数据条目的 ID。
55 Symbol 是 任何有效值 多头 工具标识符由Spotware提供。
270 MDEntryPx 否 1.2345 价格 仅当 MDUpdateAction (标签=279) = 0 时需要。
271 MDEntrySize 否 10000 加倍 仅当 MDUpdateAction (标签=279) = 0 时需要。
Standard Trailer 是

New Order Single (MsgType(35)=D)

新单一订单消息具有以下格式。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
11 ClOrdID 是 任何有效值 String 客户端分配的订单唯一标识符。
55 Symbol 是 任何有效值 多头 工具标识符由Spotware提供。
54 Side 是 1或2 Integer 1 = Buy
2 = Sell
60 TransactTime 是 任何有效值 时间戳 客户端生成的请求时间。
38 OrderQty 是 任何有效值 数量 订购的股票数量。 这代表股票的股数,或根据常规惯例,期权、期货、可转换债券等的合约数量。 最大精度为 0.01。 在 FIX 4.2 之前,此字段的类型为"整数"。
40 OrdType 是 1、2 或 3 字符 1 = 市价单,订单将按立即或取消(IOC)方案处理(TimeInForce,标签=59)。
2 = 限价单,订单将按取消前有效(GTC)方案处理(TimeInForce,标签=59)。
3 = 止损单,订单将按取消前有效(GTC)方案处理(TimeInForce,标签=59)。
44 Price 否 任何有效值 价格 客户接受的最差客户价格。 仅当 OrdType (标签=40) = 2 时需要,在这种情况下,除非能达到此价格,否则订单不会成交。
99 StopPx 否 任何有效值 价格 触发止损单的价格。 仅当 OrdType (标签=40) = 3 时需要,在这种情况下,除非能达到此价格,否则订单不会成交。
59 TimeInForce 否 1, 3 or 6 String 已弃用,此值将被忽略。 TimeInForce 将根据 OrdType (标签=40) 和 ExpireTime (标签=126) 自动检测:
1 = 取消前有效(GTC),仅用于限价单和止损单(OrdType,标签=40),且仅当未定义 ExpireTime (标签=126) 时使用。
3 = 立即或取消(IOC),仅用于市价单(OrdType,标签=40)。
6 = 指定日期前有效(GTD),仅用于限价单和止损单(OrdType,标签=40),且仅当定义了 ExpireTime (标签=126) 时使用。
126 ExpireTime 否 20140215-07:24:55 时间戳 过期时间,格式为"YYYYMMDD-HH:MM:SS"。 如果指定,订单将按 GTD 方案处理(TimeInForce: GTD)。
721 PosMaintRptID 否 任何有效值 String 应放置此订单的头寸 ID。 如果未设置,将创建新头寸,并在执行报告消息中返回其 ID。 只能为对冲账户指定。
494 Designation 否 任何有效值 String 自定义订单标签。
Standard Trailer 是

请参阅下面的新单一订单消息示例。

新建头寸的市价单

请求:

8=FIX.4.4|9=143|35=D|49=live.theBroker.12345|56=CSERVER|34=77|52=20170117-10:02:14|50=any_string|57=TRADE|11=876316397|55=1|54=1|60=20170117-10:02:14|40=1|38=10000|10=010|

响应:

8=FIX.4.4|9=197|35=8|34=77|49=CSERVER|50=TRADE|52=20170117-10:02:14.720|56=live.theBroker.12345|57=any_string|11=876316397|14=0|37=101|38=10000|39=0|40=1|54=1|55=1|59=3|60=20170117-10:02:14.591|150=0|151=10000|721=101|10=149|
8=FIX.4.4|9=206|35=8|34=78|49=CSERVER|50=TRADE|52=20170117-10:02:15.045|56=live.theBroker.12345|57=any_string|6=1.0674|11=876316397|14=10000|32=10000|37=101|38=10000|39=2|40=1|54=1|55=1|59=3|60=20170117-10:02:14.963|150=F|151=0|721=101|10=077|

现有头寸的市价单

请求:

8=FIX.4.4|9=151|35=D|49=live.theBroker.12345|56=CSERVER|34=80|52=20170117-10:02:55|50=any_string|57=TRADE|11=876316398|55=1|54=1|60=20170117-10:02:55|40=1|38=10000|721=101|10=120|

响应:

8=FIX.4.4|9=197|35=8|34=80|49=CSERVER|50=TRADE|52=20170117-10:02:56.003|56=live.theBroker.12345|57=any_string|11=876316398|14=0|37=102|38=10000|39=0|40=1|54=1|55=1|59=3|60=20170117-10:02:55.984|150=0|151=10000|721=101|10=156|
8=FIX.4.4|9=207|35=8|34=81|49=CSERVER|50=TRADE|52=20170117-10:02:56.239|56=live.theBroker.12345|57=any_string|6=1.06735|11=876316398|14=10000|32=10000|37=102|38=10000|39=2|40=1|54=1|55=1|59=3|60=20170117-10:02:56.210|150=F|151=0|721=101|10=127

现有头寸的限价单

请求:

8=FIX.4.4|9=162|35=D|49=live.theBroker.12345|56=CSERVER|34=89|52=20170117-10:06:22|50=any_string|57=TRADE|11=876316400|55=1|54=2|60=20170117-10:06:22|40=2|44=1.07162|38=50000|721=101|10=122|

响应:

8=FIX.4.4|9=208|35=8|34=90|49=CSERVER|50=TRADE|52=20170117-10:06:22.466|56=live.theBroker.12345|57=any_string|11=876316400|14=0|37=104|38=50000|39=0|40=2|44=1.07162|54=2|55=1|59=1|60=20170117-10:06:22.436|150=0|151=50000|721=101|10=149|

新建头寸的止损单

请求:

8=FIX.4.4|9=153|35=D|49=live.theBroker.12345|56=CSERVER|34=9|52=20170117-12:10:48|57=TRADE|50=any_string|11=876316418|55=1|54=1|60=20170117-12:10:48|40=3|38=50000|99=1.07148|10=249|

响应:

8=FIX.4.4|9=207|35=8|34=8|49=CSERVER|50=TRADE|52=20170117-12:10:48.400|56=live.theBroker.12345|57=any_string|11=876316418|14=0|37=205|38=50000|39=0|40=3|54=1|55=1|59=1|60=20170117-12:10:48.362|99=1.07148|150=0|151=50000|721=202|10=122|

Order Status Request (MsgType(35)=H)

订单状态请求消息由机构用于从交易者生成订单状态消息。 为了正确交互,所有订单都必须有唯一的客户订单标识符(ClOrdID),这一点非常重要。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
11 ClOrdID 是 任何有效值 String 客户端分配的订单唯一标识符。
54 Side 否 1或2 Integer 1 = Buy
2 = Sell
Standard Trailer 是

请参阅下面的订单状态请求消息示例。

请求:

8=FIX.4.4|9=98|35=H|49=live.theBroker.12345|56=CSERVER|34=95|52=20170117-10:08:31|50=any_string|57=TRADE|11=876316400|10=191|

响应:

8=FIX.4.4|9=208|35=8|34=95|49=CSERVER|50=TRADE|52=20170117-10:08:31.819|56=live.theBroker.12345|57=any_string|11=876316400|14=0|37=104|38=50000|39=0|40=2|44=1.07162|54=2|55=1|59=1|60=20170117-10:06:22.436|150=0|151=50000|721=101|10=158|

Order Mass Status Request (MsgType(35)=AF)

订单批量状态请求消息请求与请求中指定的条件匹配的订单状态。 答复将以多个执行报告消息的形式返回(每个订单一个),或者如果未找到订单,则以业务消息拒绝消息的形式返回。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
584 MassStatusReqID 是 任何有效值 String 客户端分配的批量状态请求的唯一 ID。
585 MassStatusReqType 是 任何有效值 Integer 7 = 所有订单的状态。
目前仅支持值 7。
225 IssueDate 否 任何有效值 String 如果设置,响应将仅包含在此日期之前创建的订单。
Standard Trailer 是

请参见下面的订单批量状态请求消息示例。

请求:

8=FIX.4.4|9=117|35=AF|34=3|49=live.theBroker.12345|52=20170404-07:20:55.325|56=CSERVER|57=TRADE|225=20170404-07:20:44.582|584=mZzEY|585=7|10=065|

响应:

8=FIX.4.4|9=199|35=8|34=13|49=CSERVER|50=TRADE|52=20170404-07:20:55.333|56=live.theBroker.12345|14=0|37=635|38=100000|39=0|40=2|44=1.35265|54=2|55=1|59=1|60=20170404-07:20:44.582|150=I|151=100000|584=mZzEY|721=617|911=1|10=152|

Execution Report (MsgType(35)=8)

已接受订单的执行报告消息格式如下。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
37 OrderID 是 任何有效值 String cTrader 订单 ID。
11 ClOrdID 否 任何有效值 String 客户端分配的订单唯一标识符。
911 TotNumReports 否 任何有效值 Integer 响应订单批量状态请求消息返回的报告总数。
150 ExecType 是 任何有效值 字符 0 = New
4 = Canceled
5 = Replace
8 = Rejected
C = Expired
F = Trade
I = Order Status
39 OrdStatus 是 任何有效值 字符 0 = 新建
1 = 部分成交
2 = 全部成交
8 = 拒绝
4 = 已取消 (当订单部分成交时,返回"已取消"表示 (标签=151),LeavesQty 已取消且不会继续成交)。
C = 已过期
55 Symbol 否 任何有效值 多头 工具标识符由Spotware提供。
54 Side 否 1或2 Integer 1 = 买入
2 = 卖出
60 TransactTime 否 任何有效值 时间戳 执行报告消息所代表的交易执行时间 (UTC)。
6 AvgPx 否 任何有效值 Integer 成交价格。 对于 IOC 或 GTD 订单,这是成交订单的成交量加权平均价 (VWAP)。
38 OrderQty 否 任何有效值 数量 这代表股票的股数,或根据常规惯例,期权、期货、可转换债券等的合约数量。 在 FIX 4.2 之前,此字段的类型为"整数"。
151 LeavesQty 否 任何有效值 数量 仍待成交的订单数量。 可能的值介于 0 (全部成交) 和 OrderQty (部分成交) 之间。
14 CumQty 否 任何有效值 数量 已成交的订单总数。
32 LastQty 否 任何有效值 数量 本次(最后)成交的买入/卖出订单数量。
40 OrdType 否 1或2 字符 1 = 市价
2 = 限价
44 Price 否 任何有效值 价格 如果在新单消息中提供,则在此执行报告消息中回显。
99 StopPx 否 任何有效值 价格 如果在新单消息中提供,则在此执行报告消息中回显。
59 TimeInForce 否 1、3 或 6 String 1 = 取消前有效 (GTC)
3 = 立即成交或取消 (IOC)
6 = 指定日期前有效 (GTD)
126 ExpireTime 否 20140215-07:24:55 时间戳 如果在新单消息中提供,则在此执行报告消息中回显。
58 Text 否 任何有效值 String 在可能的情况下,消息将解释执行报告。
103 OrdRejReason 否 0 Integer 0 = OrdRejReason.BROKER_EXCHANGE_OPTION
721 PosMaintRptID 否 任何有效值 String 头寸 ID。
494 Designation 否 任何有效值 String 客户的自定义订单标签。
584 MassStatusReqID 否 任何有效值 String 客户端分配的批量状态请求的唯一 ID。
1000 AbsoluteTP 否 任何有效值 价格 触发止盈的绝对价格。
1001 RelativeTP 否 任何有效值 价格 触发止盈的入场价格距离(以点为单位)。
1002 AbsoluteSL 否 任何有效值 价格 触发止损的绝对价格。
1003 RelativeSL 否 任何有效值 价格 触发止损的入场价格距离(以点为单位)。
1004 TrailingSL 否 N 或 Y Boolean 表示止损是否为追踪止损。
N = 止损不是追踪止损。
Y = 止损是追踪止损。
1005 TriggerMethodSL 否 任何有效值 Integer 指示的止损触发方法。
1 = 止损将由交易方触发。
2 = 止损将由相反方触发(买入头寸由卖出价触发,卖出头寸由买入价触发)。
3 = 止损将在交易方连续两次报价后触发。
4 = 止损将在相反方连续两次报价后触发(买入头寸在第二次卖出价报价后触发,卖出头寸在第二次买入价报价后触发)。
1006 GuaranteedSL 否 N 或 Y Boolean 表示止损是否为保价止损。
N = 止损不是保价止损。
Y = 止损是保价止损。
Standard Trailer 是

请参阅本指南末尾的新单一订单示例。

Business Message Reject (MsgType(35)=j)

当系统无法处理订阅请求或无法执行订单时,会发送此消息类型。

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
45 RefSeqNum 否 任何有效值 Integer 被拒绝消息的 MsgSeqNum(标签=34)。
372 RefMsgType 否 任何有效值 String 被引用的 FIX 消息的 MsgType(标签=35)。
379 BusinessRejectRefID 否 任何有效值 String 被引用消息中业务级 ID 字段的值。 除非未指定相应的 ID 字段,否则为必填项。
380 BusinessRejectReason 是 0 Integer 用于识别业务消息拒绝原因的代码。
0 = 其他
58 Text 否 任何有效值 String 尽可能解释拒绝原因的消息。
Standard Trailer 是

请参阅下面的业务消息拒绝示例。

8=FIX.4.4|9=149|35=j|34=2|49=CSERVER|52=20170105-06:36:00.912|56=live.theBroker.12345|57=any_string|58=Message to explain reason for rejection|379=u4Jr7Rr5t2VS7HSP|380=0|10=123|

Request for Positions (MsgType(35)=AN)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
710 PosReqID 是 任何有效值 String 唯一请求 ID(由客户端设置)。
721 PosMaintRptID 否 任何有效值 String 要请求的头寸 ID。 如果未设置,将返回所有开仓头寸。
Standard Trailer 是

请参阅下面的头寸请求消息示例。

请求:

8=FIX.4.4|9=100|35=AN|49=live.theBroker.12345|56=CSERVER|34=99|52=20170117-10:09:54|50=any_string|57=TRADE|710=876316401|10=103|

响应:

8=FIX.4.4|9=163|35=AP|34=98|49=CSERVER|50=TRADE|52=20170117-10:09:54.076|56=live.theBroker.12345|57=any_string|55=1|710=876316401|721=101|727=1|728=0|730=1.06671|702=1|704=0|705=30000|10=182|

Position Report (MsgType(35)=AP)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
710 PosReqID 是 任何有效值 String 头寸请求消息的 ID。
721 PosMaintRptID 否 任何有效值 String 头寸 ID,如果 PosReqResult(标签=728)不是 VALID_REQUEST,则不设置。
727 TotalNumPosReports 是 任何有效值 String 当 PosReqResult(标签=728)为 VALID_REQUEST 时,序列中头寸报告的总数,否则为 0。
728 PosReqResult 是 0 或 2 String 0 = 有效请求
2 = 未找到符合条件的开仓头寸。
55 Symbol 否 任何有效值 String 当前头寸报告所针对的交易品种。 如果 PosReqResult(标签=728)不是 VALID_REQUEST,则不设置。
702 NoPositions 否 1 String 当 PosReqResult(标签=728)为 VALID_REQUEST 时为 1,否则不设置。
704 LongQty 否 任何有效值 String 买入交易方的开仓量,卖出交易方为 0。 如果 PosReqResult(标签=728)不是 VALID_REQUEST,则不设置。
705 ShortQty 否 任何有效值 String 卖出交易方的开仓量,买入交易方为 0。 如果 PosReqResult(标签=728)不是 VALID_REQUEST,则不设置。
730 SettlPrice 否 任何有效值 String 当前头寸报告中开仓量的平均价格。
1000 AbsoluteTP 否 任何有效值 价格 触发止盈的绝对价格。
1002 AbsoluteSL 否 任何有效值 价格 触发止损的绝对价格。
1004 TrailingSL 否 任何有效值 Boolean 表示止损是否为追踪止损。
N = 止损不是追踪止损。
Y = 止损是追踪止损。
1005 TriggerMethodSL 否 任何有效值 Integer 指示的止损触发方法。
1 = 止损将由交易方触发。
2 = 止损将由相反方触发(买入头寸由卖出价触发,卖出头寸由买入价触发)。
3 = 止损将在交易方连续两次报价后触发。
4 = 止损将在相反方连续两次报价后触发(买入头寸在第二次卖出价报价后触发,卖出头寸在第二次买入价报价后触发)。
1006 GuaranteedSL 否 任何有效值 Boolean 表示止损是否为保价止损。
N = 止损不是保价止损。
Y = 止损是保价止损。
Standard Trailer 是

Order Cancel Request (MsgType(35)=F)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
41 OrigClOrdID 是 任何有效值 String 客户端分配的待取消订单的唯一标识符。
37 OrderID 否 任何有效值 String cServer 返回的订单唯一 ID。
11 ClOrdID 是 任何有效值 String 客户端分配的取消请求的唯一 ID。
Standard Trailer 是

请参见下方订单取消请求消息示例。

请求:

8=FIX.4.4|9=115|35=F|34=2|49=live.theBroker.12345|50=Trade|52=20170721-13:41:21.694|56=CSERVER|57=TRADE|11=jR8dBPcZEQa9|41=n9Tm8x1AavO5|10=182|

响应(成功):

8=FIX.4.4|9=221|35=8|34=3|49=CSERVER|50=TRADE|52=20170721-13:41:21.784|56=live.theBroker.12345|57=Trade|11=jR8dBPcZEQa9|14=0|37=641|38=100000|39=4|40=2|41=n9Tm8x1AavO5|44=1.499|54=1|55=1|59=1|60=20170721-13:41:21.760|150=4|151=100000|721=624|10=180|

响应(失败):

8=FIX.4.4|9=174|35=j|34=3|49=CSERVER|50=TRADE|52=20170721-13:41:21.856|56=live.theBroker.12345|57=Trade|58=ORDER_NOT_FOUND:Order with clientOrderId=n9Tm8x1AavO5 not found.|379=jR8dBPcZEQa9|380=0|10=075|

Order Cancel Reject (MsgType(35)=9)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
37 OrderID 是 任何有效值 String 系统无法取消的订单的唯一标识符。
11 ClOrdID 是 任何有效值 String 订单取消请求的唯一标识符。
41 OrigClOrdID 否 任何有效值 String 客户端分配的尝试取消的订单的唯一标识符。
39 OrdStatus 是 任何有效值 字符 0 = 新订单
1 = 部分成交
2 = 全部成交
8 = 被拒绝
4 = 已取消(当订单部分成交时返回"已取消",表示(tag=151)LeavesQty 已取消且不会继续成交)。
C = 已过期
434 CxlRejResponseTo 是 1或2 字符 1 = 拒绝取消订单。
2 = 拒绝来自其他终端的修改订单。
58 Text 否 任何有效值 String 订单正在执行中。
Standard Trailer 是

请参见下方订单取消拒绝消息示例。

响应:

8=FIX.4.4|9=156|35=9|34=3|49=CSERVER|50=TRADE|52=20181024-12:35:02.896|56=live.theBroker.12345|57=Trade|11=gBljx7YOg5jY|37=629|39=0|41=FdXLfS0tTyUL|58=Order is under execution|434=1|10=109|

Order Cancel/Replace Request (MsgType(35)=G)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
41 OrigClOrdID 是 Any valid value String 客户端分配的待修改订单的唯一标识符。
37 OrderID 否 任何有效值 String 服务器分配的待修改原始订单的唯一 ID。 推荐使用的方法。
11 ClOrdID 是 任何有效值 String 客户端分配的修改请求的唯一 ID。
38 OrderQty 是 任何有效值 数量 用于替换旧值的现有或新指定数量。
44 Price 否 任何有效值 价格 用于替换旧值的现有或新指定限价。 仅对限价单有效。
99 StopPx 否 任何有效值 价格 用于替换旧值的现有或新指定止损价。 仅对止损单有效。
126 ExpireTime 否 20140215-07:24:55 时间戳 现有或新指定的到期时间。 仅对挂单有效。
Standard Trailer 是

请参见下方订单取消/替换请求消息示例。

请求:

8=FIX.4.4|9=123|35=G|34=3|49=live.theBroker.12345|50=Trade|52=20170721-13:42:17.680|56=CSERVER|57=TRADE|11=Is03AvsknNYK|38=5000|41=n9Tm8x1AavO5|44=1.1|10=010|

响应(成功):

8=FIX.4.4|9=192|35=8|34=3|49=CSERVER|50=TRADE|52=20170721-13:42:18.784|56=live.theBroker.12345|57=Trade|11=Is03AvsknNYK|14=0|37=629|38=5000|39=0|40=2|44=1.1|54=1|55=1|59=1|60=20170721-13:42:18.760|150=5|151=5000|721=624|10=150|

响应(失败):

8=FIX.4.4|9=171|35=j|34=3|49=CSERVER|50=TRADE|52=20170721-13:42:18.784|56=live.theBroker.12345|57=Trade|58=ORDER_NOT_FOUND:Order with orderId:4429421711699105367 isn't found|379=NXek3EzJvMme|380=0|10=245|

Market Data Request Reject (MsgType(35)=Y)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
262 MDReqID 是 任何有效值 String 必须引用请求的 MDReqID(tag=262)。
281 MDReqRejReason 否 任何有效值 Integer 0 = 未知交易品种
4 = 不支持的 SubscriptionRequestType(tag=263)
5 = 不支持的 MarketDepth(tag=264)
Standard Trailer 是

请参见下方市场数据请求拒绝消息示例。

请求:

8=FIX.4.4|9=148|35=V|34=2|49=live.theBroker.12345|50=Quote|52=20170920-09:52:13.032|56=CSERVER|57=QUOTE|262=CS8260:sXlXex|263=1|264=0|265=1|146=1|55=CS8260|267=2|269=0|269=1|10=129|

拒绝:

8=FIX.4.4|9=164|35=Y|34=2|49=CSERVER|50=QUOTE|52=20170920-09:52:13.036|56=live.theBroker.12345|57=Quote|58=INVALID_REQUEST: Expected numeric symbolId, but got CS8260|262=CS8260:sXlXex|281=0|10=236|

请求:

8=FIX.4.4|9=136|35=V|34=6|49=live.theBroker.12345|50=Quote|52=20170920-09:52:13.199|56=CSERVER|57=QUOTE|262=EwOhiWvMdCpc|263=1|264=3|146=1|55=1|267=2|269=0|269=1|10=182|

拒绝:

8=FIX.4.4|9=157|35=Y|34=6|49=CSERVER|50=QUOTE|52=20170920-09:52:13.201|56=live.theBroker.12345|57=Quote|58=INVALID_REQUEST: MarketDepth should be either 0 or 1|262=EwOhiWvMdCpc|281=5|10=088|

Security List Request (MsgType(35)=x)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
320 SecurityReqID 是 任何有效值 String 证券定义请求的唯一 ID。
559 SecurityListRequestType 是 0 Integer 正在进行的证券列表请求的类型。 仅支持 0 = Symbol(tag=55)。
55 Symbol 否 任何有效值 Integer 用于解析交易品种名称的 ID。
Standard Trailer 是

请参见下方证券列表请求消息示例。

请求:

8=FIX.4.4|9=107|35=x|34=3|49=live.theBroker.12345|50=Trade|52=20180427-12:24:27.106|56=CSERVER|57=TRADE|55=39|320=ILCea0JkdQEm|559=0|10=248|

响应:

8=FIX.4.4|9=158|35=y|34=3|49=CSERVER|50=TRADE|52=20180427-12:24:27.107|56=live.theBroker.12345|57=Trade|320=ILCea0JkdQEm|322=responce:ILCea0JkdQEm|560=0|146=1|55=39|1007=NZDCHF|1008=4|10=088|

Security List (MsgType(35)=y)

Tag 字段名称 必填 值 FIX格式 备注
Standard Header 是
320 SecurityReqID 是 任何有效值 String 证券定义请求的唯一 ID。
322 SecurityResponseID 是 任何有效值 String 证券列表响应的唯一 ID。
560 SecurityRequestResult 是 0 Integer 返回给证券请求消息的结果。 有效值为:
0 = 有效请求。
1 = 无效或不支持的请求。
2 = 未找到符合选择标准的工具。
3 = 未授权检索工具数据。
4 = 工具数据暂时不可用。
5 = 不支持工具数据请求。
146 NoRelatedSym 否 任何有效值 Integer 指定重复交易品种(工具)的数量。
55 Symbol 否 任何有效值 Integer 工具标识符由Spotware提供。
1007 SymbolName 否 任何有效值 String 交易品种名称。
1008 SymbolDigits 否 任何有效值 Integer 交易品种小数位数。 可能值为 0 到 5。
Standard Trailer 是

请参见下方证券列表消息示例。

响应:

8=FIX.4.4|9=3977|35=y|34=2|49=CSERVER|50=TRADE|52=20180426-12:07:37.816|56=live.theBroker.12345|57=Trade|320=Sxo2Xlb1jzJC|322=responce:Sxo2Xlb1jzJC|560=0|146=143|55=1|1007=EURUSD|1008=5|55=2|1007=GBPUSD|1008=5|55=3|1007=EURJPY|1008=3|55=4|1007=USDJPY|1008=3|55=5|1007=AUDUSD|1008=5|55=6|1007=USDCHF|1008=5|55=7|1007=GBPJPY|1008=3|55=8|1007=USDCAD|1008=5|55=9|1007=EURGBP|1008=5|55=10|1007=EURCHF|1008=5|55=11|1007=AUDJPY|1008=2|55=12|1007=NZDUSD|1008=5|55=13|1007=CHFJPY|1008=2|55=14|1007=EURAUD|1008=4|55=15|1007=CADJPY|1008=2|55=16|1007=GBPAUD|1008=4|55=17|1007=EURCAD|1008=4|55=10001|1007=USDCFDSAX|1008=5|55=18|1007=AUDCAD|1008=4|55=10002|1007=CD3295|1008=5|55=19|1007=GBPCAD|1008=4|55=10003|1007=DU3295|1008=5|55=20|1007=AUDNZD|1008=4|55=10004|1007=CS5965|1008=2|55=21|1007=NZDJPY|1008=2|55=10005|1007=CS6014_3|1008=5|55=22|1007=USDNOK|1008=4|55=10006|1007=DU6014_3|1008=5|55=23|1007=AUDCHF|1008=4|55=10007|1007=CS6014_4|1008=5|55=24|1007=USDMXN|1008=4|55=10008|1007=DU6014_4|1008=5|55=25|1007=GBPNZD|1008=4|55=10009|1007=CS5953|1008=5|55=26|1007=EURNZD|1008=4|55=10010|1007=CS6407_01_EURUSD|1008=5|55=27|1007=CADCHF|1008=4|55=10011|1007=CS6407_01_GBPUSD|1008=5|55=28|1007=USDSGD|1008=5|55=10012|1007=CS6407_02_EURUSD|1008=5|55=29|1007=USDSEK|1008=4|55=10013|1007=CS6407_03_EURUSD|1008=5|55=30|1007=NZDCAD|1008=4|55=31|1007=EURSEK|1008=4|55=10015|1007=CS7847_01_EURUSD|1008=5|55=32|1007=GBPSGD|1008=4|55=10016|1007=CS7847_01_GBPUSD|1008=5|55=33|1007=EURNOK|1008=4|55=10017|1007=CS7847_02_EURUSD|1008=5|55=34|1007=EURHUF|1008=2|55=10018|1007=CS7847_03_EURUSD|1008=5|55=35|1007=USDPLN|1008=4|55=10019|1007=CS7847_04_GBPUSD|1008=5|55=36|1007=USDDKK|1008=4|55=10020|1007=CS9004S|1008=2|10=096|