Изменение порядка полей в сообщении FIX
Я использую инициатор QuickFix/n. Мой брокер отклоняет мои сообщения о входе в систему, ссылаясь на неправильный порядок полей (тегов) в заголовке сообщения. Вместо 34, 49, 52, 56 порядок должен быть 49, 56, 34, 52.
QuickFix/n, кажется, автоматически сортирует различные поля в трех областях (заголовок, тело, трейлер) сообщений по номеру тега при отправке сообщения в сеанс.
Есть ли способ изменить порядок полей в сообщении, отправленном получателю? Есть ли способ предотвратить сортировку? (Добавление групп к сообщению или изменение словаря данных не работает.)
Или, если это невозможно с QuickFix/n, есть ли механизм FIX, который позволяет изменять порядок полей в сообщениях?
4 ответа
Эта ошибка обычно вызывается попыткой поместить поле заголовка в тело сообщения. Объект DataDictionary, предоставленный вами самостоятельно, если вы вручную добавляете его в сеанс, или из самого сеанса (если вы используете файл конфигурации, чтобы сообщить сеансу, какой словарь данных использовать) имеет функции, называемые isHeaderField (int tagNumber) и isTrailerField (int tagNumber), чтобы помочь вам решить, должно ли поле быть в заголовке или трейлере. Различные файлы словаря данных для разных контрагентов могут (я видел это только один или два раза) помещать поля заголовка в часть тела сообщения, поля тела в заголовок или (чаще всего) настраиваемые теги в заголовок. Это означает, что, как правило, рекомендуется использовать доступные функции, чтобы проверить, следует ли добавлять поле в заголовок, тело, трейлер или повторяющуюся группу в теле. Поскольку этот вопрос касается сообщений о входе в систему, я предполагаю, что вы добавляете поля к этому типу сообщений, поэтому мне может понадобиться увидеть код, делающий это, чтобы помочь в дальнейшем.
По умолчанию quickFix переупорядочивает теги в группе в порядке возрастания. Если вы хотите сохранить порядок, вам нужно перестроить флягу быстрого исправления, как предложено здесь.
Изменение порядка полей в сообщении FIX. Я использую Vb.net QuickFIXn.FIX5.0SP2.1.10.0.
Imports QuickFix
Public Class ApplicationFixFxAll
Inherits QuickFix.MessageCracker
Implements QuickFix.IApplication
Public Sub ToAdmin(message As Message, sessionID As SessionID) Implements IApplication.ToAdmin
message.Header.HEADER_FIELD_ORDER = {8, 9, 35, 56, 34, 49, 52}
Debug.Print($"toAdmin {Now:yyyMMdd HHmm} {message.ToString}")
End Sub
...
End Class
для Python : откройте файл быстрого исправления в папке site-packages, содержащий нужный тип сообщения. Все сообщения представляют собой классы, имеющие массив «order», определяющий порядок тегов.