2010-01-31 33 views
2

我是新用的quickfix的東西,我有一個關於入quickfix庫的若干問題,我會更樂意從你得到答案:的quickfix庫問題

我打算開發FIX服務器同時從多個客戶端獲取FIX請求。對此,

a)如果我需要區分來自不同客戶端的請求(我如何區分這些請求與其他客戶端),那麼TargetID(即CLIENT1)的確切含義是什麼?

b)TargetID關於服務器/客戶端的含義一般是什麼?

c)如何添加自定義字段和自定義消息以及與消息破解程序對象的確切連接是什麼?

問候,

莫迪凱Yaakobi

+0

用於添加自定義消息和字段遵循以下簡單步驟http://adding-custom-fields-messages-in-qf-6-easy-steps.32054.n6.nabble.com – 2012-06-18 12:14:58

回答

8
  1. TargetID是盒子 的到你發送消息時,如果 你需要區分多個客戶端的會話 (我假設成 一個名字服務器)只是給每個客戶端 不同SenderCompID

    在您的服務器上,您必須爲每個客戶端設置一個會話。

    示例一個服務器 - 客戶端會話:

    在您的服務器(INCA):

    [SESSION] 
    BeginString=FIX.4.0 
    SenderCompID=INCA 
    TargetCompID=CLIENT1 
    

    在您的客戶端(客戶端1):

    [SESSION] 
    BeginString=FIX.4.0 
    SenderCompID=CLIENT1 
    TargetCompID=INCA 
    

    quickfixengine區分會話 (服務器 - 客戶端連接)基於 這3個值:(BeginString, TargetCompID, SenderCompID)

    當您發送消息時,您將您的 comp id設爲sendercompid,並將 設爲您要發送消息的地址 as targetcompid。您指定 beginstring基於您想使用的修復程序 版本進行通信(FIX4.0/FIX4.2 ....)。

  2. 我想這是上面解釋的, TargetID是發送消息的 的框的ID。當服務器響應 回客戶端將 設置SenderCompID,因爲它是(服務器) ID和TargetCompID將被設置爲 客戶端了應答 發送。

  3. 自定義字段取決於確切需要什麼 。FIX協議 指定自定義字段那些 FieldID比保留 範圍大,所以你的自定義字段可以 開始FieldID 5000

    有幾個關於 選擇如何去了解它。最簡單的一個 只是使用消息的數值 並將其添加到消息(我假設您使用C++,但它與其他語言使用C++類似,但它的類似 )。

    喜歡的東西:

    msg.setField(5000,"SomeValue"); 
    

    此定製字段將不會被 自動驗證,因爲FIX 不知道這件事。 FIX使用xml 文件,其中指定了每個消息和字段 。

    有一個正確的程序添加 新的消息,XML規範,然後 再生quickfixengine代碼 產生新的領域結構,但這樣 到目前爲止,我沒必要這麼做。

    消息破解只是一個方法 是採用指針通用 消息,然後它看起來在 消息ID(如果我沒記錯),並調用 相應的處理程序。

    這是一個大的,如果有很多語句字符串操作 所以有時 最好是自己做的檢查 ,但你應該還好 使用它。

    這是方法是如何的樣子,你會得到的想法:

    void crack(const Message& message, 
         const FIX::SessionID& sessionID) 
    { 
    const std::string& msgTypeValue 
         = message.getHeader().getField(FIX::FIELD::MsgType);   
    if(msgTypeValue == "0") 
        onMessage((const Heartbeat&)message, sessionID); 
    else 
    if(msgTypeValue == "A") 
        onMessage((const Logon&)message, sessionID); 
    else 
    if(msgTypeValue == "1") 
        onMessage((const TestRequest&)message, sessionID); 
    else 
    

    然後,您一般實行 適當的方法例如像 ,如果你只關心 ExecutionReport是你在 實現您的代碼:

    virtual void onMessage(ExecutionReport&, const FIX::SessionID&); 
    

    那麼你的申請將獲得 ExecutionReport這樣就可以 處理它。 onMessage方法 對於您不需要的消息 只需執行任何操作,並且 返回,因此消息將永遠不會到達 您的應用程序。

如果您需要添加自定義消息/場我發現this useful,我沒有,雖然使用過它。