Андрей К
Андрей К личный блог
19 февраля 2016, 14:30

Изучаю FIX протокол с нуля. Пытаюсь выставить заявки. Первые обсуждения.

Начало положено тут 
Продолжил тут
Затем тут

Обсуждения

     Сегодня будет без введения. Мои первые публикации вызвали небольшие обсуждения, как в комментариях, так и в личных беседах. Если классифицировать, то можно подвести некие итоги:
  • занимаюсь ерундой, до меня уже давно все создано. Прежде чем, что либо начать, конечно же я изучаю положение дел. Я прекрасно изучил, что уже есть конкретные разработки. Но я уже говорил, что я готовлюсь к хорошим вакансиям и хочу знать досконально протокол. Человек я щепетильный, мне важно знать каждую мелочь. Другого метода изучения я не придумал. 
  • мой код не оптимален. Хоть я и не услышал конкретные доводы, но все же склонен к такой мысли. Код только строится и конечно будет еще дорабатываться.
  • выбрал не ту платформу. Тут самое интересное. Были интересные беседы. Но надо заметить. Я не отвечаю на позывы типа: «си ерунда, бери  то-то». Я считаю это не профессиональным. Но все же интересные моменты были. Итог:
      — Для скоростного трейдинга желательно уходить на Linux. Основной довод — несовершенство windows многозадачности. Лишним доказательством будет являться набор постоянных вакансий на рынке, где требуются именно Linux программисты. Также вы должны заметить, какое внимание Linux оказывается на будущей конференции алготрейдеров (27 февраля).
    — Желательное использование Си и Java. Ничего пока не могу сказать. Но стоит заметить, как и в беседах было подчеркнуто, так и в вакансиях на рынке, западные компании требуют именно java программисты. 
  • в любом случае, направление движения изучения вырисовывается, за что, спасибо собеседникам
  • в личных беседах я увидел заинтересованности в изучении протокола. Думаю статьи и дальше будут полезны. Литературы доступной с разжевыванием мало. А интерес смотрю есть.
  • получил несколько предложений поработать вместе. Оказывается СЛ читают интересные люди. Это радует.

Выставление заявок

     Итак по делу. В рабочую торговую неделю было сложно изучать (на экспирациях предел внимания). Только вечерами. Что я понял.
  • В документации от самой биржи есть масса недочетов. Быть может я их сформирую и отправлю им на исправление. (ну например, в одном месте говорится, что поле Account — три символа, в другом 7 символов). Более того, я привык ответы находить сам, и в поисках очередного, наткнулся на документацию западного брокера, 1 в 1 напоминающую документацию нашей биржи. Сложилось мнение, что ммвб взяли ее, перевели, немножко адаптировали, но не до исправили.
  • так же и работает клиент, взятый на ftp. Он работает хорошо, но нужно теперь знать тонкости. Иногда он может отправить сообщения не в том формате.
  • в общем как вы поняли, на этом этапе, все методом тыка.
  • и это тоже плюс. Попутно выяснил для себя массу нюансов протокола, пытаясь побороть ошибки.  
    Этим самым методом, я вывел набор полей, которые нужно отправить, чтобы заявка состоялась, а именно (далее будут поля только для Forts):
  • стандартный заголовок сообщения
  • TransactTime — время отправки ордера в формате yyyymmdd-hh:mm:ss.fff
  • ClOrdId — пользовательский id ордера. Можете придумать Random. Я просто передаю hhmmssfff
  • OrdType — тип ордера. На Forts (в отличии от ммвб) по маркету не принимает. Только Limit
  • Account — код торгового счета. (обновлено. Благодаря пользователю на форуме ММВБ, стало ясно, что Account = последним трем символам присвоенного SenderCompId. Обсуждение тут
  • Side — тип сделки. (1 — Buy, 2 — Sell)
  • Symbol — инструмент. Подходят коды вида RIH6
  • Price — цена
  • OrderQTY — объем сделки
  • Концовка сообщения
    Это список минимальных полей, чтобы ордер принялся системой. Далее про тонкости на тестовом контуре биржи. Когда я регистрировался, мне выдали только SenderID и TargertID, никакого Account я не знал. Перерыв весь интернет, я подумал, что тех служба мне что то недорассказала. Я им написал. Как всегда сработали отменно. Очень быстро ответили и выдали мне код счета. Весь последующий день я пытался подобрать нужные поля и данные. Получал много ошибок в ответ (либо вообще пустоту), но в итоге все замыкалось на получении ответа с текстом «Insufficient client funds». Опять перерыв интернет и ничего не найдя, я написал в тех службу биржи с просьбой попробовать начислить виртуальных денежных средств на счет. Тех служба опять сработала быстро, расширив мне лимиты.
В итоге я отправляю заявку и получаю успешный ответ:
Изучаю FIX протокол с нуля. Пытаюсь выставить заявки. Первые обсуждения.
Вот такой нюанс и очередной опыт. Более подробно напишу на выходных.
53 Комментария
  • AlexShul
    19 февраля 2016, 14:36
    К вакансиям, говорите, готовитесь… Поржал, спасибо.
  • Aberkromb Garell
    19 февраля 2016, 14:58
    круто!
  • sortarray sortarray
    19 февраля 2016, 15:04
    Сам по себе призыв к «неизобретению велосипедов» есть ни что иное, как призыв к обмазыванию обертками над обертками над обертками с ног до головы:) Это мантра для дебилов, которая в то же время выгодна дебилам, так как сами они мало что могут:) Ваш подход правильный не только с точки зрения проф роста, но и с точки зрения архитектуры. За ад зависимостей рано или поздно придется платить. Мнимая простота реализации всегда оборачивается сложностью.

    ЗЫ прошу не холиварить, это сугубо ИМХО, никому ничего не навязываю.
      • sortarray sortarray
        19 февраля 2016, 15:25
        Андрей К, 
        Performance can be tricky as illustrated by the following:

         “Those who would forever give up correctness for a little temporary performance deserve neither correctness nor performance.” [Philips 2013]

         “The key to performance is elegance, not battalions of special cases” [John Bentley]

         “If you want to achieve performance, start with comprehensible.” [Philips 2013]

         Those who would forever give up performance for a feature that slows everything down deserve neither the feature nor performance. 

        arxiv.org/pdf/1008.2748.pdf
  • Garry36.6
    19 февраля 2016, 15:19
    Сильно.
  • crazyFakir
    19 февраля 2016, 15:38
    позывы типа: «си ерунда, бери  то-то». Я считаю это не профессиональным.

    ты фикс для чего разбираешь? чтобы по инету пакеты гонять?
    а на коло винду поставишь? 
    прям жгун. :)

    и где ты видел, чтобы алготрейдеры говорили что-то значимое в этом зоопарке? зачем? для кого? :)
      • Aberkromb Garell
        19 февраля 2016, 15:44
        Андрей К, а на ваш взгляд чем вызвам спрос на java за бугром, или это, что называется, legacy code? 
          • Aberkromb Garell
            19 февраля 2016, 15:55

            Андрей К, просто .net вроде как уже и на Линуксах есть, и микромягкие говорили что Mono теперь IDE для линуксов и маков.

            И жду не дождусь когда вы наконец выложите первые коды хотябы просто побаловаться =). Потому что сам осбирался покурить протокол.

            • crazyFakir
              19 февраля 2016, 16:00
              Aberkromb Garell, 
              вроде как
              это надо жирным и на стенку ...
              выше ответил
              • Aberkromb Garell
                19 февраля 2016, 16:13
                Андрей К, ок, большое спасибо
          • Niktesla (бывш. Бабёр-Енот)
            19 февраля 2016, 17:08
            Андрей К, у них там кстати тоже FIX/FAST есть… или они демку так просто не дают? 
              • Niktesla (бывш. Бабёр-Енот)
                19 февраля 2016, 18:57
                Андрей К, действительно, непонятно получилось))
                я про Dukas.
        • crazyFakir
          19 февраля 2016, 15:48
          Aberkromb Garell, это не там спрос, это тут его отсуствие по причине legacy people
        • crazyFakir
          19 февраля 2016, 15:59
          Aberkromb Garell, для размышления

          линукс и джава это готовый консруктор и довольно давно.
          шарп там только вылезает из песочницы.

          но в РФ уже несколько поколений программеров считают студию чем-то неприходящим

          мышевозы поколения пепси, ёпта
          • Aberkromb Garell
            19 февраля 2016, 16:02
            crazyFakir, что имеется ввиду под словом «неприходящим» =) 
            • crazyFakir
              19 февраля 2016, 17:05
              Aberkromb Garell, имеется в виду, что в школах, вузах и домах уже лет двадцать доминирует винда и люди, даже толковые и грамотные с болью и муками захоядт на консоль и избавляются от в кровь въевшихся инстинктов.

              тоже самое и с музыкой. отсуствие развитой системы начального музыкального образования делает невозможным спрос на качественную музыку, даже неклассическую
      • crazyFakir
        19 февраля 2016, 15:46
        Андрей К, ну то есть так и запишем:
        вместо писать себе втихую парсер и почитывать кванто-блоги  и почту сапорта у пациента дифицит общения нарывает графоманством

        ну то есть типа:  удачи  жедаю :)
  • Игорь Николаев
    19 февраля 2016, 15:51
    Не обращайте внимания на высеры и подобное, а только на аргументированную критику (без этого ни как). Нет лучшего опыта, чем делать что то самому… с пробами, ошибками, кучей переделок. Именно только в этом случае можно получить реальные знание и понимание с чем ты работаешь и как оно вообще работает), а не когда берешь готовое решение.
    Удачи!
  • Александр
    19 февраля 2016, 16:08
    Приятно видеть такие посты. Пишите еще! Спасибо!)
  • Иванов
    19 февраля 2016, 16:22
    >занимаюсь ерундой, до меня уже давно все создано.

    Не слушай никого, ты разбираешься с протоколом для себя. Ковыряться в чужих исходниках — это АДъ, проще для понимания самому написать с нуля.

    >мой код не оптимален

    Разберешься с протоколом, дальше уже можно заняться оптимизацией или переписать все с нуля, главное разобраться в протоколе.

    >выбрал не ту платформу.

    Тоже бред. Windows не такая уж плохая и тормозная система, а наговнокодить можно под чем угодно. Тем более для изучения пофигу под что и на чем писать.

    Вообщем осторожнее относись к критике, здравое зерно конечно бывает, но восновном это тролинг.
    Полезное дело делаешь! Спасибо! Топики добавил в избранное, потом тоже в планах разбираться, но правда сразу под Linux :)





      • Иванов
        19 февраля 2016, 16:30
        Андрей К, Ага, если руки дойдут наверное тоже напишу на смарте статью, только боюсь не скоро это будет, но в планах есть =)
  • Real Lord
    19 февраля 2016, 16:42
      

    ClOrdId — пользовательский id ордера. Можете придумать Random. Я просто передаю hhmmssfff

    Для высокочастотного трейдинга в несколько потоков, будет плохо. Если уж брать hhmmssfff, то надо еще делать RAND() и делать поле типа hhmmssfff_ххххххх или hhmmssfffxxxxxxxx.

    Тогда точно будет корректно. У меня были коллизии из-за этого.

     
      • Niktesla (бывш. Бабёр-Енот)
        19 февраля 2016, 17:57
        Андрей К, время хорошо для отладки, а рэндомы нафиг не нужны. Каждому потому по Seed'у с шагом 10млн и inc(Seed)…
  • usertrader
    20 февраля 2016, 00:34
    1. линукс да это тема причем лучше точить под себя — он же в свободном коде. Можно оставить то что действительно нужно. Работать будет точно быстрее, чем винда. Графика там точно не нужна. 
    2. язык чистый Си без всякого ООП ну или Си++ но ООП не брать — он не нужен здесь. вещь вредная ибо надо работать быстро. Там фишка в компиляторе ( архиважная вещь для Си! ) — чтобы процессор по полной грузить на уровне маш.кода. По данной теме ( работа с заявками в стакане ) если HFT брать вообще лучше RISK процессор с процессором ввода-вывода через канальные программмы — но безумно дорогая штука будет. Но западники придут к этому. + распределенная выч. сеть если нужен более детальный обсчет рынка.   
    3. джава у западников  - нормально прогеру без разницы на чем писать — кнопки просто везде по разному стоят, а смысл все тот же. да и не будет джава быстро работать.
    4. сам фикс — тыкать надо только тыканьем и можно понять как двигается он. тем более все равно по-разному он будет работать на каждой бирже. И если сильно копать то «в любой программе есть хотя бы одна ошибка». Если понял, что фикс флудит значит докопал. Флудить он будет. 
  • Счастливый Конец
    20 февраля 2016, 00:35
    А в FIX стакан получить можно? Ну если не стакан, то котировку как в таблице параметров квика (лучший bid/ask и их размеры). Спасибо.
    • rename37
      20 февраля 2016, 18:50
      Андрей К, предлагаю сразу выкладывать на GitHub
    • rename37
      20 февраля 2016, 21:22
      Андрей К, кстати есть контакты одного индуса FIX Protocol Analyst если что.
  • broker25
    01 марта 2016, 13:48
    вопрос автору, я не понял, что там с раундтрипом? Две секунды??? или это тестовое подключение? В боевом режиме какой раундтрип?
  • broker25
    04 февраля 2017, 13:01
    На днях брал тестовый логин, и ведь тоже про account никто ничего не сказал, а после повторного запроса дали account неправильный
  • MegaFan
    26 января 2020, 21:58
    Жаль, что продолжения не последовало, да и проект с яндекса недоступен :(

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн