Маленькие технологические радости. Инфраструктурное.

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

Теперь хоть с ойпада в браузере можно бектесты гонять. Или натравливать машЫн лернинг на данные, лежа на пляже сидя на скамеечке кленовой в парке горьких слез и отобранных мобил Горького. Очень удобно, что среда запущена и всегда под рукой.

А потом я пошел чуть дальше и еще немного заморочился. И теперь могу запускать и выключать торговый и ресерч сервер прямо из мобильного приложения. Так круто, что я испытывал эйфорию весь вчерашний вечер.

Но пока что-то это все достаточно допотопно. Я использую виртуализацию на bear metal гипервизоре не скажу на каком. Вроде бы удобно и есть прикольные плюшки. Можно быстро делать снапшоты и создавать новые инстансы. Но вот настраивать сеть на новом инстансе уже ни фига не быстро и приходится долго ковыряться с конфигами. Очень допотопно с точки зрения поддержки и деплоймента самих трейдерских приложений — там все по-деревенски по-европейски через жопу.

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

В последнее время смотрю в сторону docker или vagrant, но не знаю, достаточно ли они хипстерские, а еще потом бью себя по рукам, типа: «Эй, чувак, ты же не сис. админ devOps, забей, и так все работает! А вот если твой новый алго не начнет зарабатывать, расклеишь окна и не будет больше репчика по ночам. А будет опять будильник по утрам, чтобы не проспать на завод».

Сейчас все так как и было 1,5 года назад на картинке из поста «next level». Разве что добавился отдельный ресерч сервер.

Проект сам устроен так: есть основная библиотека — KMTradingKit с зависимостями от коннекторов к брокерскому api, бд, сокетов и всякого сложного, собирается в джар файл на выходе. Есть библиотека с кодом стратегий, которая зависит от основной. Есть проект всей торговой инфраструктуры, где куча модулей для каждой компоненты (качалки данных, коннекторы, стратегии) и каждый модуль уже с конфигами и всем необходимым. Зависит только от KMTradingKit и библиотеки со стратегиями. Так, чтобы можно было обфусцировать код KMTradingKit и код стратегий и скрыть ноу хау от того, кто деплоит (все для огромной команды хедж-фонда, продам недорого!!!!). Собирается все это в кучу джар файлов — на каждый модуль по файлику, которые потом тупо запускаются по отдельности и работают вместе друг с другом.

(это была документация на случай, если кто-то у меня все спиздит)

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

Круто было бы наладить continuous integration. Что б новый коммит в одной из мастер веток основной библиотеки, библиотеки со стратегиями или проекта инфраструктуры вызывал пересборку по цепочке: KMTradingKit, стратегии, основной проект инфраструктуры со всеми модулями и доставлялся в докер контейнере на боевой сервер ночью, например, и что б все перезапускалось. У адекватных людей там где-то еще тесты должны быть. Короче, хотелось бы это сделать так, как оно устроено в нормальных ойти компаниях.

Дальше остается хорошенько покопать статьи про Gradle, Jenkins, Teamcity, Docker и что-нибудь еще. Буду рад совету или ссылкам, гайз.

Level After Next Level.

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

Сервера на картике — не обязательно сервера. Просто некие сущности-контейнеры. Хотя в идеале, конечно, отдельные железные сервера. 6 штук бля)))

Login server

Это однозначно должна быть отдельная легкая, мб виртуальная машинка, с гуем на линуксе. Там будут работать терминалы IB Gateway, а гуй нужен что б в них логиниться.

Orders and RT data router — это то, что я не написал. Штука, которая позволит реплицировать ордера на несколько счетов. IB Family and Friends Master Acc, до свидания! Пока не знаю, как сделать. Либо по принципу master-slave, клонировать ордера с объемом пропорционально размерам счетов и просто fire-and-forget, либо закодить так, что б снаружи это выглядело, как один аккаунт, а внутри состояло из нескольких. Второй способ более правильный, но будет сложно обрабатывать исполнение, а точнее частичное исполнение на разных аккаунтах.

Ойти дипломатия в поисках компромисса.

Вот надо какой-то компромисс найти между удобством, безопасностью, гипервизорами, докерами и хранилищами.

Hardware

— — Bare metal hypervisor

— — — — Guest OS ( Login Server) with GUI

— — — — Guest OS ( Entities data storage Server)

— — — — Guest OS ( Market data storage Server)

— — — — Guest OS ( Strategies Server)

— — — — Guest OS ( Research Server)

На первый взгляд, неплохо, но для пацанского деплоймента не жирно ли туда еще докер впихивать?!?!

плюсы:

  • Все изолированно для всякого рода коворкинга типа совместных рисерчей с кем-либо. Можно быстренько наклонировать вирт. машинок для рисерча.
  • Типа безопасность

минусы

  • Проблемы совместимости с железом (попалось бы норм решение)
  • Тяжелые для переноса вирт. машинки
  • Оверхед виртуализации (хэфэтэ загрустит)

Может какой-то микс сделать, типа так:

Hardware

— — — Host OS

— — — — —Hypervisor

— — — — — — — Guest OS ( Login Server) with GUI

— — — — — — — Guest OS ( Research Server)

— — — — —Docker Engine

— — — — — — — Strategies Server App

— — — — — — — Market data storage Apps (dumper, updater)

— — — — — — — Brokers APIs, Market Data connectors Apps (exec, RT )

— — — — —Market data storage

— — — — —Entities storage

Переезжать вроде бы удобно будет. Всего то на голую ось поставить гипервизор, докер движок и базу. Логин и рисерч сервер — стандартные полуголые слепки. Мне нравится. А рисерч сервер и хранилище можно будет потом выпилить куда угодно и оставить чисто «торгово-боевой» вариант.

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

И еще про шкодинг.

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

Вот у меня для рисерчей бектестер на питоне, куда я шкодю стратегию на питоне.

А торговый движок на джаве, куда надо потом логику стратегии переписать. Ну там if-else и все такое. Но фактически, все сводится к нескольким, одним и тем же кубикам:

  • Когда какие данные попросить
  • Проверить данные
  • Когда применить логику на вход
  • Когда применить логику на выход
  • Логика на вход
  • Логика на выход
  • Каким образом входить и выходить
  • Каким сайзом

Идея в том, что если все такое шаблонное, то можно было бы определить некое общее ядро стратегии, типа if-else, order type, timespan, которое будет на питоне и использоваться для бектеста. Но к нему также будет обращаться стратегия из торгового движка и использовать его. То есть стратегия из торгового движка будет просто оболочкой, которая будет сконфигурирована на предмет взаимодействия с остальной инфраструктурой: откуда данные брать и куда ордера слать, а также будет инфа типа: «возьми ядро вот с таким айдишником и используй».

Было б очень круто. И перекомпилировать ничего не нужно, просто питон файлик поправил и все. Не знаю пока каким образом это может быть реализовано, jyton, говорят, дно донное. И пандас из него нельзя использовать, потому что в пандасе используется нумпай, которые использует кусочки, написанные на Си. Может сокетами месседжи слать куда-то. На деревню дедушке=)

Короч не знаю пока. А может оно и не надо мне.

Понравилось это:

Нравится Загрузка…

Связанные


Originally published at kazai.wordpress.com on March 24, 2016.