Как лучше всего получать цену Bid / Offer за каждое движение тика / цены с помощью QuickFIX / n? - PullRequest
0 голосов
/ 22 января 2020

В настоящее время я использую следующий код для получения текущих цен. Тогда я получаю значения на public void OnMessage(QuickFix.FIX44.MassQuote m, SessionID s)

            QuickFix.FIX44.MarketDataRequest msg = new QuickFix.FIX44.MarketDataRequest();

            // Fill message fields
            msg.SetField(new MDReqID("001"));
            msg.SetField(new SubscriptionRequestType('1'));
            msg.SetField(new MarketDepth(0));
            msg.SetField(new MDUpdateType(MDUpdateType.FULL_REFRESH));

            // Add the MDEntryTypes group
            QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup noMDEntryTypes = new QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup();
            noMDEntryTypes.SetField(new MDEntryType('0'));
            msg.AddGroup(noMDEntryTypes);

            // Add the NoRelatedSym group
            QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup noRelatedSym = new QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup();
            noRelatedSym.SetField(new Symbol(pair.Insert(3, "/")));
            msg.AddGroup(noRelatedSym);


            Console.WriteLine("Sending Market Request...");
            if(!_priceSession.SendRedundantResendRequests) _priceSession.SendRedundantResendRequests = true;
            SendMessagePrice(msg);

Но этот метод не идеален для меня. Я хочу видеть текущие цены сразу после их обновления. В этом небольшом примере я хотел бы Console.WriteLine() самые последние цены Bid / Offer на консоли, как только они обновляются (я хочу видеть цены только одной валютной пары за раз).

It было бы здорово, если бы кто-то мог предложить лучший способ получить данные быстрее и проще.

Заранее спасибо.

РЕДАКТИРОВАТЬ: Ответ от сервера

8 = FIX.4.4 | 9 = 378 | 35 = я | 34 = 2 | 49 = ХХХХХ | 52 = 20200122-10: 09: 26,537 | 56 = QXXX | 117 = 1 | = 1 296 | 302 = 001 | 295 = 5 | 299 = 0 | 106 = 0 | 134 = 2000000 | 135 = 1000000 | 188 = 1,10914 | 190 = 1,10916 | 299 = 1 | 106 = 10 | 134 = 1800000 | 135 = 1000000 | 188 = 1,10914 | 190 = 1,10916 | 299 = 2 | 106 = 11 | 134 = 1500000 | 135 = 500000 | 188 = 1,10914 | 190 = 1,10916 | 299 = 3 | 106 = 6 | 134 = 1000000 | 135 = 100000 | 188 = 1,10914 | 190 = 1,10916 | 299 = 4 | 106 = 6 | 134 = 2000000 | 135 = 5400000 | 188 = 1.10913 | 190 = 1.10917 | 10 = 113 |

РЕДАКТИРОВАТЬ: Через некоторое время я получаю эту ошибку после получения этого сообщения от контрагента

Получено сообщение

Входящие: 8 = FIX.4.4 | 9 = 502 | 35 = W | 34 = 7 | 49 = XXXXX | 52 = 20200122-10: 09: 2 8,074 | 56 = QXXX | 55 = EUR / USD | 262 = 001 | 268 = 10 | 269 = 0 | 270 = 1,10914 | 271 = 1700000 | 299 = 1 | 106 = 6 | 269 = 0 | 270 = 1.10914 | 271 = 1000000 | 299 = 3 | 106 = 11 | 269 = 0 | 270 = 1,10914 | 271 = 1000000 | 299 = 0 | 106 = 10 | 269 = 0 | 270 = 1,10913 | 271 = 3000000 | 299 = 4 | 106 = 10 | 269 ​​= 0 | 270 = 1,10913 | 271 = 1500000 | 299 = 2 | 106 = 9 | 269 = 1 | 270 = 1,10916 | 271 = 1000000 | 299 = 0 | 106 = 0 | 269 = 1 | 270 = 1.10916 | 271 = 1000000 | 299 = 1 | 106 = 10 | 269 = 1 | 270 = 1,10916 | 271 = 500000 | 299 = 2 | 106 = 11 | 269 = 1 | 270 = 1,10916 | 271 = 100000 | 299 = 3 | 106 = 6 | 269 ​​= 1 | 270 = 1,10917 | 271 = 4500000 | 299 = 4 | 106 = 13 | 10 = 232

событие: сообщение 7 отклонено: тег появляется более одного раза (поле = 106)

1 Ответ

1 голос
/ 22 января 2020

Поскольку вы используете PrimeXM, обновления рыночных данных передаются немного по-другому. Они отправляют MassQuote сообщений (msgtype i), на которые вам необходимо ответить MassQuoteAck сообщением (msgtype b).

Не забудьте отозвать 117/QuoteID из MassQuote на MassQuoteAck.

Это должно привести к постоянному обновлению цен. Я предполагаю, что PrimeXM ждет каждого ACK перед отправкой новых обновлений.

...