跳转至

通信模型

简介

FIX API 使用基于会话的通信。 会话定义为两方之间的通信:发起方(客户端),即发起通信的一方,和接受方(服务器),即接收发起方连接请求的一方。

服务器使用登录消息验证客户端请求。

FIX 会话协议

每个会话在客户端和 cTrader 服务器之间维护双向消息。 一个会话可以包含多个物理连接,并使用序列号维护。

单个会话内的每个新消息都会收到一个从 1(一)开始的唯一序列号。 双方依靠序列号来维持有序通信。 缺失的消息会通过双方协议重新传输。

典型的会话流程:

  1. 客户端以登录消息开始会话。
  2. 客户端与服务器交换应用程序消息。
  3. 会话以注销消息结束。

cTrader FIX 协议消息类别

根据 FIX 协议的定义,cTrader FIX 服务器使用两种不同的数据级别:系统和应用程序。

请注意,这是支持必要工作流程所需的最小消息集,随着业务需求和 FIX 标准的发展,可能会随时间而变化。

系统(管理)消息

  • 心跳(客户端 ↔ cTrader) – 用于检查双方之间的通信链接。
  • 测试请求(客户端 ↔ cTrader) – 用于测试通信链接的健康状况。
  • 登录(客户端 → cTrader) – 客户端身份验证消息。
  • 登出(客户端 → cTrader) – 会话的正常终止。
  • 重发请求(客户端 ↔ cTrader) – 请求重新传输某些应用程序消息。
  • 拒绝(客户端 ↔ cTrader) – 会话级验证失败。
  • 序列重置(客户端 ↔ cTrader) – 在通信问题的情况下,恢复缺失的消息或重置序列以忽略缺失的消息。

应用程序消息

  • 市场数据请求(客户端 → cTrader) – 一般市场数据请求。
  • 市场数据增量刷新(客户端 ← cTrader) – 对市场数据请求消息的响应。
  • 新单(客户端 → cTrader) – 用于以电子方式向经纪商提交订单以执行。
  • 执行报告(客户端 ← cTrader) – 用于向 FIX 客户端发送订单状态信息,如确认、成交和未经请求的变更。
  • 业务消息拒绝(客户端 ← cTrader) – 用于因非会话原因拒绝 FIX 客户端请求。

FIX 消息结构

本节解释 FIX API 消息的组成方式,描述 FIX 消息格式,并帮助用户理解标签和值对的概念。

每条消息必须包含 3 个部分:

  • 头部 – 每个管理或应用程序消息前面都有一个标准头部。 头部标识消息类型、FIX 版本、消息长度、目的地、序列号、来源和时间。
  • 主体 – 消息主体中的内容由头部中定义的消息类型指定。
  • 尾部 – 每条消息(管理或应用程序)都以标准尾部结束。 尾部用于分隔消息,并包含 CheckSum <10> 值的三位字符表示。

FIX 消息格式

FIX 消息是字段的集合。 每个字段是一个标签-值对,格式为 {tag}={value}。 例如,54=2,表示订单类型为卖出。

标签

  • FIX 使用预定义的标签。
  • 每个标签代表一个特定字段。
  • 每个标签都分配了一个预定义的数字。
  • cTrader FIX 规范提供了字段列表和相应的标签号。

  • 值表示分配给它的标签的值。
  • 值只能是以下数据类型之一:整数、浮点数、字符、时间、日期、数据或字符串。

cTrader FIX API 中的所有消息都以 8=FIX.x.y 开头,其中 x.y 是 FIX 协议的版本。 每条消息的末尾应该有一个字段 10=xyz,其中 xyz 表示消息中所有二进制值的总和,称为校验和。

校验和有助于识别任何传输问题,特别是通过允许接收方知道是否有任何消息丢失来识别数据包丢失。

如果在 FIX 消息中使用 Symbol(55) 标签发送到 cTrader/cServer,您必须指定 FIX 交易品种 ID。 该值在不同经纪商之间可能不同。 您可以在该经纪商的 cTrader 应用程序的交易品种信息窗口中找到 FIX 交易品种 ID 字段。

消息示例

8=FIX.4.4|9=126|35=A|34=1|49=theBroker.12345|57=TRADE|50=any_string|52=20170117-08:03:04|56=CSERVER|98=0|108=30|553=12345|554=passw0rd!|10=131|
标签 # 标签名称 描述
8 BeginString 4.4 FIX 版本
9 BodyLength 102 消息正文长度为 102 个字符
35 MsgType A 消息类型为登录
34 MsgSeqNum 1 消息序列号为 1
49 SenderCompI D broker.1047 交易方的 ID,其中 "broker" 是 cTrader 提供的唯一 BrokerUID,"1047" 是交易账户的数字标识符。
57 TargetSubID TRADE 附加会话限定符。可能的值为:"QUOTE"、"TRADE"。
50 SenderSubID QUOTE 用于识别特定消息发起者的指定值
52 SendingTime 20131129- 15:40:10.276 消息传输时间为 2013 年 11 月 29 日(YYYYMMDD)15:40:10 和 276 毫秒
56 TargetCompID CSERVER 消息目标为 CSERVER。这是 cTrader FIX API 中唯一有效的值。
98 EncryptMethod 0 目前,唯一有效的值是 "0"(零)= NONE_OTHER(不使用加密)
108 HeartBtInt 30 心跳间隔(秒)。该值在 "config.properties" 文件(客户端)中设置为 SERVER.POLLING.INTERVAL'。30 秒是默认间隔值。如果 HeartBtInt 设置为 0,则不需要心跳消息。
553 Username 1047 数字用户 ID
554 Password MyPassword1 用户密码
10 CheckSum 000 计算校验和的方法如下:将消息中每个字节相加,直到但不包括校验和字段本身,然后将其转换为模 256 的数字,前面加上 "0" 以得到一个三位数。