7

入力として文字列 FIX メッセージがあり、それを FIX メッセージに変換したいと考えています。私は QuickFix 1.13.3 を使用しています (これは数日前に QuickFix Web サイトからダウンロードしたものです)

私はQuickFixを初めて使用します。Google が返したサンプル コード/ヘルプのほとんどは Java 用であり、アプリケーションに FIXMessage ペイロードが文字列として含まれている場合、単純な方法は提案されません。

私が Web で見たサンプルのほとんどは、人々がエンド ツー エンドで QuickFix を使用している場合です。つまり、ソケットを介した通信からメッセージを取得してクラックしています。

私の場合、本格的な FIX メッセージを表す文字列ペイロードを提供する独自の通信層があります。必要なのは、文字列を解析して、すべてのタグ/値のリストを取得することだけです。

標準の string.split().... を使用して FIX メッセージを解析する小さなユーティリティを自分で作成しましたが、すべてをサポートする QuickFix を使用するように勧められました。

しかし、QuickFix で非常に基本的なタスクを開始するのに非常に苦労しているため、文字列ペイロードを再解析する助けがあれば大歓迎です。

以下は私が探しているものです

//コンバータまたはクラッカー

public QuickFix44.Message GetMessage(string payload);

//呼び出し元

string newOrderSinglePayload = "8=FIX.4.49=13635=D..............";

QuickFix44:Message message = GetMessage(newOrderSinglePayload);

if (message is QuickFix44.NewOrderSingle)

{ 
   //I am happy
}

この単純な作業に QuickFix が多すぎる場合は、他のツール (無料およびオープンソース) を使用することもできます

4

1 に答える 1

13

QuickFIX は間違いなくエンドツーエンド向けに設計されています。一部のクラスは他の目的に使用できますが、これらのあまり一般的でないユースケースに関するドキュメントはあまりありません。

FIX 文字列をMessageコンストラクターに渡すことができます。

// Uses default DataDictionary (e.g. message definitions from FIX spec)
Message::Message( const std::string& string, bool validate )

// Uses a DataDictionary that you supply.
// If your msg has custom fields, you need this one.
// (You'll create a DD from a custom msg definition XML file that
// you'll also need to create)
Message::Message( const std::string& string,
                  const DataDictionary& dataDictionary,
                  bool validate )

その Message をより具体的な型に変換するには、より具体的な型のコンストラクター ( など) に渡すことができますExecutionReport(Message)

ネイティブ C# ポートであるQuickFIX/nを検討しましたか?

これは QuickFIX/n で動作します:

IMessageFactory _defaultMsgFactory = new DefaultMessageFactory();

var dd = new QuickFix.DataDictionary.DataDictionary();
dd.Load("../../../spec/fix/FIX44.xml");

var msg = new QuickFix.FIX44.ExecutionReport();
msg.FromString(msg_string, false, dd, dd, _defaultMsgFactory);

XML に大幅なカスタマイズが含まれている場合は、ソースを再生成してライブラリを最初に再構築することをお勧めします。

于 2013-05-10T14:35:50.187 に答える