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 :)
    а вас много?
      • buybackoff, а 399$ тогда кому идут? xD
  • sortarray sortarray
    12 июля 2016, 14:42
    и спрятать всю логику и состояние в лямбдах 

    строго говоря, состояние находится в замыканиях, а не в лямбдах. Лямбда — это функция, в математическом смысле, у нее нет никакого состояния, это отображение. Честно говоря, достало уже все это передергивание понятий в этом вашем программировании. Все это идет от избытка сахара, ИМХО. Люди вообще перестают понимать, что у них в коде творится.
      • sortarray sortarray
        12 июля 2016, 14:52
        buybackoff, нет никаких замыкающих лямбд. При вызове каждой такой ф-ции создается новое замыкание, которое и таскает это состояние. Это называется «модель вычислений с окружениями» — по сути — частный случай ООП со слегка непривычным синтаксисом.
          • sortarray sortarray
            12 июля 2016, 14:59
            buybackoff, ладно, я не буду спорить, там захватывается лексический контекст, поэтому, можно это назвать «cаpturing lambda», но мне это все отвратительно:) Это все искажает смысл происходящего:) Суть ведь не в том, что Вы пишите на лямбдах, а в том, что лямбда сязана с окружением:) Этого окружения программист как бы не видит, оно под ковром, отсюда возникает вся эта идиотская терминология:)
      • Александр
        12 июля 2016, 14:52
        buybackoff, а почему логику lua не перевел на api lua- там всяко быстрее получается?
  • Pobeditel
    12 июля 2016, 14:52
    почитал почувствовал себя дауненком)))) шутка)))
  • akuloff
    12 июля 2016, 15:03
    Как можно отказываться от «террибле» событийной модели — если ТАК работает биржа? Итс террибле бат ит из тру.
    • sortarray sortarray
      12 июля 2016, 15:08
      Alexey Kulikov, событийная модель — это вообще основа основ. Ничего в ней ужасного нет, она ужастна только для тех, кто не осилил, мягко говоря.
  • Тимофей Мартынов
    12 июля 2016, 15:24
    Для простых смертных как я написали бы хоть какое то пояснение на русском языке
    • Андрей К
      12 июля 2016, 15:27
      Тимофей Мартынов, вы там в своем трейдинге умничаете, дайте нам в своей луже поумничать =)
  • Тимофей Мартынов
    12 июля 2016, 15:24
    Что это все значит
  • cerenc
    12 июля 2016, 15:59
    Да, к большому сожалению, тоже ничего не понял: кому, зачем, что дает и так дальше, для людей " без высшего образования " 
      • valmac
        12 июля 2016, 19:11
        buybackoff, респект и уважуха! )
  • Prophetic
    12 июля 2016, 17:31
    buybackoff, очень хочется увидеть пример для QuikSharp. Буду ждать…
  • 5+ Бро…
  • Дмитрий ЕрМак
    12 июля 2016, 22:35
    Большой плюс Вам! Это более жизнеспособный проект, чем ранее озвученный :)
  • Cristopher Robin
    12 июля 2016, 22:38
    У автора расщепление сознания произошло. Я давно говорил, что программирование токсично для мозга не менее чем торговля.
  • а это… я не понял, оно торгует вообще, или писать надо?
    квик-коннектор это к локально запущенному квику или к серваку ихнему через инет?
    портфель позиций вместо ордеров это хорошо конечно, но если я эти позиции желаю открывать лимитниками по определенным ценам, то тогда как?
  • ELab
    13 июля 2016, 13:04
    Интересно. Нужно будет посмотреть. А то самопальный код уже мозг мой крушит
  • Рашид Гусейнов
    23 сентября 2016, 20:01
    Qscalp и другие платформы брать здесь: http://getanyplatform.com

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

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