2

Quickfix と stunnel を使用して、RSA 秘密鍵でサーバーに接続しています。

Market Data Request(MsgType=V) を送信すると、次のエラーが表示されます

8=FIX.4.49=14735=Y34=55349=ABCD52=20130513-03:23:23.24356=ABCDEFGHI58=フィールド [5232] がメッセージに見つかりませんでした.262=85ee75f8-ab5d-4aff-b87d-108b74d3281=010=53

このリンクから検索して、5232が通貨フィールドであることを発見しました

したがって、以下のように Currency 値を 5232 に渡しました

Message message = new Message();
................
message.setField(5232, new quickfix.field.Currency("EUR"));
................
Session.sendToTarget(message, sessId);

しかし、送信メッセージのコードを確認したところ、フィールド 5232 が自動的に「15=EUR」に変換され、「フィールド [5232] がメッセージに見つかりませんでした」というエラーが再度表示されることがわかりました。

ここで私が見逃していることを誰でも指摘できますか?

4

4 に答える 4

1

フィールド番号について少し混乱していますが、あなたが犯しているエラーに関係なく、リクエストにはグループが必要であり、通貨フィールドはそのグループに含まれている必要があります。

次に例を示します。

    MarketDataRequest marketDataRequest = new MarketDataRequest();
    String reqID = symbol+new Date().getTime();  //unique ID
    marketDataRequest.setString(MDReqID.FIELD,reqID); // set ID
    char requestType = SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES;  

    marketDataRequest.setChar(SubscriptionRequestType.FIELD,requestType); // set update type
    marketDataRequest.setInt(MarketDepth.FIELD, 0);
    marketDataRequest.setInt(MDUpdateType.FIELD, 0);

    MarketDataRequest.NoMDEntryTypes entryTypes = new MarketDataRequest.NoMDEntryTypes();  // create group to request both bid and offers
    entryTypes.set(new MDEntryType(MDEntryType.BID)); 
    marketDataRequest.addGroup(entryTypes);
    entryTypes.set(new MDEntryType(MDEntryType.OFFER));
    marketDataRequest.addGroup(entryTypes);

    MarketDataRequest.NoRelatedSym noRelatedSym = new MarketDataRequest.NoRelatedSym(); // create group to add list of symbols
    noRelatedSym.set(new Symbol(getSymbol(symbol)));
    marketDataRequest.addGroup(noRelatedSym);

ご覧のとおり、いくつかのフィールドは最初にグループに入力し、次にメッセージに入力する必要があります。メッセージの構造を示す FIX44.xml という辞書定義が必要です。そのquickfix/etc/ディレクトリにあります。

于 2013-05-13T07:33:58.863 に答える
0

ここには複数の問題と誤解があります。

  • RSA キーを使用しているという事実は、問題とは関係ありません
  • メッセージを MarketDataRequest オブジェクトではなく、汎用の Message オブジェクトとして操作するのはなぜですか? 後者はよりタイプセーフです。
  • 通貨は標準の FIX 定義でタグ 11 であるため、15=EUR を取得しています。(これまでで最高の FIX リソースであるhttp://fixprotocol.org/FIXimate3.0/を参照してください。) メソッドは 5232 引数を無視しています。あなたが本当にやりたかったことは ですがmessage.setField(5232,"EUR")、それはおそらくまだ間違っています。読む。
  • Velocity Systems International で作業している場合を除き、5232 が通貨を意味しないことは 99% 確信しています。あなたが見つけたそのリンクは、企業が FIX 組織に登録したカスタム フィールドのリストにすぎませんが、誰もそれに従う必要がないため、実際にはほとんど役に立ちません。あなたの取引先はおそらく 5232 を別の目的で使用しています。

以上のことから、次のことを行う必要があります。

この FIX インターフェースについては、相手方の文書を入手してください。5232 とは何か、彼らはそれをどのように使用することを期待しているか、メッセージの繰り返しグループの 1 つに含まれているかどうかを調べる必要があります。

また、5232 を追加した場合は、他のフィールドも追加した可能性があります。すべてのカスタマイズを知る必要があります。

これらの変更を反映するように FIX44.xml ファイルを更新します。これを行う必要があります。そうしないと、エンジンは予期しないフィールドを持つメッセージを拒否します。このファイルは非常に理解しやすいです。メッセージ定義は上部セクションにあり、フィールド定義は下部セクションにあります。

QuickFIX/J エンジンを再構築します (オプションですが推奨)。FAQ エントリ「QF/J を再生成/再構築する必要がありますか?」 を参照してください。なぜ、どのようにそれを行うのか。

結局のところ、物事はあなたにとってより意味のあるものになるはずです。

于 2013-05-13T14:25:06.410 に答える