Начало положено
тут
Продолжил
тут
Затем
тут
Обсуждения
Сегодня будет без введения. Мои первые публикации вызвали небольшие обсуждения, как в комментариях, так и в личных беседах. Если классифицировать, то можно подвести некие итоги:
- занимаюсь ерундой, до меня уже давно все создано. Прежде чем, что либо начать, конечно же я изучаю положение дел. Я прекрасно изучил, что уже есть конкретные разработки. Но я уже говорил, что я готовлюсь к хорошим вакансиям и хочу знать досконально протокол. Человек я щепетильный, мне важно знать каждую мелочь. Другого метода изучения я не придумал.
- мой код не оптимален. Хоть я и не услышал конкретные доводы, но все же склонен к такой мысли. Код только строится и конечно будет еще дорабатываться.
- выбрал не ту платформу. Тут самое интересное. Были интересные беседы. Но надо заметить. Я не отвечаю на позывы типа: «си ерунда, бери то-то». Я считаю это не профессиональным. Но все же интересные моменты были. Итог:
— Для скоростного трейдинга желательно уходить на 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». Опять перерыв интернет и ничего не найдя, я написал в тех службу биржи с просьбой попробовать начислить виртуальных денежных средств на счет. Тех служба опять сработала быстро, расширив мне лимиты.
В итоге я отправляю заявку и получаю успешный ответ:
Вот такой нюанс и очередной опыт. Более подробно напишу на выходных.
ЗЫ прошу не холиварить, это сугубо ИМХО, никому ничего не навязываю.
arxiv.org/pdf/1008.2748.pdf
ты фикс для чего разбираешь? чтобы по инету пакеты гонять?
а на коло винду поставишь?
прям жгун. :)
и где ты видел, чтобы алготрейдеры говорили что-то значимое в этом зоопарке? зачем? для кого? :)
Фикс пока разбираю, честно говоря, чтобы пока его знать =). Уверен буду применять его у будущего работодателя. А какая у него инфраструктура, будем посмотреть
Андрей К, просто .net вроде как уже и на Линуксах есть, и микромягкие говорили что Mono теперь IDE для линуксов и маков.
И жду не дождусь когда вы наконец выложите первые коды хотябы просто побаловаться =). Потому что сам осбирался покурить протокол.
это надо жирным и на стенку ...
выше ответил
Aberkromb Garell, https://yadi.sk/d/AiCzN12mp7e3E
имейте ввиду, там нужно в консольном заполнить targetID и Account. получите у биржи. Кода на побаловаться хватит.
так же, я не обрабатывают пока исключения и не обрабатываю другие ошибки, чтобы сыпались мне прям на отработке. записываю их на бумажку, потому запрограммирую.
я про Dukas.
линукс и джава это готовый консруктор и довольно давно.
шарп там только вылезает из песочницы.
но в РФ уже несколько поколений программеров считают студию чем-то неприходящим
мышевозы поколения пепси, ёпта
тоже самое и с музыкой. отсуствие развитой системы начального музыкального образования делает невозможным спрос на качественную музыку, даже неклассическую
вместо писать себе втихую парсер и почитывать кванто-блоги и почту сапорта у пациента дифицит общения нарывает графоманством
ну то есть типа: удачи жедаю :)
Удачи!
Не слушай никого, ты разбираешься с протоколом для себя. Ковыряться в чужих исходниках — это АДъ, проще для понимания самому написать с нуля.
>мой код не оптимален
Разберешься с протоколом, дальше уже можно заняться оптимизацией или переписать все с нуля, главное разобраться в протоколе.
>выбрал не ту платформу.
Тоже бред. Windows не такая уж плохая и тормозная система, а наговнокодить можно под чем угодно. Тем более для изучения пофигу под что и на чем писать.
Вообщем осторожнее относись к критике, здравое зерно конечно бывает, но восновном это тролинг.
Полезное дело делаешь! Спасибо! Топики добавил в избранное, потом тоже в планах разбираться, но правда сразу под Linux :)
Для высокочастотного трейдинга в несколько потоков, будет плохо. Если уж брать hhmmssfff, то надо еще делать RAND() и делать поле типа hhmmssfff_ххххххх или hhmmssfffxxxxxxxx.
Тогда точно будет корректно. У меня были коллизии из-за этого.
2. язык чистый Си без всякого ООП ну или Си++ но ООП не брать — он не нужен здесь. вещь вредная ибо надо работать быстро. Там фишка в компиляторе ( архиважная вещь для Си! ) — чтобы процессор по полной грузить на уровне маш.кода. По данной теме ( работа с заявками в стакане ) если HFT брать вообще лучше RISK процессор с процессором ввода-вывода через канальные программмы — но безумно дорогая штука будет. Но западники придут к этому. + распределенная выч. сеть если нужен более детальный обсчет рынка.
3. джава у западников - нормально прогеру без разницы на чем писать — кнопки просто везде по разному стоят, а смысл все тот же. да и не будет джава быстро работать.
4. сам фикс — тыкать надо только тыканьем и можно понять как двигается он. тем более все равно по-разному он будет работать на каждой бирже. И если сильно копать то «в любой программе есть хотя бы одна ошибка». Если понял, что фикс флудит значит докопал. Флудить он будет.