2

繰り返しグループを持つ FIX メッセージの解析に興味があります。主要な FIX エンジンを使用して API レベルでこれを行う方法の例を示して、実装レベルでこれを効率的に行う方法について議論できますか?

例として、FIX 繰り返しグループを提供しています。

453 NoPartyIDs
448 PartyID
447 PartyIDSource
452 PartyRole

453=3 {448=a&447=1&452=11, 448=b&447=2&452=22, 448=c&447=3&452=33}  
4

1 に答える 1

1

そのため、繰り返しグループの解析は安価ではなく、FIX プロトコルの既知の弱点です。幸いなことに、時間に敏感な FIX メッセージ ( などExecutionReport) のほとんどには、繰り返しグループは含まれません。繰り返しグループ内に繰り返しグループがあると、さらに悪化します。

秘訣は、繰り返しグループを含むことができることがわかっているメッセージ タイプに対してのみ繰り返しグループを解析し、解析に関しては他のすべてのメッセージ タイプの繰り返しグループを無視することです。

CoralFIXを使用して繰り返しグループを解析する方法の例を以下に示します。

    FixParser parser = new FixParser();

    // define a repeating group for a message type:
    parser.addGroupTemplate(QuoteStatusRequest, NoRelatedSym, 
                            Symbol, FutSettDate, SecurityDesc);

    FixMessage fixMsg = parser.parse(byteBufferWithFixMessage);

    fixGroup = fixMsg.getGroup(NoRelatedSym);

    System.out.println(fixGroup.getNumberOfElements()); // => 4

    // you can also print the whole fix group for debugging purposes:
    System.out.println(fixGroup);
    // Symbol(55)=AAPL FutSettDate(64)=1 SecurityDesc(107)=blah1 | Symbol(55)=IBM FutSettDate(64)=2 SecurityDesc(107)=blah2 | Symbol(55)=LDK FutSettDate(64)=3 SecurityDesc(107)=blah3 | Symbol(55)=FB FutSettDate(64)=4 SecurityDesc(107)=blah4

    System.out.println();

    Iterator<FixGroupElement> iter = fixGroup.iterator();

    while(iter.hasNext()) {

        FixGroupElement elem = iter.next();

        // fetch fix tag values as usual:
        System.out.println(elem.getString(Symbol));
        System.out.println(elem.getInt("FutSettDate"));
        System.out.println(elem.getString(107));

        // you can also print the whole element for debugging purposes:
        System.out.println(elem);
        System.out.println();
    }
}

上記のように、タグと修正タグによってQuoteStatusRequest定義された繰り返しグループをメッセージ タイプに含めることができることをパーサーに明示的に示していることがわかります。他のメッセージ タイプでは、この繰り返しグループにより、パーサーでオーバーヘッドが発生しません。上記のソース コードの詳細については、こちらを参照してください。NoRelatedSymSymbolFutSettDateSecurityDesc

実装の詳細に関しては、特に繰り返しグループ内で繰り返しグループを処理するために、再帰が必要です。再帰により、実装がより明確になり、理解することが容易になります。これは繰り返しによって行うこともできますが、コードが複雑になりすぎて、パフォーマンスが少し向上します (ナノ)。繰り返しグループ内に繰り返しグループが多すぎると、さらに違いが生じます。FIX 繰り返しグループに関しては、特に 2 レベルのネスティングしか見たことがありませんが、プロトコルではあらゆるレベルのネスティングが可能です。

免責事項:私は CoralFIX の開発者の 1 人です。

于 2014-07-23T23:40:18.847 に答える