QuickFix/N簡介
FIX是Financial Information eXchange的簡稱。FIX是一種專門為實時電子證券交易設計的標准消息協議。該協議由FIX protocol, Ltd(FPL)所有並維護。FIX協議的官方網址為http://www.fixprotocol.org/
QuickFix引擎( http://www.quickfixengine.org/ )一個開源的FIX引擎,其中它有JAVA、C++、C#三個版本的實現。
QuickFix/N是實現了FIX協議4.0-5.0版本及其功能的開源軟件,100%使用.NET(C#)實現。
QuickFix/N官網下載 http://www.quickfixn.org/
QuickFix/N源碼下載 https://github.com/connamara/quickfixn
使用QuickFIX/N創建一個Fix應用程序
使用QuickFIX/N創建一個FIX應用程序很容易,實現它的接口Application即可,例如創建一個簡單應用程序如下:
{
public void FromApp(Message msg, SessionID sessionID) { }
public void OnCreate(SessionID sessionID) { }
public void OnLogout(SessionID sessionID) { }
public void OnLogon(SessionID sessionID) { }
public void FromAdmin(Message msg, SessionID sessionID) { }
public void ToAdmin(Message msg, SessionID sessionID) { }
public void ToApp(Message msg, SessionID sessionID) { }
}
這些實現方法將被QuickFIX/N的事件調用。
下面我們來看看每個回調事件的說明。
應用回調
客戶端(對手方)發送登錄請求或其它請求消息,當QuickFIX/N應用程序收到消息。QuickFIX/N應用程序會發送一個回調事件的通知。
FromApp -每個應用級別的消息將通過該方法處理,如委托指令,執行報告,證券信息以及市場數據。
FromAdmin -每個管理級別的消息將通過該方法處理,如心跳,登錄以及注銷。
OnCreate中 - 每當一個新的會話被創建,該方法被調用。
OnLogon - 當登錄操作成功完成時,該方法被調用。
OnLogout - 當會話斷開時觸發,包括對方主動請求logout或者網絡連接斷開都會引發該事件。
ToApp -所有應用級別的消息在發送出去之前,都會調用該方法。如果需要在每個發出的消息當中添加一個標簽(Tag),在該方法是實現該需求最好的位置。
ToAdmin -所有發出的管理級別消息在發送出去之前,都會調用該方法。
Acceptor 和 Initiator
QuickFIX/N 實現了的acceptor 和 initiator兩種模式。
Initiator:作為客戶端,當我們要連接到對方的應用時,使用Initiator。
Acceptor :作為服務端,當我們要提供應用服務供對方連接時,使用Acceptor。
創建我們的應用程序
以下示例代碼,我們實現Application 接口,然后實例化一個Acceptor:
public class MyQuickFixApp : Application
{
public void FromApp(Message msg, SessionID sessionID) { }
public void OnCreate(SessionID sessionID) { }
public void OnLogout(SessionID sessionID) { }
public void OnLogon(SessionID sessionID) { }
public void FromAdmin(Message msg, SessionID sessionID) { }
public void ToAdmin(Message msg, SessionID sessionID) { }
public void ToApp(Message msg, SessionID sessionID) { }
}
public class MyApp
{
static void Main(string[] args)
{
SessionSettings settings = new SessionSettings(args[0]);
Application myApp = new MyQuickFixApp();
MessageStoreFactory storeFactory = new FileStoreFactory(settings);
LogFactory logFactory = new FileLogFactory(settings);
ThreadedSocketAcceptor acceptor = new ThreadedSocketAcceptor(
myApp,
storeFactory,
settings,
logFactory);
acceptor.Start();
while (true)
{
System.Console.WriteLine("Waiting!");
System.Threading.Thread.Sleep(1000);
}
acceptor.Stop();
}
}
如果要更改應用角色,改為Initiator,只要簡單地用SocketInitiator替換ThreadedSocketAcceptor即可。
其它擴展
1)消息存儲擴展
MessageStore會存儲FIX會話級別消息的消息傳出記錄。我們可以通過實現MessageStoreFactory接口,來自定義或擴展我們的消息存儲。
2)日志存儲擴展
日志記錄已經有了兩個的實現:FileLog、ScreenLog,其中文件存儲的日志記錄器已經可以滿足一般的要求。當然,我們也可以通過實現LogFactory接口,來自定義實現或擴展我們的日志存儲。
