这是稍加修改的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;
}
这种类型安全吗?
答案 0 :(得分:-1)
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,但得到错误&#34;未找到字段&#34;
另一个更新
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 ../../ 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&amp; FIX44 :: MarketDataRequest :: get(FIX :: MDReqID&amp;)const ../../include/quickfix/fix44/MarketDataRequest.h:29:5:注意:没有 参数1的已知转换从'int'到'FIX :: MDReqID&amp;' ../../include/quickfix/fix44/MarketDataRequest.h:30:5:注意: FIX :: SubscriptionRequestType&安培; FIX44 :: MarketDataRequest :: get(FIX :: SubscriptionRequestType&amp;)const ../../include/quickfix/fix44/MarketDataRequest.h:30:5:注意:没有 参数1的已知转换从'int'到 “FIX :: SubscriptionRequestType和放大器;” ../../include/quickfix/fix44/MarketDataRequest.h:31:5:注意: FIX :: MarketDepth&安培; FIX44 :: MarketDataRequest ::得到(FIX :: MarketDepth&安培;) const ../../include/quickfix/fix44/MarketDataRequest.h:31:5:注意:
参数1从'int'到'FIX :: MarketDepth&amp;'没有已知的转换 ../../include/quickfix/fix44/MarketDataRequest.h:32:5:注意: FIX :: MDUpdateType&安培; FIX44 :: MarketDataRequest ::得到(FIX :: MDUpdateType&安培;) const ../../include/quickfix/fix44/MarketDataRequest.h:32:5:注意:
参数1从'int'到'FIX :: MDUpdateType&amp;'没有已知的转换 ../../include/quickfix/fix44/MarketDataRequest.h:33:5:注意: FIX :: AggregatedBook&安培; FIX44 :: MarketDataRequest :: get(FIX :: AggregatedBook&amp;)const ../../include/quickfix/fix44/MarketDataRequest.h:33:5:注意:没有 参数1的已知转换从'int'到'FIX :: AggregatedBook&amp;' ../../include/quickfix/fix44/MarketDataRequest.h:34:5:注意: FIX :: OpenCloseSettlFlag&安培; FIX44 :: MarketDataRequest :: get(FIX :: OpenCloseSettlFlag&amp;)const ../../include/quickfix/fix44/MarketDataRequest.h:34:5:注意:没有 参数1的已知转换从'int'到 “FIX :: OpenCloseSettlFlag和放大器;” ../../include/quickfix/fix44/MarketDataRequest.h:35:5:注意: FIX ::范围和放大器; FIX44 :: MarketDataRequest :: get(FIX :: Scope&amp;)const ../../include/quickfix/fix44/MarketDataRequest.h:35:5:注意:没有 参数1的已知转换从'int'到'FIX :: Scope&amp;' ../../include/quickfix/fix44/MarketDataRequest.h:36:5:注意: FIX :: MDImplicitDelete&安培; FIX44 :: MarketDataRequest :: get(FIX :: MDImplicitDelete&amp;)const ../../include/quickfix/fix44/MarketDataRequest.h:36:5:注意:没有 参数1的已知转换从'int'到'FIX :: MDImplicitDelete&amp;' ../../include/quickfix/fix44/MarketDataRequest.h:37:5:注意: FIX :: NoMDEntryTypes&安培; FIX44 :: MarketDataRequest :: get(FIX :: NoMDEntryTypes&amp;)const ../../include/quickfix/fix44/MarketDataRequest.h:37:5:注意:没有 参数1的已知转换从'int'到'FIX :: NoMDEntryTypes&amp;' ../../include/quickfix/fix44/MarketDataRequest.h:44:5:注意: FIX :: NoRelatedSym&安培; FIX44 :: MarketDataRequest ::得到(FIX :: NoRelatedSym&安培;) const ../../include/quickfix/fix44/MarketDataRequest.h:44:5:注意:
参数1从'int'到'FIX :: NoRelatedSym&amp;'没有已知的转换 make: * [Application.o]错误1
由于范围错误,这已得到修复。
再次更新
以下是来自tradeclient的 添加的行: 以下代码...... ...生成以下错误: 最新更新 我们需要的字段不会列在XML输出中。 我们如何指定一条消息来发送所有与定价相关的字段(6/31)或最好使用枚举的请求?例如价。 我如何以及在何处打印FIX4.4的价格?#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)