Название может показаться вам сказочным, хотя результаты удивили и нашу команду. Но обо всем по порядку!
№1. Источник данных
В качестве источника данных мы решили использовать финансовые котировки Binance Spot Market по валютной паре MATICUSDT.
Binance позволяет получать данные для 1м графика в свободном доступе, вам даже не нужно получать ключ API.
Данные о MATICUSDT начинаются с 12 января 2019 года. На момент написания этой статьи уже существует около 1 400 000 строк.
Следующий код позволяет загрузить все финансовые котировки примерно за 10–20 минут и создаст CSV-файл с необходимыми исходными данными.
@Тут идет вставка кода@
В результате мы получим следующий DataFrame:
@Тут идет вставка результата кода@
#2. Создайте стратегию своей мечты
Каждый трейдер пытается придумать свою собственную стратегию и протестировать ее на исторических данных.В то же время каждый трейдер хочет, чтобы его стратегия приносила максимально возможную прибыль.
Другими словами, стратегия должна уметь определять лучшее время для покупки актива и лучшие моменты для его продажи.
В этой конкретной статье мы говорим о спотовом рынке и не рассматриваем короткие позиции.
В нашей следующей статье мы рассмотрим использование этого метода в торговле фьючерсами.
Итак, вы готовы создать стратегию своей мечты? Прямо сейчас мы собираемся показать вам, как вы можете торговать MATICUSDT на 1-минутном таймфрейме и получать максимальную прибыль.
Для наших расчетов мы будем учитывать только цену закрытой 1-метровой свечи.
В этом случае наш график на 1 февраля будет выглядеть следующим образом:
@Тут вставка графика@
Приступая к построению идеальной стратегии, необходимо найти локальные точки максимума и минимума функции цены актива.
Чтобы их найти, давайте в качестве первого шага применим к нашей функции двойное экспоненциальное сглаживание.
@тут вставка кода@
@вставка графика@
После этого нужно найти локальные экстремумы на графике.
Комиссия Binance Spot составляет около 0,1% за каждую сделку.
Соответственно, для получения прибыли цена продажи должна быть выше цены покупки как минимум на 0,2%.
Примем за параметр 0,5% минимальную дельту между пиками в нашей прибыльной стратегии.
@вставка кода@
@вставка графика@
Вот так мог бы выглядеть дневной график мечты трейдера.
У нас есть идеальный вход в позицию по акции и идеальные моменты для ее закрытия (т.е. продажи актива).
#3.Определение сигнала — настройка задачи классификации
Как только мы определили локальные экстремумы, давайте установим значение сигнала 0 или 1 в каждой строке нашего набора данных (рядом с каждой свечой).
Если это точка локального минимума, мы устанавливаем 1, пока не достигнем точки локального максимума.
Когда мы добираемся до точки локального максимума, мы устанавливаем 0 и делаем это до тех пор, пока снова не достигнем точки локального минимума.
По сути, это означает, что когда у нас есть 1 — мы должны либо купить его, либо держать актив, пока не получим 0.
Как только он станет равным 0 — продаем и не покупаем, пока не получим 1.
Этот код установит сигналы для всего набора данных:
@вставка кода@
@скрин нашего фдатасета@
Теперь давайте посмотрим, какую прибыль может принести нам наша идеальная стратегия на основе последних 20 процентов исторических данных (примерно 200 дней).
@вставляем код@
Как видите, стратегия будет заключать чуть более 2000 сделок за выбранный временной график (около 200 дней) и будет зарабатывать около 2900% без учета сложных процентов — т.е. система всегда начинает с одного и того же размера позиции. Биржевым сбором в каждой сделке мы считали 0,2%.
Теперь не нужно быть гением математики, чтобы подсчитать, что эта стратегия мечты дает нам более 14% прибыли в день! Такая прибыль выглядит просто фантастически, и именно так должна выглядеть идеальная стратегия.
Даже если мы определим точки открытия и закрытия позиции в 10 раз хуже идеального — результат все равно впечатляет.
Добавление значений технических индикаторов
Люди используют технический анализ уже много десятилетий — по мнению биржевых аналитиков, существуют тысячи индикаторов, которые должны помочь трейдерам прогнозировать поведение любого данного актива.
Мы используем библиотеку TA Python — она содержит более 80 самых популярных технических индикаторов. Добавим значения всех этих показателей в наш набор данных:
@код вставляем@
В результате мы получили набор данных с более чем 1400 000 строк и почти 100 столбцов. Мы будем использовать его для изучения и выявления трендов рассматриваемого актива.
@вставка куска фдатасета@
#4.Обучение и тестирование
Теперь давайте разделим набор данных на две части: 80% будут использоваться для обучения, а остальные 20% — для нужд тестирования.
Применим для решения задачи классификации самый известный алгоритм машинного обучения — случайный лес.
В следующей статье мы сравним разные алгоритмы машинного обучения с точки зрения их эффективности в решении нашей задачи (наиболее интересными мне кажутся xgboost и RNN LSTM).
@ всталвяем код @
У нас есть модель, и теперь давайте протестируем ее на 20% всего тестового набора массива данных.
@вставляем код@
У нас есть набор данных с сигналами, которые совпадают с идеальными в 85% случаев.
Если мы протестируем предложенную алгоритмом стратегию, то получим такую статистику:
@ вставляем код @
@вставляем результат@
Количество сделок за тестовый период (200 дней) составляет более 5000!
Прибыль более 1600 процентов!
Параллельно появляются отрицательные убыточные сделки (почти половина всех сделок), хотя средний убыток по стратегии значительно ниже средней прибыли по сделке.
Итак, резюмируем:
На первый взгляд результат действительно ошеломляющий, точность предсказания сигналов (когда покупать и продавать актив) дает возможность создать достаточно прибыльную стратегию.
Алгоритм случайного леса зарекомендовал себя как один из лучших алгоритмов для задач классификации, а технические индикаторы, на которые мы опираемся, — самые известные и проверенные. Набор обучающих данных содержит более миллиона строк — так что с точки зрения машинного обучения результат в 85% точности вполне реален.
Несомненно, есть что улучшать:
- В текущей статье идеальная модель построена довольно грубо. Идеальная стратегия может быть гораздо более прибыльной. Например, мы можем отказаться от использования двойного экспоненциального сглаживания и вместо этого попробовать другие методы. метод полиномиальной аппроксимации;
- Мы взяли все 80 самых известных технических индикаторов — наверняка формула успеха заключается в составлении различных индикаторов с разными параметрами;
- Мы рассмотрели только одну валютную пару и использовали один 1-миллионный таймфрейм — хотя мы можем попробовать все виды активов и использовать разные таймфреймы;
- Мы можем использовать разные алгоритмы машинного обучения и сравнивать результаты (в частности, мы можем попробовать использовать xgboost и RNN LSTM);
- Переобучать систему можно один раз за некоторый периодический интервал;
Чтобы убедиться, что система действительно работает, мы внедрили модуль для прогнозирования сигнала для каждой новой свечи, которую система получает с биржи каждую минуту.
Когда система получает данные об очередной минутной свече — она вычисляет значения технических индикаторов (используя N = 100 предыдущих строк) и делает прогноз сигнала по модели.
Данные о сигналах отправляются и публикуются в созданном нами Telegram-канале — вы можете подписаться и получать уведомления о сигналах в режиме реального времени.
Полный код и сохраненные наборы данных можно найти в нашем репозитории git —
Пожалуйста, не стесняйтесь присылать нам любые вопросы или идеи по улучшению нашего алгоритма — наша электронная почта
Мы всегда открыты для новых контактов и потенциального сотрудничества!