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

701 | ★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

Читайте на SMART-LAB:
Как устроен бизнес ДОМ.PФ? Рассказываем в интервью
☝️ Говорим на сложные темы простым языком   🔵Как устроен бизнес ДОМ.PФ? 🔵Кто сегодня инвестирует в компанию? 🔵Что в планах на ближайшее...
Фото
Денежный рынок vs облигации: фокус смещается
В период роста ключевой ставки Банка России фонды денежного рынка стали весьма популярны. За это время они обеспечили инвесторам высокую...
Фото
12 марта Группа Ренессанс страхование опубликует МСФО за 2025 год
Напоминаем, что 12 марта 2026 года RENI опубликует МСФО Группы за 2025 год, а также проведет День инвестора, чтобы рассказать о ситуации на...
Фото
Хэдхантер. Отчет МСФО 25г. “Режет косты“ и ждёт X2 темпов роста по выручке на 26г.
Вышли финансовые результаты по МСФО за Q4 2025г. от компании Хэдхантер: 👉Выручка — 10,47 млрд руб. (+0,4% г/г) 👉Операционные расходы —...

теги блога buybackoff

....все тэги



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