Блог им. IvanKorotchenya

дешифровка FAST сообщений

Всем добрый день!

Пытаюсь расшифровать Fast сообщение от московской биржи, никак не могу понять как использовать pmap.

Например я получаю от сервера сообщение 
\xe1.\x01\x00\xc0\x10\xbc\x04]\xe1\x03,$\x07\x0be[\x0e\xc3

Первые 4 байта согласно спецификации — преамбула, отбросив ее:
\xc0\x10\xbc\x04]\xe1\x03,$\x07\x0be[\x0e\xc3

Затем получаю первый байт:
\xc0 = 1100 0000
Но шаблон сообщения-сердцебиения вообще не содержит опциональных полей. 

<template name=«0» id=«2108» xmlns="http://www.fixprotocol.org/ns/fast/td/1.1"><string name=«MessageType» id=«35»><constant value=«0» /></string><string name=«BeginString» id=«8»><constant value=«FIXT.1.1»/></string><string name=«SenderCompID» id=«49»><constant value=«MOEX»/></string><uInt32 name=«MsgSeqNum» id=«34»></uInt32><uInt64 name=«SendingTime» id=«52»></uInt64></template>

Столкнулся с этим почти во всех сообщения, во многих 5 байт равен \xC0 хотя в некоторых случаях это не может соответсвовать pmap для этого шаблона. 

Кто-нибудь сталкивался с такой проблемой при дешифроке? Не могу понять где я ошибаюсь
426
16 комментариев
Спросите у chat gpt 4o.
avatar
Auximen, Пробовал, к сожелению ничего адекватного он не смог подсказать насчет этого вопроса
Иван Коротченя, так а зачем вы лезете на уровень байтов? Наверняка сообщения приходят в JSON формате, приведите пример FAST-сообщения. И чем расшифровываете? Pmap есть во многих языках. Python?
avatar
Auximen, сообщения не приходят в json формате, fast это ускоренные fix сообщения. Пример приводил в сообщение, вот \xe1.\x01\x00\xc0\x10\xbc\x04]\xe1\x03,$\x07\x0be[\x0e\xc3
Сообщения fast невозможно расшифровать не лезя на уровень битов. (там используется стоп бит как разделитель). Не очень понимаю что Вы имеете ввиду под pmap есть во многих языках, я имею ввиду pmap как часть протокола fast. Не столь важно на чем, это пример сообщений из python, но если есть примены на js/c++/go я буду очень признателен
Иван Коротченя, может поможет моя статья habr.com/ru/articles/827330/ Но реокомендую вам взять готовые парсеры, если у вас уже на старте такая простая проблема.
avatar
Gambler , Я читал вашу статью, да еще вот эта очень помогла jettekfix.com/education/fix-fast-tutorial/. Если я подставляю другой pmap все начинает работать (не из сообщения, а в ручную подобранный). То есть если я считываю pmap от биржи \xc0 забываю про него и начинаю парсить сообщение с другим (таким чтоб Symbol попадал на место где символ) все идеально работает. Но, к сожелению, такая модель расшифровки работает только для сообщений типа Snapshoot (где Символ содержится не внутри sequence), еще очень долгая и главное я хочу понять что я делаю не так). И самое забавно во всем этом, что такого байта чтоб все поля попадали как нужно в принципе нет в первых 5 байтах приходящих мне. (я уже думаю на тестовый контур, но тех саппорт биржи заверил меня что там все как на настоящем)
Иван Коротченя, ошибка, конечно, где-то у вас. За вас в вашем коде её никто не найдет ) У МосБиржи оптимизация, они транспортный хидер не по стандарту дают для оптимизации, но карта присутствия емнип работает по стандарту.

Ищите у себя. Или как правильно сказали — что-то скачайте готовое. Вы на C++ пишите? mfast как вариант.
avatar
биржа пытается намекнуть вам, что не надо торговать на ней
avatar
Хомяк Пржевальского, Вот так люди и уходят в крипту...)
Есть готовые решения в open source, почему там не посмотреть?
avatar
John Doe, Мне попадаются очень странные варианты, вы имеете ввиду какое-то конкретное?
Кто-нибудь сталкивался с такой проблемой при дешифроке? Не могу понять где я ошибаюсь

Был когда-то такой старый анекдот, про то как молодой программист приходит к опытному товарищу, показывает код и просит подсказать где у него ошибка и получает ответ что в ДНК у него ошибка )

Ты что-нибудь слышал про big-endian и little-endian порядок байт? Раз уж в битиках копаться собрался то поинтересуйся, это полезное знание!
Пафос Респектыч, В памяти есть что-то такое со времен знакомства с ассемблером) Сейчас освежил, но проблема появляется с битами внутри pmap и тут порядок чтения байт мне не поможет(
Но все равно спасибо)
И ещё посмотри в спеку, там вроде написано что сразу после преамбулы идёт число номер сообщения, чтобы его можно было сразу проверить не парся всё остальное, наверное вот это вот он и есть который тебя озадачивает.
Пафос Респектыч, Не очень понял, преамбула ведь и есть номер сообщения (то есть во всяком случае они пишут что добавляют ее для как раз этой проверки)
Иван Коротченя, ну покажи какую ты спеку читаешь?

Читайте на SMART-LAB:
Фото
Смотрим какая на сегодняшний день доходность у юаневых облигаций и как она изменилась за последний месяц
Фото
Число инвесторов RENI достигло 100 тысяч человек
Получили свежий отчет Московской Биржи. Количество наших инвесторов выросло на 4 тыс. до 100 тыс. человек, +62% с начала года. Средний размер...
Фото
Приближается конец года: что купить на ИИС?
Наступил декабрь, а значит, самое время пополнять ИИС. Тогда налоговый вычет вы сможете получить уже в начале следующего года. Для максимизации...

теги блога Иван Коротченя

....все тэги



UPDONW
Новый дизайн