FIX协议(金融信息交换协议)与XML的关系

FIX协议与XML是互补协作关系,非替代关系;FIX采用轻量级Tag=Value格式保障实时交易低延迟,FIXML则以XML结构化表达用于监管报送、清算对账等后台场景。

FIX协议与XML不是替代关系,而是互补协作关系。FIX本身是面向实时交易的轻量级通信标准,采用紧凑的“Tag=Value”文本格式;XML则通过结构化、自描述的语法,为FIX消息提供一种更易读、可存档、适合后台处理的表达方式——这就是FIXML。

FIX协议本身不依赖XML

FIX协议的核心设计强调低延迟和高吞吐,原始消息以(0x01)分隔的键值对形式传输,例如35=D表示订单取消请求。这种格式解析快、带宽占用小,适合订单路由、执行回报等前台实时场景。

  • 会话层(FIXT)负责连接、序号管理、心跳与重传,与传输介质无关
  • 应用层定义业务消息(如NewOrderSingle、ExecutionReport),字段编号有严格规范
  • 标准头(Standard Header)和标准尾(Standard Trailer)始终使用Tag-Value格式,不可替换为XML

FIXML是FIX协议的XML表达形式

FIXML不是独立协议,而是FIX消息在特定场景下的结构化映射。它把Tag-Value消息按XML层级组织,比如将55=MSFT(Symbol)转为MSFT,并嵌套在根元素下。

  • 主要用于非实时场景:监管报送、清算对账、审计日志、系统间批量导入导出
  • 支持复杂嵌套结构,如多腿期权指令、组合订单,原生FIX难以清晰表达
  • 可被通用XML工具(XSLT、XPath、Schema校验)直接处理,降低开发适配成本

FIX会话中可混合传输FIXML

FIX引擎允许在标准FIX会话流中夹带XML数据,只要遵守协议封装规则:

  • 消息类型(Tag 35)设为n,表示“未定义类型的XML数据”
  • 用Tag 212(XmlDataLen)声明XML内容字节长度
  • 用Tag 213(XmlData)承载实际XML字符串,置于标准头与标准尾之间
  • 整个包仍走原有TCP连接、序列号机制和重传逻辑,不破坏会话可靠性

选择依据取决于使用场景

是否用XML,关键看需求重心:

  • 要速度、低延迟、高频交互 → 坚持原生Tag-Value格式
  • 要可读性、可验证性、跨系统兼容性 → 用FIXML,尤其在后台或监管环节
  • 新系统设计时,可前端用FIX、后端用FIXML,形成“实时+归档”双轨机制