как ответить на массовый запрос?

#quickfix #quickfixj #quickfixn

#быстрое исправление

Вопрос:

я пытаюсь получить ставку и спросить брокера PrimeXM. но я не знаю, что я делаю не так. кто-нибудь может показать мне пример ответа на массовую цитату?

Как только я получаю ответ на запрос массового запроса, я отправляю запрос массового запроса, но возникает ошибка «Отсутствует требуемый тег».

Журналы:

 ToApp 8=FIX.4.4 |9=86 |35=V |34=2 |49=XXXX|52=20200826-15:10:02.528 |56=XXXX |262=0 |263=1 |264=0 |146=1 |55=USD/JPY |10=205 |
FromApp 8=FIX.4.4 |9=135 |35=i |34=2 |49=XC80 |52=20200826-15:10:02.769 |56=Q097 |117=1 |296=1 |302=0 |295=1 |299=0 |106=10 |134=3000000 |135=1000000 |188=106.11 |190=106.112 |10=048 |
OnMessage MassQuote 8=FIX.4.4 |9=135 |35=i |34=2 |49=XC80 |52=20200826-15:10:02.769 |56=Q097 |117=1 |296=1 |302=0 |295=1 |299=0 |106=10 |134=3000000 |135=1000000 |188=106.11 |190=106.112 |10=048 |
ToApp 8=FIX.4.4 |9=57 |35=b |34=3 |49=XXXX|52=20200826-15:10:02.814 |56=XXXX |117=1 |10=002 |
ToAdmin 8=FIX.4.4 |9=100 |35=3 |34=4 |49=XXXX|52=20200826-15:10:02.931 |56=XXXX |45=3 |58=Required tag missing |371=117 |372=i |373=1 |10=238 |


  

Запрос рыночных данных:

     private void QueryMarketDataRequest() {
      MDReqID mdReqId = new MDReqID(GetFreeID);
      SubscriptionRequestType subscriptionRequestType =
        new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES);
      MarketDepth marketDepth = new MarketDepth(0);

      MarketDataRequest.NoRelatedSymGroup symbolGroup = new MarketDataRequest.NoRelatedSymGroup();
      symbolGroup.Set(new Symbol("USD/JPY"));

      MarketDataRequest message = new MarketDataRequest(mdReqId, subscriptionRequestType, marketDepth);
      message.AddGroup(symbolGroup);

      SendMessage(message);
    }
  

Ответ на сообщение с массовым цитированием:

     public void OnMessage(MassQuote message, SessionID sessionId) {
      _logger.LogDebug($"OnMessage MassQuote {message}");

      MassQuoteAcknowledgement m = new MassQuoteAcknowledgement();
      m.QuoteID = message.QuoteID;
      SendMessage(m);
    }
  

Комментарии:

1. Итак, вы разобрались? Если да, закройте вопрос. В будущем вам было бы очень полезно включить соответствующие строки журнала сообщений.

2. @GrantBirchmeier Я еще не смог решить эту проблему, я добавил журналы в соответствии с вашим советом. Спасибо

3. ОК. У вас был предыдущий комментарий (теперь удаленный), который вводил в заблуждение.

Ответ №1:

Похоже, вам нужно ознакомиться со спецификацией подключения PrimeXM и обновить свой XML-файл DataDictionary, чтобы он соответствовал ей.

Например, если в их спецификации указано, что они не собираются отправлять 117 в своем сообщении MassQuote, то вам нужно удалить 117 из определения MassQuote в вашем словаре.

Комментарии:

1. Я пытаюсь отредактировать dic для поддержки PrimeXM. Спасибо.

2. Я изменил его следующим образом <field name="QuoteID" required="N" /> , и это сработало!

3. Наверняка будет больше мест. Если у PrimeXM есть спецификация, вы должны использовать ее, чтобы убедиться, что ваш DD соответствует. Если вы сделаете это правильно сейчас, это избавит вас от головной боли позже.

4. я видел в документе PrimeXM, и QuoteID не был обязательным. теперь мне просто нужна цена, и она работает отлично. я считаю, что когда мне нужно будет сделать заказ, у меня будет больше проблем со словарем. но я понял, как правильно решить проблемы со словарем вместе с вами. Спасибо: P

Ответ №2:

мой файл .cfg использовался как DataDictionary=Y, но иногда кажется, что PrimeXM отвечает на массовый запрос (MsgType=i) без QuoteID (117), но в моем FIX44.xml значение 117 задано как необходимое. и это было причиной ошибки.

итак, я изменил .cfg UseDataDictionary=N, и он перестал выдавать ошибку.

Я не знаю, почему PrimeXM отправляет MassQuote без QuoteID, но я думаю, что решил свою проблему.

Спасибо.

 dbug: QuickFix.IApplication[0]
      FromApp 8=FIX.4.4╔9=95╔35=i╔34=63╔49=XC80╔52=20200826-16:58:12.444╔56=Q097╔106=10╔190=106.008╔295=1╔296=1╔299=0╔302=0╔10=229╔
dbug: QuickFix.IApplication[0]
      OnMessage MassQuote 8=FIX.4.4╔9=95╔35=i╔34=63╔49=XC80╔52=20200826-16:58:12.444╔56=Q097╔106=10╔190=106.008╔295=1╔296=1╔299=0╔302=0╔10=229╔
warn: QuickFix.IApplication[0]
      field not found for tag: 117
  

Комментарии:

1. UseDataDictionary=N это позволит вам столкнуться со всевозможными проблемами, когда вы пытаетесь проанализировать повторяющиеся группы, поэтому это «исправило» вашу текущую проблему, но, скорее всего, вызовет последующие проблемы позже.

2. Поскольку я недавно начал с исправления, я не знал о важности UseDataDictionary=Y. но теперь я всегда буду пытаться решить проблему, сохраняя UseDataDictionary=Y

3. Это распространенная ошибка среди новичков. Рад, что мы исправили вас раньше 🙂