QuickFixN: Как установить поля в определенной последовательности в сообщении QuoteRequest?

У нас есть требование отправлять первые 3 поля сообщения в том порядке, в котором они установлены, то есть QuoteReqID, OnBehalfOfCompID, Account. Однако, когда они добавляются в сообщение, они упорядочены по возрастанию, т. е. Account, OnBehalfOfCompID, QuoteReqID. С помощью группы мы можем определить порядок полей, но я не вижу возможности сделать это для сообщения. Кто-нибудь знает, как мы можем этого добиться?

            var message = new QuoteRequest();
            int[] fieldOrder = new[] {Tags.Currency, Tags.Symbol, Tags.SecurityType, Tags.CFICode, Tags.NoLegs, Tags.LegQty, Tags.LegFutSettDate, Tags.LegSecuritySubType};

            message.SetField(new QuoteReqID(stream.QuoteRequestId));
            message.SetField(new OnBehalfOfCompID(_compId));
            message.SetField(new Account(_accountId));
            var group = new Group(Tags.NoRelatedSym, 0, fieldOrder);
            group.SetField(new Currency(stream.Ccy));
            group.SetField(new Symbol(stream.Ccy1 + "/" + stream.Ccy2));
            group.SetField(new SecurityType("FOR"));
            group.SetField(new CFICode("FORWARD"));
            group.SetField(new NoLegs(1));
            group.SetField(new LegQty(stream.Amount));
            group.SetField(new LegFutSettDate(stream.FutSettDate));
            group.SetField(new LegSecuritySubType("TOD"));

            message.AddGroup(group);

            QuickFix.Session.SendToTarget(message, _ratesSession.SessionId);

person Lewis Hamill    schedule 18.02.2021    source источник
comment
Не знаком с QF/n, но в QF/J вам придется вызывать определенный конструктор Message или FieldMap, которому вы можете передать порядок полей так же, как вы делали это с group. Но, как отметили Грант и Киаран, ваш пробег может варьироваться, поскольку на самом деле это не стандартная вещь, которая там происходит.   -  person Christoph John    schedule 18.02.2021
comment
Кристоф, вы говорите, что можете указать порядок полей на уровне тела в QF/j?   -  person Grant Birchmeier    schedule 18.02.2021
comment
Льюис, не могли бы вы отправить мне личное электронное письмо (см. Grantb.net) и сообщить мне, кто является вашим контрагентом? На самом деле интересно, кто это делает. Это не первый раз, когда я вижу этот запрос.   -  person Grant Birchmeier    schedule 18.02.2021
comment
@GrantBirchmeier да, это возможно. Думал, что это тоже было в QF/n, но, может быть, я путаю. См. stackoverflow.com/a/60048848/4962355 Однако выполнение этого в коде (без повторного создания классов сообщений) имеет некоторые недостатки. ...   -  person Christoph John    schedule 18.02.2021


Ответы (3)


Это абсолютно не то, как должен вести себя протокол FIX. В спецификации поля в Body, не входящие в повторяющуюся группу, могут располагаться в любом порядке. Ваш контрагент требует поведения, не соответствующего требованиям FIX (и я не вижу в этом никакой выгоды).

Таким образом, QuickFIX/n не поддерживает это, потому что... QF/n реализует FIX, а не это глупое поведение без FIX, которое хочет ваш контрагент.

Мне жаль говорить вам об этом, но вам придется каким-то образом взломать движок, чтобы это произошло.

Еще одно предостережение: OnBehalfOfCompID – это поле заголовка, а не основного текста. У QF/n не должно быть проблем с добавлением его в тело исходящего сообщения, но оно, скорее всего, отклонит такое сообщение при входящем. (Спасибо @ciaran-mchale ответ за указание на это.)

person Grant Birchmeier    schedule 18.02.2021
comment
Спасибо за ответ, я исправлю поле OnBehalfOfCompID и повторю попытку. Полезно знать, что это не стандартное поведение, поэтому мне интересно, есть ли что-то еще не так, и они только что сослались на образец рабочего ответа и заметили, что последовательности не совпадают, и указали на это первыми. - person Lewis Hamill; 18.02.2021

Я не знаком с QuickFixN, но знаю, что OnBehalfOfCompID — это поле в заголовке сообщения, а QuoteReqID и Account — поля в теле сообщения. Все поля заголовков, используемые в сообщении, должны появляться перед любыми полями основного текста.

person Ciaran McHale    schedule 18.02.2021
comment
Хороший улов. Я не думаю, что QF/n будет жаловаться, если вы добавите его в тело сообщения. Однако он будет жаловаться, если он будет в теле полученного сообщения. (Что, по мнению этого контрагента, они делают?) - person Grant Birchmeier; 18.02.2021

onbehalfcompid (тег 115) находится в заголовке сообщения об исправлении, а quoteReqID (тег 131) и Account (тег 1) — в теле сообщения об исправлении. и все теги заголовков должны стоять перед тегами основного сообщения. и это применимо ко всем движкам/симуляторам исправлений.

person BalajiDevkatte    schedule 07.03.2021