Quickfix 是開源的FIX引擎,支持JAVA, C#等語言 官網地址:http://quickfixn.org/tutorial/creating-an-application.html 閱讀下麵文字之前假設用戶已經看過了Quickfix官網並且已經對fix協議的基本內容有了瞭解。 下麵主要介 ...
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)