buybackoff

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 :)

★33
35 комментариев
хочешь им весь бизнес поломать?))
avatar
nik, нет — у них готовая система, у меня — инструмент и строительный материал, высокоуровневая общая абстракция CEP. Кому-то нравятся готовые коробочки, а кому-то — open source. Однако в обоих случаях логику стратегий надо писать самому…
avatar
мы принимаем pull requests :)
а вас много?
avatar
Андрей К, мы — это все open source сообщество :)
avatar
buybackoff, а 399$ тогда кому идут? xD
Бабёр-Енот, нам! через меня :) про массаж и пиво кстати — реально, слов на ветер не бросаю :)
avatar
и спрятать всю логику и состояние в лямбдах 

строго говоря, состояние находится в замыканиях, а не в лямбдах. Лямбда — это функция, в математическом смысле, у нее нет никакого состояния, это отображение. Честно говоря, достало уже все это передергивание понятий в этом вашем программировании. Все это идет от избытка сахара, ИМХО. Люди вообще перестают понимать, что у них в коде творится.
sortarray sortarray, ну ладно, исправлю — «в лямбдах и замыканиях». Однако, есть такие «замыкающие лямбды», в которые передается внешний параметр, о них и идет речь. Эти параметры становятся полями служебного класса, который создается для лямбды, — это и есть скрытое состояние, а не 100500 параметров внутри одного мега-класса. Часто вообще нет никакого состояния. Это вы уже передергиваете и придираетесь к словам. Про closures & lambdas можно поговорить в другом месте.
avatar
buybackoff, нет никаких замыкающих лямбд. При вызове каждой такой ф-ции создается новое замыкание, которое и таскает это состояние. Это называется «модель вычислений с окружениями» — по сути — частный случай ООП со слегка непривычным синтаксисом.
sortarray sortarray, «capturing  lambda» называется по английски
avatar
buybackoff, ладно, я не буду спорить, там захватывается лексический контекст, поэтому, можно это назвать «cаpturing lambda», но мне это все отвратительно:) Это все искажает смысл происходящего:) Суть ведь не в том, что Вы пишите на лямбдах, а в том, что лямбда сязана с окружением:) Этого окружения программист как бы не видит, оно под ковром, отсюда возникает вся эта идиотская терминология:)
buybackoff, а почему логику lua не перевел на api lua- там всяко быстрее получается?
avatar
почитал почувствовал себя дауненком)))) шутка)))
avatar
Как можно отказываться от «террибле» событийной модели — если ТАК работает биржа? Итс террибле бат ит из тру.
avatar
Alexey Kulikov, событийная модель — это вообще основа основ. Ничего в ней ужасного нет, она ужастна только для тех, кто не осилил, мягко говоря.
sortarray sortarray, Reactive Extensions, Akka.Streams вроде как бы и события, а вроде и потоки данных. Или еще интереснее — Interactive Extensions, там вообще pull модель. Собития можно считать данными и наоборот, это все дихотомия. Трейд — несомненно событие, однако как данные он представляется как время + цена + количество.
avatar
Для простых смертных как я написали бы хоть какое то пояснение на русском языке
Тимофей Мартынов, вы там в своем трейдинге умничаете, дайте нам в своей луже поумничать =)
avatar
Что это все значит
Тимофей Мартынов, это значит, что если есть желание и умение написать гибкую прозрачную систему под себя, есть готовые кирпичики.
avatar
Да, к большому сожалению, тоже ничего не понял: кому, зачем, что дает и так дальше, для людей " без высшего образования " 
avatar
cerenc, вот для таких случаев готовые коробочные решения и нужны :)
avatar
buybackoff, респект и уважуха! )
avatar
cerenc, это вам в оригинальный пост надо идти за $399. Так как я ничего не продаю и все бесплатно, то и поддержки нет. Все открыто и прозрачно, ссылка на презентацию есть в readme на ГитХабе.
avatar
buybackoff, да, спасибо
avatar
buybackoff, очень хочется увидеть пример для QuikSharp. Буду ждать…
avatar
Большой плюс Вам! Это более жизнеспособный проект, чем ранее озвученный :)
У автора расщепление сознания произошло. Я давно говорил, что программирование токсично для мозга не менее чем торговля.
avatar
Cristopher Robin, а вы на каких токсинах сидите?
avatar
а это… я не понял, оно торгует вообще, или писать надо?
квик-коннектор это к локально запущенному квику или к серваку ихнему через инет?
портфель позиций вместо ордеров это хорошо конечно, но если я эти позиции желаю открывать лимитниками по определенным ценам, то тогда как?
Бабёр-Енот, это не торговая система, это инструмент, идеально подходящий для написания своей. Квик коннектор — это отедльный проект, пример их связки будет позже хз когда. Трейдинг — отдельная тема. Там очень много черновых наработок про умный execution сервис, в который можно засунуть любой «глупый» коннектор (API брокера/биржи). Желаемая позиция может быть с параметром «не дороже цены Х». В общем виде вопрос execution-а решить сложно, даже сомневаюсь нужно ли пытаться и выкладывать — получится очередной монстр, решающий все проблемы на 80% и ни одну полностью на 100%.
avatar
Интересно. Нужно будет посмотреть. А то самопальный код уже мозг мой крушит
avatar
Qscalp и другие платформы брать здесь: http://getanyplatform.com
avatar

теги блога buybackoff

....все тэги



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