Это будет первый пост в серии постов, описывающих, как я создаю автоматическую торговую систему в основном на 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 #) с компонентами с частично открытым исходным кодом. Здесь я хочу заложить первый камень в создание безопасной и разрешающей торговой системы с открытым исходным кодом для построения автоматических торговых стратегий, оптимизации портфелей и анализа ценных бумаг.