Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

FixParser

Fix parser

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

FIX协议(金融信息交换协议Financial Information exchange)是适用于实时证券、金融电子交易开发的数据通信标准。它是由国际FIX协会组织提供的一个开放式协议,目的是推动国际贸易电子化的进程,在各类参与者之间,包括投资经理、经纪人,买方、卖方建立起实时的电子化通讯协议

FIX 协议的目标是把各类证券金融业务需求流程格式化,使之成为一个个可用计算机语言描述的功能流程,并在每个业务功能接口上统一交换格式,方便各个功能模块的连接。目前,欧、美主要发达国家都是FIX协会的成员

FIX现已被许多企业和销售商使用,它已经成为行业内推荐的消息协议。以我国的几个主要交易市场为例:

  • 深交所新一代报盘接口一种是二进制协议,还有一种就是FIX协议
  • 上交所目前在报盘接口中也有用到FIX协议,一种模式是开发商这边将信息打包成FIX格式写入数据库,比如上交所的大宗交易;另一种则是直接将FIX包通过TCP发送出去,比如上交所的协议回购接口
  • 银行间市场使用的IMIX协议其实也是在FIX协议基础上做的一些个性化处理

当然FIX协议和编程语言没有太大关系!

FIX包结构

FIX协议包含2个层次:会话层和应用层。会话层与数据的通信相关;而应用层定义了商务数据内容

会话是指应用双方通过彼此的协商,所创建的一条逻辑的连接。该连接通过双方各自维护的序列号来实施缺口的发现以及填补过程以实现可靠的通信传输,通过连接建立时协商的安全机制,会话双方可以实现安全的数据传输过程。会话的建立说明双方对之后的数据传输达成了某种共识

本文重点分析应用层面的FIX包的结构,而会话层,以及应用层的其他方面的比如大小写、数据类型(字符串类型/整型/浮点型)、校验和、消息头、消息尾、MsgType标识消息类型、什么数字表示什么含义、系统消息、应用消息等这里就不做说明了

FIX包主要是键值对的格式,键主要用一个个专用的数字表示具体的含义,比如席位用12表示,股东用98表示,证券代码用100表示,这个就具体看通信双方的约定了,然后每个键值对通过ASCII码为1的字符表示,这里我用<SOH>来代指这个分隔符

比如一个单层的FIX包,比如12表示席位,98表示股东,100表示报单数量

pascal
12=13245<SOH>
98=1000000000<SOH>
100=60000<SOH>

FIX不光有单层的结构,还可以表示双层,比如10表示证券数量,101表示证券代码,102表示证券名称,103表示证券的最新价

下面的格式表示有2只证券信息,然后依次打包证券代码、证券名称、证券最新价

pascal
10=2<SOH>
  101=600000<SOH>102=????????????<SOH>103=16.28<SOH>
  101=600005<SOH>102=????????????<SOH>103=3.37<SOH>

再进一步扩展,FIX格式的字符串可以有n层,下面展示一个3层结构的例子,以简单的委托为例,1表示委托的笔数,20表示买卖方向(B/S),然后每笔委托内部可能包括买卖多只股票(这只是一种假设)

pascal
1=2<SOH>
  20=S<SOH>
  10=2<SOH>
    101=600000<SOH>102=????????????<SOH>103=16.28<SOH>
    101=600005<SOH>102=????????????<SOH>103=3.37<SOH>
  20=B<SOH>
  10=1<SOH>
    101=600006<SOH>102=????????????<SOH>103=6.98<SOH>

FIX要想打包多层,必须在第n层打包第n+1层之前有一个字段专门表示第n+1层包含多少条记录!