QuickFIX/N入門:一、如何創建一個QuickFIX/N的應用程序


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  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) { }
}

 

這些實現方法將被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

using QuickFix;
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接口,來自定義實現或擴展我們的日志存儲 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM