Фреймворк для создания торговых роботов

Фреймворк для создания торговых роботов

Интро

Debut — это opensource-фреймворк для создания торговых роботов, который существенно ускоряет процесс разработки торговой стратегии и поддерживает API нескольких брокеров, надежный, быстрый, бесплатный и имеет открытые исходные коды. Есть также платная версия, которая предоставляет расширенный функционал разработчику. Debut представляет собой консольный инструментарий, однако, имеет визуализацию ключевых этапов разработки стратегии, таких как тестирование на исторических данных и построение графиков со значениями индикаторов и депозитарного баланса.

Возможности

Функционал из коробки доступен довольно большой, про каждую фичу можно написать отдельную статью, чем мы обязательно займемся позже. Давайте рассмотрим общий список возможностей и разберем ключевые моменты:

Набор инструментов для работы с биржей на верхнем уровне

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

Тестирование на исторических данных

Для оценки эффективности вашей стратегии есть механизм бектестинга (тестирования на истории), который покажет как работала стратегия в определенные исторические периоды и поможет оценить ее эффективность с точки зрения рисков, доходности, математического анализа и прочих критерий.

Визуализация результатов бектестинга

Также у разработчика есть возможность посмотреть графические результаты тестирования на истории - это позволит визуально оценить проблемные места в логике работы, улучшить что-то и понять устраивает ли результат работы, потому как цифры далеко не так эффективны как визуализация, с точки зрения подачи информации.

Просмотр бектестинга в режиме реального времени

В арсенале Debut есть продвинутый инструмент (плагин) для проигрывания исторических данных в реальном времени. Этот тип визуализации позволяет увидеть все ценовые тики, входы и выходы стратегии, формирование показаний индикатора и все это на исторических данных, но в реальном времени. Превосходный инструмент для дебаггинга и улучшения стратегии при ее разработке.

6 видов оптимизаций стратегии (генетические алгоритмы и кросс валидации)

Когда стратегия готова, нужно найти оптимальные параметры использования. Для этого есть целых 6 видов оптимизации, в основе которых лежат генетические алгоритмы и кросс-валидация. Среди доступных способов оптимизации есть Walk-Forward валидация в режиме rolling и anchored, а также настраиваемый режим работы генетических алгоритмов islands и classic. Вся эта математика безусловно заслуживает отдельной статьи, которую мы обязательно выпустим. Для наглядности ниже подборка визуальных примеров и отличий режимов оптимизации и валидации.

Anchored Walk Forward алгоритм, с привязкой к начальной дате тестирования на истории
Anchored Walk Forward алгоритм, с привязкой к начальной дате тестирования на истории
Rolling Walk Forward алгоритм, с динамическим сдвигом начала тестирования
Rolling Walk Forward алгоритм, с динамическим сдвигом начала тестирования
Классическая и <a href="https://api.vc.ru/v2.8/redirect?to=http%3A%2F%2Fmetahack.org%2Fgong-fukunaga-island-model-cec2011.pdf&postId=459675" rel="nofollow noreferrer noopener" target="_blank">Island</a> модели работы генетических алгоритмов
Классическая и Island модели работы генетических алгоритмов

Защита от переобучения при оптимизациях (Walk-Forward / Gentic Islands)

Многие стратегии чувствительны к обучению и не способны работать после оптимизации в условиях реального рынка, так как они "переобучились"(Overfitting). Для таких случаев в генетическом оптимизаторе предусмотрен ряд механизмов защиты.

Многопоточный режим работы (Multi CPU)

Математика занимает очень много процессорного времени, и чтобы оптимизация выполнялась быстрее модуль, выполняющий её, работает в многопоточном режиме. Вы можете задействовать столько ядер сколько вам захочется.

API нескольких бирж (Binance, Тинькофф инвестиции, Alpaca)

Сейчас к проекту подключены всего 3 брокера, но этот список не сложно расширить. В планах есть подключение биржи Coinbase.

Одновременный доступ к свечам на разных временных интервалах

Для многих задач необходима работа сразу с несколькими свечами в разных временных интервалах. Для этого Debut предоставляет удобный программный интерфейс.

Гибкая настройка и система плагинов

Настраивайте вашу стратегию так, как хотите. Ядро фреймворка гибкое и позволяет сделать все что угодно от системы мониторинга рынка, до сложнейшей торговой стратегии.

Работа с биржевым стаканом

Кроме свечных данных есть режим получения сделок из стакана. Он позволяет включить в ваши стратегии не только логику основанную на предыдущих данных, но и учитывать реалии текущего рынка.

Гибкое управление позициями

Разработчик стратегии имеет возможность создавать транзакцию на закрытие позиций, таким образом закрытие нескольких позиций будет происходить за 1 запрос к серверу биржи. Также предусмотрен механизм частичного закрытия позиций, для плавного освобождения маржи или в случае наличия нескольких тейк профитов закрывать позицию по частям, при достижении каждого из них.

Событийная ориентированность

Все процессы происходящие в ядре фреймворка имеют событийную ориентированность, это значит что в любой момент их можно перехватить и остановить или же просто отследить и добавить свою собственную логику в определенный момент.

Самые популярные задачи уже решены системой плагинов. Ядро лишь предоставляет необходимые API для работы, не нагружая вашу стратегию не нужными вам вычислениями - это, к слову, основная философия фреймворка. Разработчик должен сам добавлять те плагины которые выполняют необходимые задачи, например установка стоп лосс или создание DCA системы усреднений. Ниже можно найти информацию о том какие задачи уже решены и могут быть использованы при реализации вашей торговой стратегии.

Плагины

Все плагины подключаются по требованию и помогают обработать самые популярные сценарии при создании торговых роботов. Тем самым экономя ваше время.

Отчеты об эффективности

Плагин строит математические и рыночные отчеты для оценки эффективности стратегии. Для этого используются: математическое ожидание выигрыша, просадки (абсолютная, относительная, потенциальная), проценты успешных сделок и многие другие параметры. Также данный плагин визуализирует результаты в виде графиков доступных для просмотра в браузере. Для этого создается локальный сервер на NodeJS и результаты доступны на localhost:5000.

Плеер (реалтайм)

Это часть плагина для построения отчетов, которая способна строить визуализацию в режиме реального времени. Как для боевых торгов, так и для бектестинга на истории.

Grid система

Для создания торгующих по системе Мартингейла (грид) или DCA торговых роботов предусмотрен Grid-Plugin в котором можно настроить частоту усреднения (шаг сетки), увеличение размера позиций при докупках, кол-во усреднений и общий стоп-лосс для всех сделок и другие параметры

Нейронная сеть (бета)

В вашем распоряжении есть плагин с нейронной сетью способной обучаться классификации текущего рыночного состояния и определять 5 состояний рынка: Сильные или слабые восходящие/нисходящие тренды и нейтральный рынок (флэт). Имеет настройки количества слоев сети и оконный режим кросс-валидации. После обучения модель сохраняется в виде json файла в папке стратегии. Подробное описание алгоритма можно найти здесь. Готовых обученных моделей пока нет, они появятся позже, но вы можете обучить их самостоятельно под ваш инструмент.

Торговая Сессия

Данный плагин позволяет конфигурировать в часах время работы торговой стратегии, например настроить режим торговли в основной сессии рынка. Плагин также автоматически подстраивается под смену часовых поясов для американских рынков, таким образом перенастраивать торговую сессию не нужно и при тестировании на длительных временных периодах это очень удобно. Также с помощью данного плагина можно отследить событие окончания торгового дня.

Реинвестирование

Для автоматического перерасчета доступного депозита есть плагин который учтет ваши доходы и перерасчитает размер позиций автоматически.

Стопы / Тейки / Трейлинг / Страховочные ордера

Настраиваемый риск менеджмент для стратегии, позволяет осуществлять контроль за максимальными просадками, устанавливать тейк профиты и стоп лоссы для каждой сделки в ручном режиме путем указания конкретной цены или в автоматическом режиме путем указания процентов для стопа и тейка. Также данный плагин поддерживает 3 вида трейлинга стопов, а именно: моментальный трейлинг, трейлинг при достижении тейк профита, моментальный трейлинг с активацией после достижения тейк профита. Также в арсенале плагина есть система автодокупок без увеличения лотности, так называемые страховочные сделки.

Плагин Утилит

Утилитарный плагин нужен для упрощения процесса разработки других плагинов и для работы с различного рода данными и сущностями. Все инструменты в нем сгруппированы по типу выполняемых задач. Работа с датами, работы с файловой структурой, быстрая математика,. Из конкретных примеров данный плагин позволяет быстро получить суммарных доход всех открытых позиций или выполнить округление числа до заданной точности и другие рутинные вычислительные задачи.

Твой собственный плагин

Если среди плагинов не нашлось инструментов для ваших задач, создание плагина процесс довольно простой так как все в данном фреймворке имеет привязку к определенным событиям или этапам жизненного цикла, например при аварийном закрытии вы легко можете выгрузить данные работы стратегии в собственную базу данных и восстановить все как было после перезапуска процесса.

Примеры кода

Стратегия

С учетом базовых возможностей платформы - 100 строк кода вполне достаточно, чтобы написать свою стратегию

export class CCISolder extends Debut { declare opts: CCISolderBotOptions; declare plugins: StatsPluginAPI & ReportPluginAPI & ShutdownPluginAPI; private atr: ATR; private cci: CCI; private cciValue: number; private insideNormal: boolean; get secondCandle() { return this.candles[2] || null; } constructor(transport: BaseTransport, opts: CCISolderBotOptions) { super(transport, opts); this.registerPlugins([ this.opts.from && this.opts.to && sessionPlugin(this.opts), this.opts.reinvest ? reinvestPlugin() : null, virtualTakesPlugin(this.opts), orderExpirePlugin(this.opts), statsPlugin(this.opts), ]); this.atr = new ATR(this.opts.atrPeriod); this.cci = new CCI(this.opts.cciPeriod); this.insideNormal = true; } public getIndicators = (): IndicatorsSchema => { return [ { name: 'cci', figures: [ { name: 'cci', getValue: () => { return this.cciValue; }, }, ], levels: [this.opts.cciThresholdSell, this.opts.cciThresholdBuy], }, ]; }; async openMonitoring(vr?: number, cci?: number) { let target: OrderType; if (cci >= this.opts.cciThresholdSell && vr >= this.opts.ratioShort) { target = OrderType.SELL; } if (cci <= this.opts.cciThresholdBuy && vr >= this.opts.ratioLong) { target = OrderType.BUY; } if (target && !this.orders.length && this.insideNormal) { this.insideNormal = false; await this.createOrder(target); } } async onCandle({ h, l, c }: Candle) { if (!this.secondCandle) { return; } const atr = this.atr.nextValue(h, l, c); this.cciValue = this.cci.nextValue(h, l, c); const { c: cSecond } = this.secondCandle; const range = Math.max(h, cSecond) - Math.min(l, cSecond); // Проверим что cci была в нормальном канале перед тем как допустить сигналы входа this.insideNormal = this.insideNormal || (this.cciValue > this.opts.cciThresholdBuy && this.cciValue < this.opts.cciThresholdSell); let vr = 0; if (!atr) { return; } vr = range / atr; await this.openMonitoring(vr, this.cciValue); } }

Плагин, для реинвестирования прибыли

import {PluginInterface} from '@debut/types'; import {orders} from '@debut/plugin-utils'; export function reinvestPlugin (): PluginInterface { // this = undefined here // but you can use deferred assignment like this: let ctx: PluginCtx; return { name: 'reinvest', onInit () { ctx = this; }, async onClose (order, closing) { // this = PluginCtx here if (! order.openPrice) { return; } const profit = orders.getCurrencyProfit (closing, order.price) - order.commission.value; // this -> PluginCtx this.debut.opts.amount +=profit; }, }; }

Комьюнити и обмен опытом

Проекту уже 4 года и за это время он оброс комьюнити, которое поможет вам настроить окружение для работы, ответит на вопросы или же поможет найти примеры торговых стратегий в свободном доступе. Также у нас есть телеграмм чат, где можно обсудить насущные проблемы и найти единомышленников.

Ссылки

Документация и наш сайт, тут можно прочитать о возможностях платформы, найти основную информацию о разработке и описание всех доступных функций.

Страница проекта на github, где можно найти примеры готовых торговых стратегий и разобраться с установкой и настройкой окружения для начала работы.

Наши индикаторы для Debut и других JavaScript проектов, которые на сегодняшний день являются самыми быстрыми на рынке среди аналогов на JavaScript, они полностью покрыты юнит тестами и валидируются дополнительно внешними зависимостями (другими sdk) для совпадения результатов вычислений.

Другие наши статьи

2222
18 комментариев

Ой ребзя, если руками не можете торговать в профит, даже не пытайтесь в алго, я вам говорю как человек который несколько лет писал всевозможных ботов под трейдинг. Сначала ручками научитесь, прежде чем автоматизировать. Just my .5 cents.

13

Следующая статья будет как раз для тех, кто не хочет или не может разобраться

Интересно
Надо попробовать

1

Спасибо, проекту уже 4й год, довольно мощный инструмент получился, а совсем недавно мы поддержали API Тинькофф инвестиций 2.0, за них сейчас кешбек 10% получаете при торговле.

1

Интересно, с квиком как конектится?

1