Блог им. egenui

Production решение для развертывания платформы для алготрейдинга

    • 27 сентября 2017, 13:45
    • |
    • evgen000
  • Еще
В этой статье поделюсь своим опытом создания и развертывания Production решения для алготрейдинга. Возможно вам это конечно никогда и не понадобится. Сама проблема родилась из соображений, вот есть у меня алгоритм на R/Python который показал результат, что мне с ним делать ?

Этот подход подходит тем кто создает свои модели и прототипы на языке R или Python, таким образом команда может быть разделена на тех кто проектирует модели (Data Scientist) и на тех кто пишет платформу для исполнения торговых сигналов (Программисты).

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

Предположим что:

  1. Вы обладаете некоторым опытом анализа данных на языке R или Python
  2. У вас есть несколько стратегий использующие к примеру нейронные сети, машинное обучение или потоковый анализ новостей которые вы бы хотели внедрить в Production, предварительно вы протестировали ее на языке R/Python и построили прототип
  3. У вас есть платформа для исполнения торговых сигналов (C#, C++, Java etc) То что принято называть «ботом», в нем помимо всего прочего есть еще и слой отображения графической информации.
  4. Вы хотите использовать модели написанные R/Python для торговли в платформе написанной к примеру на C++ или C#

К примеру вы тестируете стратегию на R и она показала результат, и вы задаете вопрос, что дальше?.. Этим вопросом, как мне кажется задаются все. У вас на самом деле есть пара вариантов:
  1. Перевести стратегию с языка R на язык на котором написана платформа для исполнения;
  2. Использовать некоторую прослойку которая позволяет выполнять код на языке R в в платформе

Рассмотрим эти варианты:

  1. Чрезвычайно затратный, во первых необходимых библиотек или открытых реализаций которые вы использовали в R, на языке, на котором реализована платформа может не быть. К примеру бесплатных реализаций алгоритма Extreem Gradient Boosting ( самый популярный алгоритм на kaggle) на C# насколько я знаю нет, но даже если вы и найдете то не факт что там нет ошибок, необходимо все заново тестировать. Таким образом вы делаете одну и туже работу несколько раз 1 раз тестируете стратегию на R второй раз на C# или C++. Либо вы можете самостоятельно реализовать подобный алгоритм на языке платформы, что еще более затратнее, после недель отлова багов вы забиваете на это.
  2. Вы можете использовать прослойку между языком платформы и языком R, к примеру https://rdotnet.codeplex.com/ но кто хоть раз этим пользовался понимает насколько это не прозрачно, нереально для отладки и понимания где ошибка если она возникнет, к тому же это медленное и не стабильное решение.
  3. Развернуть свою модель как сервис, который доступен к примеру по WebAPI, это уже лучше, к примеру есть библиотеки которые позволяют это делать для python это Flask http://www.flaskapi.org/ для R это Plumber https://www.rplumber.io/. Таким образом схема может выглядеть так.

Production решение для развертывания платформы для алготрейдинга

Кажется что третий вариант вроде бы рабочий, однако и тут есть куча подводных камней:

  1. Не единая точка входа для сервисов, так как у вас 2 технологии Flask, Plumber то и потенциальных проблем в 2 раза больше так как у обоих технологий разный environment
  2. Самая страшная проблема что R это single-threaded язык, а значит что WebAPI на R который развернут с помощью plumber будет очень медленный

Есть еще одно решение Microsoft R Server https://www.microsoft.com/en-us/sql-server/machinelearningserver вот его существенные плюсы:
  • Это кросс платформенное решение, вы можете деплоить свои модели на Windows, Linux, Haddop, Apache Spark или в облаке и иметь к ним единую точку входа
Production решение для развертывания платформы для алготрейдинга
  • Единая точка входа, мы можете разворачивать свои модели как сервисы на R или на Python
  • Полная совместимость со всеми пакетами R и Python 
  • Стабильность и масштабируемость. 
  • Microsoft R Server создан для промышленных решений, а значит он невероятно быстрый. К примеру он позволяет работать с огромным количеством данных. Ниже на рисунке производительность R Server относительно обычного R клиента. Он позволяет обучать модели в лайв режиме.

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


И так, мы выбираем Microsoft R Server, что же дальше?.. Предположим мы решили разворачивать наш контур на Windows. В таком случае мы можем использовать SQL Server 2016 в который интегрирована поддержка R на уровне хранимых процедур! Что это нам дает? Помимо того что я написал выше, еще куча возможностей!

Выкидываются из платформы все что связанно с отображением данных, графиков, таблиц и.т.д, если мы логируем в базу то всю визуальную обработку мы возложим либо на Reporting Service что интегрирован в SQL Server либо на стороннее приложение которое будет читать данные из базы и графически их отображать, к примеру R Shiny Dashboard.

Это снижает нагрузку и потенциально ошибку с главного узла(исполнителя сигналов) к тому же SQL Reporting Service для этого и создан он быстр, и стабилен. И поддерживает исполнение хранимок на языке R и все существующие к нему пакеты! К тому же доступ по Веб интерфейсу с аутентификацией с любого компа или телефона! Вот пример работы SQL Reporting Service из инета

Production решение для развертывания платформы для алготрейдинга

Вот и все. Статья пожалуй получилась довольно смутной и не подробной, однако такой задачи и не было, более подробно все можно на нагуглить и самому ). Кажется что все это громоздко и не подъемно, однако нет. Не подъемно это делать из бота некоторый комбайн который делает все что только можно, и графики строит, и тестирует, и оптимизирует итд. В результате получать исключения по ошибкам которые никак не связанны с работой торговой стратегии.
★5
6 комментариев
SQL Server 2016 с этими функциями сколько будет стоить?
avatar
ch5oh, этого я не знаю, его использование представлено в качестве примера. Microsoft R Server бесплатен. 
avatar

 Ну, «бесплатно» у майкрософт ничего не бывает.

Если верить этому прайсу idt-soft.ru/catalogue/microsoft/microsoft-r-server-2016

то ли 450 то ли 900 тыр лицензия стоит минимум.

avatar
ch5oh, Спасибо за ссылку, ну похоже да все столько и стоит. 
avatar

интересное решение. у питона есть библиотека PythonNet, она неплохо работает с .net dll-ками. Т.е. это не IronPython, а нормальный питон, который умеет общаться с C#, VisualBasic. На у C библиотеки там нативно поддерживаются. Про R ничего не скажу, но думаю там ситуация чуть хуже действительно. 

Вообще если действительно нужна скорость, то скорее всего придется переписать под Java, С++ или C#

avatar
Кстати, как ваши успехи с машинным обучением? Получилось ли получить адекватный торговый алгоритм?
avatar

теги блога evgen000

....все тэги



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