QuickFIX потоковый FX тикер в переполнении стека

Это тестовый вывод слегка измененного 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

Как получить значение EUR / USD для потоковой передачи на график, такой как 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;
}

Этот тип безопасен?

-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;

Использование just message.get генерирует следующие ошибки компилятора …

~ / Загрузки / быстрое исправление / примеры / tradeclient $ make g ++ -DHAVE_CONFIG_H
-Я. -I ../ .. -I ../../ include -I .. -g -O2 -Wall -ansi -Wpointer-arith -Write-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: note:
кандидаты: ../../include/quickfix/fix44/MarketDataRequest.h:29:5:
примечание: FIX :: MDReqID& FIX44 :: MarketDataRequest :: получить (FIX :: MDReqID&) const
../../include/quickfix/fix44/MarketDataRequest.h:29:5: note: нет
известное преобразование для аргумента 1 из int в FIX :: MDReqID&»
../../include/quickfix/fix44/MarketDataRequest.h:30:5: note:
FIX :: SubscriptionRequestType&
FIX44 :: MarketDataRequest :: получить (FIX :: SubscriptionRequestType&) const
../../include/quickfix/fix44/MarketDataRequest.h:30:5: note: нет
известное преобразование аргумента 1 из int в
«FIX :: SubscriptionRequestType&»
../../include/quickfix/fix44/MarketDataRequest.h:31:5: note:
FIX :: MarketDepth& FIX44 :: MarketDataRequest :: получить (FIX :: MarketDepth&)
const ../../include/quickfix/fix44/MarketDataRequest.h:31:5: note:
нет известного преобразования для аргумента 1 из «int» в «FIX :: MarketDepth»&»
../../include/quickfix/fix44/MarketDataRequest.h:32:5: note:
FIX :: MDUpdateType& FIX44 :: MarketDataRequest :: получить (FIX :: MDUpdateType&)
const ../../include/quickfix/fix44/MarketDataRequest.h:32:5: note:
нет известного преобразования для аргумента 1 из int в FIX :: MDUpdateType&»
../../include/quickfix/fix44/MarketDataRequest.h:33:5: note:
FIX :: AggregatedBook&
FIX44 :: MarketDataRequest :: получить (FIX :: AggregatedBook&) const
../../include/quickfix/fix44/MarketDataRequest.h:33:5: note: нет
известное преобразование аргумента 1 из int в FIX :: AggregatedBook&»
../../include/quickfix/fix44/MarketDataRequest.h:34:5: note:
FIX :: OpenCloseSettlFlag&
FIX44 :: MarketDataRequest :: получить (FIX :: OpenCloseSettlFlag&) const
../../include/quickfix/fix44/MarketDataRequest.h:34:5: note: нет
известное преобразование аргумента 1 из int в
«FIX :: OpenCloseSettlFlag&»
../../include/quickfix/fix44/MarketDataRequest.h:35:5: note:
FIX :: Сфера& FIX44 :: MarketDataRequest :: получить (FIX :: Scope&) const
../../include/quickfix/fix44/MarketDataRequest.h:35:5: note: нет
известное преобразование для аргумента 1 из «int» в «FIX :: Scope»&»
../../include/quickfix/fix44/MarketDataRequest.h:36:5: note:
FIX :: MDImplicitDelete&
FIX44 :: MarketDataRequest :: получить (FIX :: MDImplicitDelete&) const
../../include/quickfix/fix44/MarketDataRequest.h:36:5: note: нет
известное преобразование для аргумента 1 из int в FIX :: MDImplicitDelete&»
../../include/quickfix/fix44/MarketDataRequest.h:37:5: note:
FIX :: NoMDEntryTypes&
FIX44 :: MarketDataRequest :: получить (FIX :: NoMDEntryTypes&) const
../../include/quickfix/fix44/MarketDataRequest.h:37:5: note: нет
известное преобразование для аргумента 1 из int в FIX :: NoMDEntryTypes&»
../../include/quickfix/fix44/MarketDataRequest.h:44:5: note:
FIX :: NoRelatedSym& FIX44 :: MarketDataRequest :: получить (FIX :: NoRelatedSym&)
const ../../include/quickfix/fix44/MarketDataRequest.h:44:5: note:
нет известного преобразования для аргумента 1 из int в FIX :: NoRelatedSym&»
делать: * [Application.o] Ошибка 1

Это было исправлено из-за ошибки обзора.

ЕЩЕ ДРУГОЕ ОБНОВЛЕНИЕ

Вот мой взломанный Application.cpp от tradeclient …

Добавленные строки:

#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? например Цена.

Как и где мне распечатать цену на FIX4.4?

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]