Это будет первый пост в серии постов, описывающих, как я создаю автоматическую торговую систему ​​в основном на Scala, но с возможностью взаимодействия с Python, либо через интерпретатор Jython, либо с использованием стандартных форматов данных, которые можно легко использовать из Python.

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

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

Почему в основном Scala?

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

Тем не менее Scala все еще не соответствует количеству инструментов, доступных для Python для анализа данных, построения графиков и для задач науки о данных. Есть хорошие фреймворки и библиотеки, такие как Saddle, Breeze, которые улучшают ситуацию. Для этого мы можем использовать Python, чтобы заполнить пробелы в экосистеме Scala / Java.

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

Вы можете прочитать более подробное обоснование в следующем посте: Почему я выбираю Scala для проекта Apache Spark.

Автоматизированные торговые системы

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

Что такое автоматическая торговая система (ATS)? < br /> В самом упрощенном виде - это просто функция с отслеживанием состояния, которая реагирует на рыночные данные и выдает приказы, которые отправляются брокеру.

                +---------------+
 Market data    |               |  Orders
                | Automated     |
+---------------> Trading       +---------->
                | System        |
                | (ATS)         |
                |               |
                +---------------+

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

Некоторые элементы инфраструктуры, необходимые для ATS:

* хранение исторических данных
* Возможности обратного тестирования для обучения алгоритмов и проверки торговых стратегий
* Связь с брокером для подачи заявок и получения книги заказов
* Системы анализа рисков и безопасности для проверки рынка Подверженность и риск


Создание автоматической торговой системы - это очень сложная работа. Уже одно это ставит отдельного трейдера и инвестора в очень невыгодное положение, учитывая количество времени или ресурсов, которые ей придется вложить для создания всей необходимой инфраструктуры вокруг ATS.

Существуют размещенные решения, такие как Quantopian (на основе Python) и Quantconnect (на основе C #) с компонентами с частично открытым исходным кодом. Здесь я хочу заложить первый камень в создание безопасной и разрешающей торговой системы с открытым исходным кодом для построения автоматических торговых стратегий, оптимизации портфелей и анализа ценных бумаг.