IB Fix开发 之 Quickfix 解读

Quickfix 是开源的FIX引擎,支持JAVA, C#等语言

官网地址:http://quickfixn.org/tutorial/creating-an-application.html

阅读下面文字之前假设用户已经看过了Quickfix官网并且已经对fix协议的基本内容有了了解。

下面主要介绍Quickfix(C#版本的)核心要点:

(1)Quickfix 到底是什么?

可以将Quickfix 理解为一套实现fix协议的工具,利用这个工具用户可以向对手方发送fix消息,同时可以及时接收并响应对手方发送来的消息

用户同时也可以扩展这个工具(在IB 条件单中会简单介绍)

(2)Quickfix源码在哪里?

https://github.com/connamara/quickfixn

(3)怎么使用Quickfix?

用户可以直接下载源码,编译后可以引用生成的QuickFix 动态库或者直接在官网下载最新版的QuickFix动态库

(4)Quickfix关键接口-----IApplication

Quickfix的核心就是该接口,用户在引用QuickFix 动态库后,最主要的工作就是根据自己的需求实现该接口中的方法。

为了叙述的方便,假设A公司和IB 互为对手方,A公司作为Fix回话的发起方主动去连接IB, 即A公司为initator, IB为acceptor

除此之外, IB FIX消息可分为两类:应用类(application msg)的消息和管理类(administrative msg)的消息

A公司的程序员需要实现IApplication接口的下面几个方法:

public void FromApp(Message msg, SessionID sessionID)

方法说明:当A公司应用程序收到IB发来的应用类消息时会调用该方法,A公司程序员需要在该方法中处理不同的应用类消息

public void OnCreate(SessionID sessionID)

方法说明:当Quickfix根据配置文件创建会话成功后会调用该方法,一般在这个方法中不做特别的事情

public void OnLogon(SessionID sessionID)

方法说明:当A公司应用程序和IB Fix服务连接成功的时候会调用该方法,一般在这个方法中不做特别的事情

public void OnLogout(SessionID sessionID)

方法说明:当A公司应用程序和IB Fix服务连接断开时会调用该方法,一般需要在该方法中实现断开重连机制
public void FromAdmin(Message msg, SessionID sessionID)

方法说明:当A公司应用程序收到IB发来的管理类消息时会调用该方法,
public void ToAdmin(Message msg, SessionID sessionID)

方法说明:当A公司向IB发送管理类消息前会调用该方法(用户可以在消息发送前修改msg)
public void ToApp(Message msg, SessionID sessionID)

方法说明:当A公司向IB发送应用类消息前会调用该方法(用户可以在消息发送前修改msg)

官网有很详细的示例可以参考

(5)FIX消息序号的管理

FIX 会话是由不同的消息构成的,每个消息都包含有一个递增字段MsgSeqNum(tag#34)

即用户发送第一个msg的时候MsgSeqNum=1,发送第二个msg的时候MsgSeqNum=2 ,后面发送的消息以此类推

假设用户收到第一个msg的时候MsgSeqNum=1,接收到第二个msg的时候MsgSeqNum应该是2,后面接收的消息以此类推

即在调用Quickfix的时候用户必须要维护两个序号队列,一个是用户自己发出消息的序号队列,一个是用户收到消息的序号队列。

假设用户收到收到的前一个消息的序号是30, 那下一个接收到的消息序号应该是31,假设下一个消息的序号变成了40,则代表用户漏掉了某些消息,这个时候用 户需告诉IB 重发丢失的消息。

用户维护自己发送消息的序号可在ToAdmin和ToApp两个函数中实现,用户维护收到消息的序号可在FromAdmin和FromApp两个函数中实现。

(6)Quickfix的配置

用户在使用Quickfix之前需要做一些配置,这些配置都很简单,可参考官网(http://quickfixn.org/tutorial/configuration.html)