文章目录
  1. 1. Fix协议简介
  2. 2. Fix协议语法
    1. 2.1. 数据类型
    2. 2.2. 消息结构

Fix协议简介

Fix是洋文The Financial Information eXchange的缩写,中文直译过来就是金融信息交换。Fix协议最初是用来解决券商与机构客户间的通信问题,那时信息是通过电话口头传达的,信息可能丢失或者传达给错误的交易者。Fix协议通过用机器可读的,可被交易者共享的数据取代了这样的通信。后来一些金融机构和经济商为了提升相互间的交易流程效率从而在高效的数据交换中获利,共同制定了Fix协议的开放标准。现在Fix协议已经成为金融行业的推荐标准,在国际金融交易中得到了广泛应用。我国的Step协议就是在Fix协议的基础上制定的。

Fix协议语法

Fix协议有两种语法:一种是“标记=值”,还有一种XML形式称为Fixml,fixml数据冗余太多,这里表过不提,今天只谈第一种语法。Fix协议是个很简单的协议,高级程序员(比如说我,嘿嘿)半天就能写出一个像样的实现,下面简要介绍下其语法:

数据类型

Fix协议包括以下几种数据类型:

int:十进制数字串,没有小数点,可包含正负号

float:包含小数点的十进制数字串,可包含正负号

string:字符串,大小写敏感

char:字符,除分界符外的其他字符

data:原始数据,无格式和内容限制,前面必需紧跟一个域指定数据长度

消息结构

Fix协议结构为:消息头+消息体+消息尾

每个Fix消息由多个“Tag=Value”组成。其中Tag是一个用来表示数据域的整数,一些Tag值是Fix标准已经规定的,如Tag#8代表消息版本,Tag#10代表校验和,交易所可以根据需要扩展Tag。Value就是上面所说的几种类型的数据值。是ASCII码为1的字符,用作各个域间的分隔符。

消息头前三个域为:BeginString(tag#8)+ BodyLen(tag#9)+ MsgType(Tag#35)。BeginString定义协议版本,标准Fix协议的值为FIXxxx,我国的Step协议值为STEPxxx。BodyLen是除8,9,10三个域外消息总长度(严格说来不能称为消息体长,因为里面还包含了其他消息头尾的域)

消息尾的最后一个域为:CheckSum(Tag#10)。CheckSum域为校验和,计算规则为除Tag#10域外所有字节的ASCII码之和对256取模,不足3位前面补0。

今天先写到这吧,好久没写东西了,这点文字憋了我一晚上才写出来,本来还想介绍下Fast的,只能留待下次了。