Блог им. DenisVo

Пример использования IB API - C++ - Flask - Reinforcement learning agent

Все привет, 

Если кто помнит, я когда то рассматривал структуру алгоритмисческого окружения, идея состояла в том, что не следуют все связывать в один монолит.
Структура и элементы автоматической торговой сиситемы!
Дизайн доморощенного алгоритмического окружения.

Было и несколько тем про применение обучения с подкреплением и моделей глубокого обучения, а так же как деплоить модели используя TensorFlow Extended (TFX)

Эксперимент: торговая система на базе глубокого обучения от начала до реальных торгов. Часть III. Начинаем работу с TFX

Пришло время собрать все это вместе, и показать, что все эти части могут работать совместно.

Пример использования IB API - C++ - Flask - Reinforcement learning agent

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

И так как на сегодняшний день, python наверное самый популярный язык для всякого рода эксперементов с AI, для деплоя моделей я взял Flask. Многие наверняка знают что это такое. Flask является микрофреймворком для создания вебсайтов на языке Python. Однако нам совершенно не нужен веб сайт, но с помощью этого фреймворка мы можем легко запустить веб приложение, с которым можно будет общаться используя HTTP запросы. 
Собственно для наших целей нам достаточно одного метода, который будет вызывать нашу модель. Данные же можно довольно легко передавать в JSON формате, что очень удобно. Я не использовал тут TFX, так как чувствую, что используя Flask все получается как то проще… :) ибо гугловские доктора наук все усложняют :)).

Стоит конечно заметить, что данное решение не самое быстрое, запросы через rest api врядли подойдут для тех кто бореться за микросекунды, однако я уверен, что для большинства это вполне себе практичное решение. 


На картинке так же видно, что мы полключаемся к Interactive brokers gateway через приложение QtIbTrade (на саомом деле IbTradeQt), я про него упоминал ранее:

Наброски торговой платформы использующей IB C++ API.

С тех далеких пор разработка так и не продвинулась :)), однако я думаю возобновить работу над этим проектом. 

Что ж, в данном примере, приложение на c++ реализует модель исполнения заявок, и совершенно отделено от модели принятия решений, что довольно удобно. 

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

Что думаете о такой реализации?


Ну и как же без моего телеграм канала :))… шучу… Видео с более детальным техническим описанием:




Код как обычно найдете в описании к видео.


★8
12 комментариев
сделайте видео как квик наш русский подключить. Просто интресно попробывать как он
avatar
Виктор Бавин, Я к сожалению не использую квик, так как не торгую на российском рынке. :(
avatar
У многокомплнентной структуры есть достоинства, но то явно не тот случай. Тут лучше монолит, а внутри него разделять и властвовать.
Меньше фигур — легче играть говорил Наполеон.
avatar
ivanovr, Я тут с вами в корне не соглашусь. Монолит скорее всего будет более полезен если действительно бороться за скорость. Если посмотреть на c++ приложение, представленное в видео, то оно в данном виде примерно то о чем вы упомянули, внутри него мы можем создать разные стратегии и завсимости, но это будет намного более трудоемкая и по времени затратная работа, нежели использовать тот же REST или RPC. При этом же динамическое управление внешними блоками реализуется просто на ура.
По крайней мере я пришел к этому пониманию :)
avatar
Похоже на микросервисную ахитектуру. Она полезна кода большой проект, много людей каждый занимается своей частью, возможность масштабирования и прочее. Преимуществ много.
Но цена этому низкая производителньость и сложнось. Придется больше времени тартить на то чтобы заставить каждый компонент работать как надо и чтобы они были правильно связаны. + невозможны будут некоторые алгоритмы который предполагают слишком частые запросы/ответы между двумя компонентами.

avatar
ivanovr, каждый веб сервис от части микросервис… вопрос лишь на сколько он микро :). На самом деле все не так сложно как вы описываете. 
Вопрос скорее в подходе, скажем если мы берем и пишем стратегию питоне, или луа скрипте, мы загоняем туда обычно все части, проверку на доступность средств, логику исполнения ордеров, анализ данных… и тд.
 
Я стараюсь идти немного другим путем, разделяя отвественности, что то вроде модели контроля за депозитом, модель принятия решений, модель исполнения… и тд. 
avatar
 @Тимофей Мартынов , возможно ли мне все же заиметь право ставить тэг «алготрайдинг» для своих постов? :), а то только админам работа распределять в правильные разделы. 
avatar
А как это апи работает? Оно напрямую к серверу подключается, или сначала к TWS на локальном компе(как, собственно, в случае quik/lua)?
avatar
tranquility, у IB два вида апи, один через tws или gateway, второй напрямую к серверу по протоколу fix вроде. Второй вариант правда не работает для получения котировок, только для работы с ордерами.
В видео я через tws подключался, но обычно через гейтвей. (Дума как и квик / луа, просто квик никогда не видел )
Сама софтина, которая самописная на с++ в теории может работать с кем угодно… Но я был ленив и некоторые структуры данных от ib пролезли в модули для работы с данными… :) надо их почистить…
avatar
Странно, пришла нотификация на почту с комментарием но тут его нет… Видимо удалили за ненадобностью :). Однако мысль пришла, что если дальше развивать самописные решения, то возможно стоит разделить интерфесы маркет даты и работы с ордерами. 
avatar
CloseToAlgoTrading, я так глубоко Ваш код не копал, но счиаю, что эта мысль явно хорошая))
avatar

теги блога CloseToAlgoTrading

....все тэги



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