Блог им. karat39

Изучаю 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 протокол с нуля. Пытаюсь выставить заявки. Первые обсуждения.
Вот такой нюанс и очередной опыт. Более подробно напишу на выходных.
★24
53 комментария
К вакансиям, говорите, готовитесь… Поржал, спасибо.
avatar
AlexShul, да, пытаюсь. Завалил несколько собеседований (банк и брокерская компания) из за незнания этого протокола.
avatar
круто!
avatar
Сам по себе призыв к «неизобретению велосипедов» есть ни что иное, как призыв к обмазыванию обертками над обертками над обертками с ног до головы:) Это мантра для дебилов, которая в то же время выгодна дебилам, так как сами они мало что могут:) Ваш подход правильный не только с точки зрения проф роста, но и с точки зрения архитектуры. За ад зависимостей рано или поздно придется платить. Мнимая простота реализации всегда оборачивается сложностью.

ЗЫ прошу не холиварить, это сугубо ИМХО, никому ничего не навязываю.
avatar
sortarray sortarray, я такого же мнения про обертки. Но собеседники мотивировали тем, что там уже код оптимальный, работает масса людей над ним и тем самым он быстрее. Я думаю в этом тоже что то есть.
avatar
Андрей К, 
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
avatar
sortarray sortarray, интересно, спасибо.
avatar
Сильно.
avatar
позывы типа: «си ерунда, бери  то-то». Я считаю это не профессиональным.

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

и где ты видел, чтобы алготрейдеры говорили что-то значимое в этом зоопарке? зачем? для кого? :)
avatar
crazyFakir, я наверное не правильно выразился. Считаю не профессиональным бездоводно писать. У вас считаю было много по делу.
Фикс пока разбираю, честно говоря, чтобы пока его знать =). Уверен буду применять его у будущего работодателя. А какая у него инфраструктура, будем посмотреть
avatar
Андрей К, а на ваш взгляд чем вызвам спрос на java за бугром, или это, что называется, legacy code? 
avatar
Aberkromb Garell, я честно говоря очень мало программировал на нем. Только в TWS делал кое че, и в Dukas. Не могу нормально ответить. crazyFakir упамянал (если я не ошибаюсь) про кроссплатформенность как плюс + под Linux. Перечитайте комменты к предыдущей статье. Там мы немного поболтали.
avatar

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

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

avatar
Aberkromb Garell, 
вроде как
это надо жирным и на стенку ...
выше ответил
avatar
Aberkromb Garell, сейчас выложу куда нибудь на побаловаться.
avatar

Aberkromb Garell, https://yadi.sk/d/AiCzN12mp7e3E

имейте ввиду, там нужно в консольном заполнить targetID и Account. получите у биржи. Кода на побаловаться хватит.

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

avatar
Андрей К, ок, большое спасибо
avatar
Андрей К, у них там кстати тоже FIX/FAST есть… или они демку так просто не дают? 
Бабёр-Енот, про кого речь? не совсем понял. TWS? не дают.
avatar
Андрей К, действительно, непонятно получилось))
я про Dukas.
Бабёр-Енот, дукас демо открывает охотно на свою платформу. Она полностью на Java и программировать нужно на Java. В принципе проблем там не имел. А вот про fix/fast у них не в курсе.
avatar
Aberkromb Garell, это не там спрос, это тут его отсуствие по причине legacy people
avatar
Aberkromb Garell, для размышления

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

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

мышевозы поколения пепси, ёпта
avatar
crazyFakir, что имеется ввиду под словом «неприходящим» =) 
avatar
Aberkromb Garell, имеется в виду, что в школах, вузах и домах уже лет двадцать доминирует винда и люди, даже толковые и грамотные с болью и муками захоядт на консоль и избавляются от в кровь въевшихся инстинктов.

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

ну то есть типа:  удачи  жедаю :)
avatar
crazyFakir, да да. У трейдера это болезнь. Дифицит общения. =). Я много пишу на другом форуме по рынку. На этом решил про программирование. Спасибо за удачу.
avatar
Не обращайте внимания на высеры и подобное, а только на аргументированную критику (без этого ни как). Нет лучшего опыта, чем делать что то самому… с пробами, ошибками, кучей переделок. Именно только в этом случае можно получить реальные знание и понимание с чем ты работаешь и как оно вообще работает), а не когда берешь готовое решение.
Удачи!
avatar
Игорь Николаев, спасибо за удачу. Так вроде и пытаюсь.
avatar
Приятно видеть такие посты. Пишите еще! Спасибо!)
avatar
>занимаюсь ерундой, до меня уже давно все создано.

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

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

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

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

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

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





avatar
Иванов, пишите про Линукс. =) Мы будем читать. У меня в планах несомненно написать под него теперь и опробовать. Но это будет не скоро.
avatar
Андрей К, Ага, если руки дойдут наверное тоже напишу на смарте статью, только боюсь не скоро это будет, но в планах есть =)
avatar
  

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

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

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

 
avatar
Real Lord, важное замечание, спасибо.
avatar
Андрей К, время хорошо для отладки, а рэндомы нафиг не нужны. Каждому потому по Seed'у с шагом 10млн и inc(Seed)…
Бабёр-Енот, я кстати вторым потоком решил попробовать считывать сокет зацикленно. Пока все это дело привело к фиаско. К замедлению. Решил изучить все до конца, потом перейти на потоки.
avatar
OakStreet, написал.
avatar
Андрей К, странно на почте ничего нет. Скинь тогда свою в личку.
avatar
OakStreet, скинул в личку. Личка читабельна?
avatar
Андрей К, да, читать можно.
Отписался почтой. 
avatar
1. линукс да это тема причем лучше точить под себя — он же в свободном коде. Можно оставить то что действительно нужно. Работать будет точно быстрее, чем винда. Графика там точно не нужна. 
2. язык чистый Си без всякого ООП ну или Си++ но ООП не брать — он не нужен здесь. вещь вредная ибо надо работать быстро. Там фишка в компиляторе ( архиважная вещь для Си! ) — чтобы процессор по полной грузить на уровне маш.кода. По данной теме ( работа с заявками в стакане ) если HFT брать вообще лучше RISK процессор с процессором ввода-вывода через канальные программмы — но безумно дорогая штука будет. Но западники придут к этому. + распределенная выч. сеть если нужен более детальный обсчет рынка.   
3. джава у западников  - нормально прогеру без разницы на чем писать — кнопки просто везде по разному стоят, а смысл все тот же. да и не будет джава быстро работать.
4. сам фикс — тыкать надо только тыканьем и можно понять как двигается он. тем более все равно по-разному он будет работать на каждой бирже. И если сильно копать то «в любой программе есть хотя бы одна ошибка». Если понял, что фикс флудит значит докопал. Флудить он будет. 
avatar
А в FIX стакан получить можно? Ну если не стакан, то котировку как в таблице параметров квика (лучший bid/ask и их размеры). Спасибо.
Счастливый Конец, это уже FAST
avatar
Благодаря пользователю с форума ММВБ (обсуждение тут), стало ясно, что Account = последним трем символам присвоенного SenderCompId
avatar
Андрей К, предлагаю сразу выкладывать на GitHub
avatar
Андрей К, кстати есть контакты одного индуса FIX Protocol Analyst если что.
avatar
вопрос автору, я не понял, что там с раундтрипом? Две секунды??? или это тестовое подключение? В боевом режиме какой раундтрип?
avatar
На днях брал тестовый логин, и ведь тоже про account никто ничего не сказал, а после повторного запроса дали account неправильный
avatar
Жаль, что продолжения не последовало, да и проект с яндекса недоступен :(
avatar
MegaFan, c# стало не актуально на тот момент
avatar

теги блога Андрей К

....все тэги



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