buybackoff
buybackoff личный блог
12 июля 2016, 14:16

Spreads - новый бесплатный open-source инструмент для алготрейдинга

На Смарт-Лабе редко, поэтому тут напоминалка про Spreads по мотивам этого поста, который до меня даже через Фейсбук добрался, и не мог пройти мимо. Цифры — ответ на оригинальный пост. Мой комментарий странным образом изчез из оригинального поста, ниже его полная копия. 

Сорри, гайз:

 1 — история и реальная торговля — один код

2 — тайм-фреймы вообще нерелевантны, соединение серий идет по time stamp. Главное самим помнить, где он для свечек — в начале или конце, и использовать .Lag(1) где нужно

3 — событийная архитектура — это ад, однажды разобравшись в функциональных преобразованиях серий пути назад нет. Shared mutable state спрятан и совсем не shared.

4 — помимо стандартных проектов VS, можно писать в F#/C# interactive REPL

5 — higher-order преобразования серий (Window,ZipLag,Map,Scan,Filter,Repeat,ZipN) позволяют написать индикатор любой сложности в несколько строк кода и спрятать всю логику и состояние в лямбдах

6 — визуализация в Excel (через add-in) или FSharp.Charting или OxyPlot.

7 — это логика стратегий/системы, можно реализовать через структуры данных с несколькими timestamps — отправка, получение, биржа

8 — хранилище данных с сжатием 4+х и random access в сериям встроено, ZipN позволяет склеивать не только исторические серии, но и серии в реальном времени (например, считать индекс S&P500 по нерегулярным тикам). Обращаться к сериям можно из разных процессов, синхронизация идет через memory mapped files. Скорость как у TeaFiles, размер ФОРТС ордер лога всего на 20% больше, чем .qsh (QScalp) с Цериха, но дает random access к любому тику любого инструмента.

9 — WIP, код для walk forward давно написан, но не выложен. Как показала практика, оптимизация про среднему в эпсилон окрестности полным перебором через разумный шаг — самое быстрое и стабильное решение. Так как мы не знаем форму целевой функции и ее производные в общем случае, то всякие градиенты, swarm-оптимизация и прочие методы нестабильны и нифига не быстрее (swarm у нас был заметно дольше, пока сходился). Любая НЕ walk-forward оптимизация почти бессмысленна и полезна разве что для первичной проверки где горячо-холодно.

10 — благодаря дизайну схемы данных у нас вообще нет различия между историческими и реальными данными, работа с ними всегда идет одинаково.

11 — трейдинг is out of scope & WIP. Трейдинг через close source системы (а не через прямой API) довольно стремное занятие для портфелей и сложных стратегий. Вместо отправок ордеров, мы формируем порфель желаемых позиций, посылаем его «умному трейдеру» (сервис), тот сравнивает их с текущими и приводит текущие к желаемым по умному алгоритму, например сохраняя бету порфеля и по очереди входя в лонг/шорт, одновременно проверяя риски, churn, health, etc. Возможно скоро будет выложен пример для github.com/finsight/QuikSharp (самый быстрый и удобный коннектор к Квику на .NET, который тоже OPEN SOURCE и бесплатный). 


Бонус:

* Off-heap memory mapped dictionary для доступа из разных процессов

* Интеграция с R

* OPEN SOURCE!


Простой пример стратегии, который при этом хорошо иллюстрирует логику работы с сериями (история + реальное время, индикаторы, торговля), тут: http://hotforknowledge.com/2015/12/29/how-to-write-the-simplest-trading-strategy-using-spreads/.  

Spreads — OPEN SOURCE и БЕСПЛАТНОЕ решение. Это не готовая коробочка для трейдинга, а гибкий инструмент для complex event processing, на котором можно построить решения любой сложности. За $399 в месяц вас ждет индивидуальная поддержка, консультация по стратегиям и трейдингу, написание и оптимизация стратегий под ключ, 24/7 bug-fix, пожизненный доступ ко всем будущим версиям с дополнительным функционалом, тайский массаж, бесплатное пиво и прочие плюшки… (не является офертой, если нужно, контакты на ГитХабе ).

Ядро библиотеки стабильно и давно используется. В процессе разработка дополнительного функционала, например репликация по сети, красивые графики и т.д. Но так как это открытый код, мы принимаем pull requests :)

35 Комментариев
  • nik
    12 июля 2016, 14:30
    хочешь им весь бизнес поломать?))
  • Андрей К
    12 июля 2016, 14:31
    мы принимаем pull requests :)
    а вас много?
  • sortarray sortarray
    12 июля 2016, 14:42
    и спрятать всю логику и состояние в лямбдах 

    строго говоря, состояние находится в замыканиях, а не в лямбдах. Лямбда — это функция, в математическом смысле, у нее нет никакого состояния, это отображение. Честно говоря, достало уже все это передергивание понятий в этом вашем программировании. Все это идет от избытка сахара, ИМХО. Люди вообще перестают понимать, что у них в коде творится.
  • Pobeditel
    12 июля 2016, 14:52
    почитал почувствовал себя дауненком)))) шутка)))

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн