-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 等图表?

这是我已经修改并重新编译的代码:

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/receiving_messages.html 请检查最安全的选项。如果您从做市商处接收定价,您可以使用 onMessage 方法获取相应的 FIX 4.4 消息。在 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$ 制作 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:在成员函数“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:
没有已知的参数 1 从 'int' 到 'FIX::MarketDepth&' 的转换 ../../include/quickfix/fix44/MarketDataRequest.h:32:5: 注意:FIX::MDUpdateType& FIX44::MarketDataRequest::get (FIX::MDUpdateType&) const ../../include/quickfix/fix44/MarketDataRequest.h:32:5:注意:
没有已知的参数 1 从 'int' 到 'FIX::MDUpdateType&' 的转换 ../../include/quickfix/fix44/MarketDataRequest.h:33:5: 注意:FIX::AggregatedBook& FIX44::MarketDataRequest::get (FIX::AggregatedBook&) const ../../include/quickfix/fix44/MarketDataRequest.h:33:5: 注意:没有已知的参数 1 从“int”到“FIX::AggregatedBook&”的转换../。 ./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:注意:没有已知的参数 1 从“int”到“FIX::Scope&”的转换 ../../include/quickfix/fix44/MarketDataRequest.h: 36:5:注意:FIX::MDImplicitDelete& FIX44::MarketDataRequest::get(FIX::MDImplicitDelete&) const ../../include/quickfix/fix44/MarketDataRequest.h:36:5:注意:没有已知的转换参数 1 从 'int' 到 'FIX::MDImplicitDelete&' ../../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: 注意:
没有已知的参数 1 从 'int' 到 'FIX::NoRelatedSym&' 的转换 make: * [Application.o] Error 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)或者最好使用枚举?例如价格。

如何以及在哪里打印 FIX4.4 的价格?

于 2013-11-01T15:24:54.097 回答