Я реализую набор клиент-сервер на основе QuickFIX. Когда я пытаюсь отправить сообщение, содержащее повторяющуюся группу сторон, я получаю отказ со следующим описанием: "58=Тег не определен для этого типа сообщения|371=447|"
Я пытаюсь отправить сообщение типа OrderCancelReplaceRequest.
Пример кода:
FIX44::OrderCancelReplaceRequest order(FIX::MsgType("G"));
FIX44::OrderCancelReplaceRequest::NoPartyIDs party;
// 448-PartyID
party.set(FIX::PartyID("PartyId"));
// 447-PartyIDSource
party.set(FIX::PartyIDSource('B'));
// 452-PartyRole
party.set(FIX::PartyRole(1));
// 802-NoPartySubIDs
party.set(FIX::NoPartySubIDs(0));
order.addGroup(party);
...
Если сообщение не содержит группы сторон, оно успешно проверяется сервером.
Более того, он проходит валидацию успешно, даже если содержит группу FIX44::OrderCancelReplaceRequest::NoAllocs:
FIX44::OrderCancelReplaceRequest::NoAllocs alloc;
// 79-AllocAccount
alloc.set(FIX::AllocAccount("Alloc Account"));
// 80-AllocQty
alloc.set(FIX::AllocQty(4.2));
order.addGroup(alloc);
Итак, я вижу эту проблему только тогда, когда пытаюсь использовать группу Сторон.
Файл конфигурации для сервера:
[DEFAULT]
ConnectionType=acceptor
SocketAcceptPort=28663
SocketReuseAddress=Y
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
DataDictionary=<some path here>/FIX44.xml
FileLogPath=QuickFixServerLog
ValidateUserDefinedFields=N
[SESSION]
BeginString=FIX.4.4
SenderCompID=EXECUTOR
TargetCompID=CLIENT1
FileStorePath=store
Конфигурационный файл клиента:
[DEFAULT]
ConnectionType=initiator
ReconnectInterval=1
FileStorePath=store
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
DataDictionary=<some path here>/FIX44.xml
HttpAcceptPort=9911
ValidateUserDefinedFields=N
ResetOnLogout=Y
ResetOnLogon=Y
[SESSION]
BeginString=FIX.4.4
SenderCompID=CLIENT1
TargetCompID=EXECUTOR
SocketConnectHost=127.0.0.1
SocketConnectPort=28663
HeartBtInt=15
Обновление
Пример запроса, полученного сервером (из логов сервера):
8=FIX.4.4|9=234|35=G|34=2|49=CLIENT1|52=20150417-10:49:07.715|56=EXECUTOR|1=Account|11=Id123|38=11.11|40=1|41=OrigId321|44=4.2|54=2|55=Symbol|60=20150417-10:49:07|78=2|79=AllocAccount1|79=AllocAccount2|80=10|80=20|447=B|448=PartyId|452=1|453=1|802=0|10=185|
Ответ на этот запрос:
8=FIX.4.4|9=124|35=3|34=2|49=EXECUTOR|52=20150417-10:49:07.719|56=CLIENT1|45=2|58=Tag not defined for this message type|371=447|372=G|373=2|10=060|
ValidateUserDefinedFields=N
может мешать, если у вас есть пользовательские поля. Попробуйте сделать Y и посмотрите. Но, как сказал @Grant, просмотр сообщений очень поможет. - person DumbCoder   schedule 17.04.2015<Parties> component block
был добавлен только с версии 4.3, возможно, вы общаетесь с сервером версии 4.2? - person TT.   schedule 17.04.2015ValidateFieldsOutOfOrder=N
в конфигурацию? - person TT.   schedule 18.04.2015453
должно быть первым в блоке компонентовParties
a> и это то, что заставляет сервер сопротивляться. Последняя конфигурация Quickfix/J даже имеет идентификаторValidateUnorderedGroupFields
для обхода проблемы с неупорядоченными групповыми полями, но я не нашел такой опции конфигурации в версии QuickFIX для C++. - person TT.   schedule 20.04.2015MessagesTestCase.cpp
. В этом файле найдите строкуNoPartyIDs
. В примере есть добавление группыNoPartyIDs
к сообщениюFIX44::NewOrderCross
. По-видимому, это используетFIX44::NewOrderCross::NoSides
в качестве контейнера для группыNoPartyIDs
. Может быть, вы могли бы попробовать и посмотреть, нужен ли такой же шаблон использования для добавления идентификаторов вечеринок вFIX44::OrderCancelReplaceRequest
? - person TT.   schedule 20.04.2015453
будет перед любым другим тегом в группе NoPartyIDs (448 447 452 802)? - person TT.   schedule 20.04.2015