Блог им. algofintrader

Коннекторы Fix/Fast, Plaza2, Twime C# часть 1. Подробности работы, стоимость и т.д.

Приветствую.

В прошлой статье я решил немного рассказать о своем опыте с прямыми коннекторами для биржи и мне очень сильно понравился отклик. Спасибо. Поэтому я начинаю серию статей, которые будут постепенно раскрывать тему прямого подключения к московской бирже (moex) с организационной части и с технической. 

1. На текущий момент Twime является одним из самых быстрых, современных коннекторов к бирже, но есть некоторые нюансы. Московская биржа это не только срочный рынок, но также и фондовый и валютный рынок. 

На картинке мы можем увидеть, что количество звеньев у Twime минимальное.



И вот тут выходят нюансы :) 

Срочный рынок стоит в месяц 4 000 р./месяц, а если вы захотите торговать на фондовом или валютном, то вам придется уже платить 30 000 р. в месяц.  Также отдельно стоит сказать, что Twime — это только работа с ордерами. То есть никакие маркет данные отсюда вы также не сможете получать, а это означает, что вам также понадобиться еще и Fast подключение для маркет данных (об этом чуть позже).

Я думаю, что большинство читающих здесь людей не профессиональные HFT трейдеры, а скажем так «любители», которые хотят поиграться в арбитраж к примеру и платить по 30к в месяц довольного много, поэтому такими подключениями в основном пользуются серьезные «компании/конторы», которые занимаются арбитражем на российском рынке. 

Twime (самый быстрый, удобный в плане использования), но довольно дорогой и соответственно из-за этого не универсальный. 

2. Далее у нас идет коннекторы типа Fix/Fast. Fix — это протокол для работы с ордерами. Fast — это поставщик маркет данных. 
FIX — это международный универсальный протокол для обмена сообщениями для торговых систем. Используется не только московской биржей, но и рядом других бирж. Слово «универсальный» внушает надежду на неполучение кривых реализаций от биржи, но к сожалению совершенно не помогает скажем так для быстрого развертывания коннектора на том же языке C#. То есть просто указать какой тип биржи использовать и «включить его» не получиться. О технических реализациях я буду расписывать чуть позже. И соответственно FAST — это протокол созданный на основе протокола FIX, чтобы отправлять большее количество данных.  Нам к сожалению от этого ни горячо ни холодно, а скорее грустно потому FAST — это еще один коннектор, который придется отдельно создавать и описывать. 

FIX довольно универсален и подходит и для срочного и валютного и фондового рынка. Fast — это маркет данные и здесь то же самое, подходит для всех типов рынка. Стоимость 4 000 р в месяц для Fix и столько же за Fast. Ну только если вы не хотите к примеру для маркет данных использовать Quik бесплатно :) (шутка)

Коннекторы Fix/Fast, Plaza2, Twime C# часть 1. Подробности работы, стоимость и т.д. Для подключения к FAST нужен будет специально настроенный VPN и ваш статический IP должен быть добавлен биржей в «белый лист подключения». Но для подключения к самим данным для Fast не нужен ни логин, ни пароль. Для подключения к FIX нужен будет логин и пароль, но VPN и т.д. уже не нужны. Все эти этапы в инструкциях у биржи описаны крайне криво, часто документация не обновляется и на процессе «подключиться через VPN» можно застрять просто на недели… К сожалению это правда. 

3. Дальше у нас идет динозавр USSR разработки и мастодонт — это Plaza2. Можно назвать это «кибер панк» разработка.  Подходит для рынка ФОРТС. Оба предыдущих коннектора в примитивном плане просто подключаются через интернет соединение. В случае с плазой вы ставите себе «консольное приложение роутер», которое само подключается к серверу биржи. 

Коннекторы Fix/Fast, Plaza2, Twime C# часть 1. Подробности работы, стоимость и т.д.
Вы устанавливаете себе «роутер приложение» на пк — это такое консольное приложение, которое кстати не отображает никакой информации :) Просто висит открытым и все, а логи все пишет в папку. Правда, если оно сразу вылетает при включении, то вы поймете, что с ним что — то не так и вы не подключились.

Вы устанавливаете этот роутер себе на компьютер, прописываете ему все настройки и вот этот роутер уже подключается к серверу биржи. А вы, собственно говоря, подключаетесь к этому роутеру у себя на пк. В этом плане Plaza2 хорошенько уступает своим предшественникам в плане количества лишних звеньев. Чем больше звеньев, тем больше вероятность того, что где — то что-то, то отвалиться и не будет работать. 
Что дальше делать со всей этой информацией?

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

Тут вот и начинается история, что нормальных и открытых решений в духе  «взял библиотеку, прописал настройки и подключился» практически нет.  У самой биржи есть примеры, но они очень плохо собраны. К примеру под FIX валютный рынок будет лежать пример на языке python, причем с очень низкоуровневыми моментами, где вам придется самостоятельно расписывать весь протокол и познавать все его нюансы, чего я бы сам не стал делать. Для FIX срочного рынка может лежать пример на C++. У меня такое ощущение, что это сами трейдеры присылали им примеры и биржа их просто кидала на FTP. Потому что для Plaza2 к примеру есть пример на языке C#, но это не собранный готовый проект, а просто куски кода в разных CS, которые вам самому придется собирать :) Также видел формат кода без референсов для Fast на языке C# в txt файле КАРЛ! С любовью от Moex :) 
На текущий момент готовые решения предлагает S#, но тут есть важные нюансы. Вы можете просто купить подписку на закрытый коннектор и использовать его. Но, по моим тестам скорость использования такого коннектора абсолютно непредсказуема, так как сам по себе S# тянет огромный шлейф архитектуры внутри. То есть «да, вы может и пришли поиграться», но на выходе можете получить непонятно что по скорости. По крайней мере у меня было так, если будет найдены какие-то ошибки или недоработки — это может исправляться вечно. Берете вы twime oт S# а по скорости получается Transaq, зато HFT доступ! Очень много дополнительно функционала, который не нужен, в итоге перестает работать то, что нужно всегда. В общем полагаться на это к сожалению нельзя.

Пользоваться готовыми коннекторами можно только у доверенной компании, которая не выкатывает обновления и фиксы каждые 5 минут. 
Нужны исходные коды. Но опять же исходные коды у S# я не стал покупать, потому что было предположение, что там вас будет тоже ждать ад и кошмар, который придется переписывать. То есть рентабельность от такой покупки под огромным вопросом. Если вы сам не программист, то придется опять нанимать программиста, чтобы переписывать это все. Конечно готовый код скорее всего поможет вам хоть как — то поднять какое-то простое подключение, но на этом все.

Просто так на открытом пространстве найти готовые проекты на гитхабе под коннекторы — так же не получиться. Количество пользователей очень маленькое. Либо код будет устаревшим, либо его все равно придется полностью переписывать и поднимать. Вот и получается, что каждый пишет сам у себя где-то в кулуарах, ну и в промышленное или другое использование это никак не выдает. 
На текущий момент после первой статьи я нашел, что у Alex Wang (o-s-a.net) есть коннектор к Plaza2 в открытом состоянии. Вы можете скачать проект и оттуда взять коннектор и это гуд. Коннектор не самый свежий:), да и как я и говорил, разработка довольно редкая, поэтому довольно сложно это поддерживать постоянно в самом свежем виде. И в целом это гуд, если у вас есть опыт чуть больше любителя, то я думаю, что сможете все поднять и запустить.

Каждый боевой коннектор должен иметь свой сертификат и этот сертификат периодически нужно обновлять.  Каждый «разработчик коннектора» должен предоставлять свою ключ сертификации и без него у вас не получиться торговать на боевых аккаунтах. Под плаза 2 это ключ сертификации, под Fix/Fast вы получите имя своего сертифицированного ВПТС и он потом используется при открытии боевого аккаунта у брокера.  Каждый коннектор должен быть сертифицирован биржей, чтобы его можно было использовать на боевых логинах. 

Я пошел по пути сборки коннекторов с нуля, мне помогали различные трейдеры программистами и делились своими наработками, так или иначе все равно пришлось изучать, как это работает с нуля и многое переписывать, дорабатывать. Об этом я буду рассказывать в следующих статьях. Этот путь довольный трудный и тяжелый, но зато на выходе вы получаете то, что вам нужно и вы можете быть уверены, что «очередное объявление» не убьет всю систему.

В этой статье, я также не рассказал еще про ASTSBridge. Посчитал не важным его описывать, так как он не представляет и никогда не представлял интереса для HFT трейдеров. 

В следующей статье я распишу как самостоятельно развернуть свой коннектор к FIX/Fast, потому что считаю его максимально универсальным и не сильно проигрывающим по скорости для любителей. 

P.S. Есть идеи выпустить свои «упакованные коннекторы» в массы на популярном C#, сделать коннекторы удобными для использования для новичков, любителей программистов. 

★26
37 комментариев
Приветствую!
Это жестко, конечно, то в выходные, то в пятницу вечером..
Плюсую и читаю.
avatar
Алексей, пишу в свободное время!
В этой статье, я также не рассказал еще про ASTSBridge. Посчитал не важным его описывать, так как он не представляет и никогда не представлял интереса для HFT трейдеров. 

немного не корректно. Это это же типа аналог плазы, только для валютного и фондового. И если отвязаться от всех терминалов, то лимиты (грубо говоря свободные свои средства) надо же от куда получать и другие плюшки для торговли, получается, чтобы полноценно торговать на валютке и фонде без терминала, то нужен Bridge. Если полноценно торговать на срочке без терминала, то нужна Plaza
avatar
Андрей К, да все верно. Я решил не усложнять в описании статьи. Вариант для любителя — это просто взять себе терминал Moex Trade и оттуда вынуть все данные. Внутри бота можно самому модерировать выставленные заявки, то есть самому вести учет выставленных заявок, но опять же это не решит вопросы балансов и средств. 

А так для полноценной полной автоматизации к сожалению в купе с Fix/Fast нужно будет еще использовать ASTSBridge, но для самой отправки заявок его не используют. Вот такой бутерброд 
avatar
Да, фикс/фаст- это интересно. Также интересно, работают ли бесплатные решения на гитхабе
avatar

Спасибо огромное за статью! 

Ни разу не HFT трейдер, но очень любопытно узнать, как это всё устроено) 

Когда делал свой коннектор на Plaza2 на гитхабе находил работающие примеры.
Они работали, а вот проект, который лежит на ftp биржи — нет )
avatar
Sprite, я как раз использую QuikFIX, но его тоже надо довольно серьезно донастраивать
avatar
algofintrader, 
QuikFix или QuickFix?
QuikFix это вроде не прямой коннектор.
avatar
Synthetic, QuickFIX/n (quickfixn.org) криво написал
QUICK FIX 
avatar
Очень достойно. Хотелось бы увидеть продолжение 
avatar
Сейчас можно подключится по fix/fast не из коллокации? Вроде, раньше ничего кроме плазы не было доступно через VPN. Те еще косты на аренду стойки.
avatar
Talos, да можно
avatar
Спасибо мил человек за интересные посты, обновили мою прошивку знаний в данной тематике
avatar
Однозначный плюс плазы в том, что к одному логину роутера плазы можно подключить разных роботов в любом количестве. Через плазу можно получать котировки фондового рынка — сам не проверял, но такая функциональность заявлялась. И тогда плаза + фикс на фондовый достаточны. Ну и лимиты есть в плазе, это важно. Поэтому, несмотря на древность, плаза жива и будет жить еще долго.
На фикс\фаст один логин — один робот или надо добавлять в коннектор функции шлюза для нескольких роботов. Твайм — то же самое. Поэтому фикс/фаст и твайм не получили массовый интерес.
Учитывая то, что брокерские апи тоже улучшаются и сейчас имеют роундтрипы по заявкам от 20мс, дают доступ сразу на все рынки и бесплатны, а биржа повышает цены на биржевые апи — доля потребителей биржевых шлюзов ещё больше сократилась. Я 10 лет пользовал плазу и отключил в декабре прошлого года перед повышением цен.
Смартком — сразу на сишарпе и очень удобный. Атентис от Алора — на сишарпе и тоже все работает из коробки. Опенапи от Алора — на любом языке, простой, примеры рабочие.
avatar
ignat,
От 8мс у меня без плазы на срочке, от 30мс на фонде.
Дмитрий Овчинников, айда до ста микросек )
avatar
Андрей К, 
это уже совсем другой уровень. Трудозатраты при моем трейдинге не окупятся никогда.

Я тут у Открытия долго выяснял где именно у них стоят сервера МТ5. Выяснил, поставил в тот же датацентр. В итоге до Открытия пинг 1.9 мс, а до Финама 0.9 мс. Занавес…
Дмитрий Овчинников, в одном ДЦ стоят? ) 
avatar
Андрей К, 
судя по пингу у Финама как раз в этом ДЦ, а у Открытия нет. Или у Открытия какая-то кривая маршрутизация по сравнению с Финамом.
Дмитрий Овчинников, интересно, traceroute (под win tracert) не выясняет ли, где их сервера
avatar
Андрей К, 
скажи как проверить, я проверю.
Дмитрий Овчинников, я чета выпендрился не по делу ) Думал у них какой ruvds, хоть финам их и ругает, но у них с ними партнерка вроде.

Я пробил трасером через протокол icmp, udp, tcp сервер квика, но сигнал теряется. Понятно только, что он через билайн заходит в macomnet и пропадает. Рувдс хорошо в таких задачах пробивается.

А юзать просто. По windows запустить
tracert 87.118.239.80

тебе начнут принтоваться узлы, через которые проходит пакет. Потом эти ip можно вбить в whois сервисе и глянуть кто такие. Но опять же, у открывашки теряется сигнал.
avatar
Дмитрий Овчинников, через что? мт5? в мт5 вроде нет опционов?
avatar
ignat,
Опционов нет, но мне они и не нужны. 

От 8мс у меня без плазы на срочке, от 30мс на фонде.


Дмитрий Овчинников, эти цифры для какого типа подключения?

avatar
ignat, все таки посадить много страт на один твайм — это вопрос более правильной архитектуры торговой платформы
avatar
Андрей К, чем же более правильная? ) На брокерских апи нет ограничения по транзакциям. Если роботы на нескольких счетах — не надо на каждом открывать биржевые шлюзы, виртуалки и тд, экономия заметная. И очень быстрые роундтрипы требуются для hft, доля которых небольшая. Для остальных стратегий достаточно умеренно быстрого апи. Поэтому под разные ситуации — свои правильные архитектуры.
avatar
ignat, ну комооон ) даже не знаю чего начать ответить
avatar
ignat, я собрался с мыслями вам ответить )

Вы конечно тонко подметили про ограничение транзакций под твайм 30шт в сек. Но ведь это дело правильной архитектуры платформы. Коннекты должны же как то масштабироваться. То есть слой коннектов в ПО — это вообще отдельный слой, который алго совсем не видят. А там уже хоть 100 коннектов твайм, хоть + плаза и + фикс, это не должно влиять никак на алго. Ну мне так кажется.

По поводу API броков и безограничения. Здесь есть маленькая хитрость. Броки искусственно ограничивают ваши транзакции, точнее их частоту, но вы через API этого не знаете.

И я еще раз хочу заметить, что я отвечал именно на вашу мысль, что 1 робот ---> 1 твайм. Зачастую, вы наверное знаете, что у многих, 1 робот ---> гора тваймов, из за их тонкостей работы, когда один твайм может легко обгонять другого. Так что это все к правильности построения архитектуры. 
avatar
Андрей К, Каким образом брокеры могут ограничивать транзакции, чтобы я этого не увидел? Я не видел ограничения частоты транзакций на используемых мной брокерских апи, а я на каждую заявку логирую рондтрип в отдельный лог файл, вычисляя его самостоятельно между локальными таймштампами отправки и получения статуса от биржи. Да, бывает, на росте волатильности растут и роундтрипы, но они растут и на биржевых шлюзах. И иногда у брокера что-то случается — и роундрип показывает 100-300мс — ну ок, бывает, я не хфт. Ограничения, кстати, есть — если отправить 1000 заявок в цикле, без ожидания ответа без пауз между отправкой — иногда 10-20 терялись, ответ не приходил. Ну так просто не надо отправлять столько сразу. Если же 1000 заявок с частотой 100 за раз и следующие через 300-500мс — не теряются.
Вы правильно пишите — коннекторы, отдельный слой, масштабироваться, синхронизировать тваймы. Но это не нужно в большинстве случаев для частных трейдеров. Чтобы качественно сделать коннектор на твайм или фикс\фаст — по аналогии с роутером плаза, чтобы подключать в коннектор разные стратегии и не ронять свой коннектор на каком-нибудь эксепшн — это надо скилл программиста конкретно прокачивать. Поэтому роутер плаза был для меня идеален. Я специально пытался его уронить через робота и не смог ) И многие не хотят тратить полгода-год на такой коннектор-шлюз, и не все вообще это смогут написать. Сама биржа могла бы сделать такой роутер на фикс\фаст и твайм, но не хочет. Примеры на питоне для быстрых шлюзов — смехотворны. И сравните с брокерскими апи — бесплатно, при минимальных знаниях 30-50 строк кода по примерам — и прямо сейчас, а не через месяц-полгода, уже подключаешься, отправляешь заявки. Уронить торговый сервер брокера через кривого робота — ни разу не слышал об этом.
Лично я не хочу быть программистом, мне интереснее заниматься улучшением алгоритмов и анализом, чем разбираться в синтаксисе. Спасибо создателям чатгпт — реально помогает.
Я бы очень хотел, чтобы биржа, по аналогии с брокерскими апи, сделала один упрощенный протокол, со всеми рынками, не быстрый — с роундтрипами 20-30мс, с возможностью работы через всех бркоеров, с разумной ценой, с едп и с возможностью использования любого ЯП — и вот тогда было бы идеально. И сделать такое им реально несложно. Но биржа обязательно хочет сделать по-взрослому и объединить все рынки в торговом ядре и никогда этого не сделает )
avatar
ignat, ну да, подитожем, для не подготовленного алго лучше api
avatar
ignat, когда СВО началось, роботов сдуло. Я со своим не самым быстрым сервером и доступом на возобновленных торгах делал иксы на рубль-бакс. Сейчас коло+логины себя не окупают. Ощущение, что вернулись обратно. Хотя что там возвращать — «включил в розетку» и снова в деле. Чтобы не гэпах успевать зарабатывать, нужно переход на следующий уровень по скорости. Это С++. Без таких скоростей смысл в биржевых протоколах сомнителен. Брокерские доступы сейчас лучше в соотношении цена-качество.
avatar
Андрей К, а в «горе тваймов» за каждый твайм отдельно платить надо?
avatar
Sprite, ага. Так и платят за десятки и десятки десятков тваймов
avatar
ignat, в данном случае описываете свой коннектор к фикс фаст и делаете в приницпе тоже самое
avatar

теги блога algofintrader

....все тэги



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