-1

これは、わずかに変更された quickfix/examples/tradeclient/Application.cpp からのテスト出力です。

<message>
  <header>
    <field number="8"><![CDATA[FIX.4.4]]></field>
    <field number="35"><![CDATA[V]]></field>
    <field number="1"><![CDATA[CLIENT1]]></field>
    <field number="15"><![CDATA[USD]]></field>
    <field number="38"><![CDATA[1]]></field>
    <field number="49"><![CDATA[CLIENT1]]></field>
    <field number="55"><![CDATA[EUR/USD]]></field>
    <field number="56"><![CDATA[EXECUTOR]]></field>
    <field number="108"><![CDATA[10]]></field>
    <field number="146"><![CDATA[1]]></field>
    <field number="265"><![CDATA[0]]></field>
    <field number="448"><![CDATA[EXECUTOR]]></field>
    <field number="453"><![CDATA[1]]></field>
  </header>
  <body>
    <field number="146"><![CDATA[1]]></field>
    <field number="262"><![CDATA[MARKETDATAID]]></field>
    <field number="263"><![CDATA[0]]></field>
    <field number="264"><![CDATA[0]]></field>
    <field number="267"><![CDATA[1]]></field>
    <group>
      <field number="55"><![CDATA[EUR/USD]]></field>
    </group>
    <group>
      <field number="269"><![CDATA[0]]></field>
    </group>
  </body>
  <trailer>
  </trailer>
</message>



8=FIX.4.49=15735=V1=CLIENT115=USD38=149=CLIENT155=EUR/USD56=EXECUTOR108=10146=1265=0448=EXECUTOR453=1146=155=EUR/USD262=MARKETDATAID263=0264=0267=1269=010=045

OUT: 8=FIX.4.49=18735=V1=CLIENT115=USD34=738=149=CLIENT152=20131101-13:09:38.92355=EUR/USD56=EXECUTOR108=10146=1265=0448=EXECUTOR453=1146=155=EUR/USD262=MARKETDATAID263=0264=0267=1269=010=223

Qt Chart Director などのチャートにストリーミングするための EUR/USD の値を取得するにはどうすればよいですか?

これは、これまでに修正して再コンパイルしたコードです。

FIX44::MarketDataRequest Application::queryMarketDataRequest44()
{
  FIX::MDReqID mdReqID( "MARKETDATAID" );
  FIX::SubscriptionRequestType subType( FIX::SubscriptionRequestType_SNAPSHOT );
  FIX::MarketDepth marketDepth( 0 );

  FIX44::MarketDataRequest::NoMDEntryTypes marketDataEntryGroup;
  FIX::MDEntryType mdEntryType( FIX::MDEntryType_BID );
  marketDataEntryGroup.set( mdEntryType );

  FIX44::MarketDataRequest::NoRelatedSym symbolGroup;
  FIX::Symbol symbol( "EUR/USD" );
  symbolGroup.set( symbol );

//FIX::StrikeCurrency strikecurrency( "USD" );

  FIX44::MarketDataRequest message( mdReqID, subType, marketDepth );
  message.addGroup( marketDataEntryGroup );
  message.addGroup( symbolGroup );
//  message.addGroup( strikeCurrency );


//message.StrikeCurrency = "USD";

message.getHeader().setField(35, "V"); 
    message.getHeader().setField(265, "0"); 
    message.getHeader().setField(1, "CLIENT1"); 
    //message.getHeader().setField(267, "2"); 
    message.getHeader().setField(146, "1"); 
    message.getHeader().setField(55, "EUR/USD"); 
    message.getHeader().setField(38, "1"); 
    message.getHeader().setField(15, "USD");//????? 
    message.getHeader().setField(453, "1"); 

    message.getHeader().setField(448, "EXECUTOR");

    message.getHeader().setField(108, "10"); 

  queryHeader( message.getHeader() );

  std::cout << message.toXML() << std::endl;
  std::cout << message.toString() << std::endl;

  return message;
}

このタイプは安全ですか?

4

1 に答える 1

-1

タグ 6/31 は、価格を確認する場所です。タイプ セーフ オプションをチェックするためのリファレンスとして、quickfixj のコードを見ることができます。タグ番号の使用は、最もタイプ セーフでないオプションです。それが役に立てば幸い

http://www.quickfixj.org/quickfixj/usermanual/1.5.3/usage/receiving_messages.html

更新: http://www.quickfixj.org/quickfixj/usermanual/1.5.3/usage/recoming_messages.html 最もタイプ セーフなオプションを確認してください。マーケット メーカーから価格を受け取っている場合は、対応する FIX 4.4 メッセージに onMessage メソッドを使用できます。onMessage (mkt データ メッセージを受信すると呼び出されます) 内で、タイプを指定し、それを message.get 呼び出しで使用して価格を取得できます。価格)、代わりにタグ番号を使用することを検討してください。

私は試した:

std::cout << "AvgPx: " << message.getHeader().getField(6) << std::endl << std::endl;

...そしてまた...

std::cout << "AvgPx: " << message.getField(6) << std::endl << std::endl;

...タグ6と31の両方で、「フィールドが見つかりません」というエラーが発生します

別の更新

std::cout << "Px: " << message.get(FIX::FIELD::Price) << std::endl << std::endl;

message.get だけを使用すると、次のコンパイラ エラーが生成されます...

~/Downloads/quickfix/examples/tradeclient$ make g++ -DHAVE_CONFIG_H -I. -I../.. -I../../include -I.. -g -O2 -Wall -ansi -Wpointer-arith -Wwrite-strings -I/usr/include/libxml2 -MT Application.o - MD -MP -MF .deps/Application.Tpo -c -o Application.o Application.cpp Application.cpp: In member function 'FIX44::MarketDataRequest Application::queryMarketDataRequest44()': Application.cpp:589:45: エラー: 'FIX44::MarketDataRequest::get(int)' の呼び出しに一致する関数はありません Application.cpp:589:45: 注: 候補は次のとおりです: ../../include/quickfix/fix44/MarketDataRequest.h:29: 5: 注: FIX::MDReqID& FIX44::MarketDataRequest::get(FIX::MDReqID&) const ../../include/quickfix/fix44/MarketDataRequest.h:29:5: 注: 引数 1 の既知の変換はありません「int」から「FIX::MDReqID&」へ ../../include/quickfix/fix44/MarketDataRequest.h:30:
'int' から 'FIX::MarketDepth&' への引数 1 の既知の変換はありません ../../include/quickfix/fix44/MarketDataRequest.h:32:5: 注: FIX::MDUpdateType& FIX44::MarketDataRequest::get (FIX::MDUpdateType&) const ../../include/quickfix/fix44/MarketDataRequest.h:32:5: 注意:
'int' から 'FIX::MDUpdateType&' への引数 1 の既知の変換はありません ../../include/quickfix/fix44/MarketDataRequest.h:33:5: 注: FIX::AggregatedBook& FIX44::MarketDataRequest::get (FIX::AggregatedBook&) const ../../include/quickfix/fix44/MarketDataRequest.h:33:5: 注: 'int' から 'FIX::AggregatedBook&' への引数 1 の既知の変換はありません ../. ./include/quickfix/fix44/MarketDataRequest.h:34:5: 注: FIX::OpenCloseSettlFlag& FIX44::MarketDataRequest::get(FIX::OpenCloseSettlFlag&) const ../../include/quickfix/fix44/MarketDataRequest. h:34:5: 注: 引数 1 の 'int' から 'FIX::OpenCloseSettlFlag&' への既知の変換はありません ../../include/quickfix/fix44/MarketDataRequest.h:35:5: 注: FIX:: Scope& FIX44::MarketDataRequest::get(FIX::Scope&) const ../../include/quickfix/fix44/MarketDataRequest.h:35:5: 注: 'int' から 'FIX::Scope&' への引数 1 の既知の変換はありません ../../include/quickfix/fix44/MarketDataRequest.h: 36:5: 注: FIX::MDImplicitDelete& FIX44::MarketDataRequest::get(FIX::MDImplicitDelete&) const ../../include/quickfix/fix44/MarketDataRequest.h:36:5: 注: 既知の変換はありません'int' から 'FIX::MDImplicitDelete&' への引数 1 ../../include/quickfix/fix44/MarketDataRequest.h:37:5: 注: FIX::NoMDEntryTypes& FIX44::MarketDataRequest::get(FIX:: NoMDEntryTypes&) const ../../include/quickfix/fix44/MarketDataRequest.h:37:5: 注: 引数 1 の 'int' から 'FIX::NoMDEntryTypes&' への既知の変換はありません ../../include/ quickfix/fix44/MarketDataRequest.h:44:5: 注: FIX::NoRelatedSym& FIX44::MarketDataRequest::get(FIX::NoRelatedSym&) const ../../include/quickfix/fix44/MarketDataRequest.h:44:5: 注意:
'int' から 'FIX::NoRelatedSym&' への引数 1 の既知の変換はありません make: * [Application.o] エラー 1

これは、スコープ エラーのため修正されました。

さらに別の更新

これは、tradeclient からハッキングされた Application.cpp です...

追加された行:

#include "quickfix/SessionID.h"


FIX44::MarketDataRequest Application::queryMarketDataRequest44()
{
    FIX::MDReqID mdReqID( "CLIENT1" );
    ...
    FIX::Symbol symbol( "EUR/USD" );
    ...

    FIX::SessionID sessionID;
    FIX44::ExecutionReport execReport;
    Application::onMessage(execReport, sessionID);
    ...

次のコード...

std::cout << std::endl  << "OUT: " << message << std::endl << "Px: " << message.getHeader().getField(FIX::FIELD::Price) << std::endl << std::endl;

...次のエラーが生成されます。

quickfix/bin$ ./tradeclient cfg/tradeclient.cfg  
1) Enter Order
2) Cancel Order
3) Replace Order
4) Market data test
5) Quit
Action: 
Logon - FIX.4.4:CLIENT1->EXECUTOR
4

1) FIX.4.0
2) FIX.4.1
3) FIX.4.2
4) FIX.4.3
5) FIX.4.4
6) FIXT.1.1 (FIX.5.0)
BeginString: 5

MarketDataRequest

SenderCompID: CLIENT1

TargetCompID: EXECUTOR

Use a TargetSubID?: n
<message>
  <header>
    <field number="8"><![CDATA[FIX.4.4]]></field>
    <field number="35"><![CDATA[V]]></field>
    <field number="49"><![CDATA[CLIENT1]]></field>
    <field number="56"><![CDATA[EXECUTOR]]></field>
  </header>
  <body>
    <field number="146"><![CDATA[1]]></field>
    <field number="262"><![CDATA[CLIENT1]]></field>
    <field number="263"><![CDATA[0]]></field>
    <field number="264"><![CDATA[0]]></field>
    <field number="267"><![CDATA[1]]></field>
    <group>
      <field number="55"><![CDATA[EUR/USD]]></field>
    </group>
    <group>
      <field number="269"><![CDATA[0]]></field>
    </group>
  </body>
  <trailer>
  </trailer>
</message>
    8=FIX.4.49=8135=V49=CLIENT156=EXECUTOR146=155=EUR/USD262=CLIENT1263=0264=0267=1269=010=097
Px: 44
terminate called after throwing an instance of 'FIX::FieldNotFound'
  what():  Field not found
Aborted (core dumped)

最新の更新はまだ

必要なフィールドが XML 出力にリストされていません。

すべての価格関連フィールド (6/31) のリクエストを送信するメッセージをどのように指定するか、または enum best を使用していますか? 例: 価格。

FIX4.4 の価格はどこでどのように印刷すればよいですか?

于 2013-11-01T15:24:54.097 に答える