Как разработать и протестировать прибыльную торговую стратегию биткойнов с помощью фреймворка для тестирования на истории Python.

В этой статье я собираюсь показать, как применить торговую стратегию MACD к данным о торговле биткойнами от Bitmex. Цель этой статьи не в том, чтобы разработать прибыльную стратегию, а в том, чтобы показать вам, как получить криптографические данные в Backtrader, чтобы вы могли разработать свою собственную торговую стратегию.

В конце я покажу, как визуализировать торговую стратегию MACD и построить график, как показано ниже. Статья заканчивается интересным поворотом.

Вот несколько ссылок, которые могут вас заинтересовать:

- Complete your Python analyses 10x faster with Mito [Product]
- Free skill tests for Data Scientists & ML Engineers [Test]
- All New Self-Driving Car Engineer Nanodegree [Course]

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

См. другие мои статьи по этой теме:



Скачать данные

Первый шаг - загрузить данные. Файлы ежедневной торговли Bitmex общедоступны для загрузки.

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

Затем мы определяем функцию, которая загружает торговый файл и сохраняет его в папку.

Основные строительные блоки готовы. Теперь нам нужно только перебирать даты и загружать ежедневные файлы.

Предварительно обработать данные

Теперь, когда у нас есть торговые данные, нам нужно предварительно обработать их, чтобы Backtrader мог с ними работать.

Glob - полезная библиотека Python, с помощью которой мы можем получить пути к файлам для определенного постфикса. В нашем случае все файлы с расширением .csv.gz.

Теперь давайте загрузим эти файлы с помощью pandas и объединим их в единый DataFrame pandas. Приведенный ниже код также фильтрует сделки по символу XBTUSD (биткойн), поскольку другие нам не нужны.

Как выглядят необработанные торговые данные?

Нам нужно преобразовать метку времени из строки в тип pandas DateTime:

Как показано выше, каждая сделка Bitmex находится в отдельной строке. Backtrader не знает, как работать с этим форматом данных, поэтому нам нужно преобразовать его в формат OHLC (Open, High, Low, Close).

Для этого мы сгруппируем сделки и рассчитаем цены открытия, максимума, минимума, закрытия и объем для каждой минуты.

Как выглядят данные OHLC после этого преобразования:

Теперь, когда у нас есть данные OHLC за 1 минуту, нам просто нужно сохранить их на диск.

Бэктестинг

Если вы еще не слышали о Backtrader, предлагаю вам прочитать мои предыдущие статьи на эту тему.

По умолчанию Backtrader не работает с дробями, потому что многие фондовые биржи не поддерживают дробные акции (например, покупка 0,05 акций Microsoft).

Криптобиржи разные. Текущая цена биткойнов настолько высока, что многие не могут позволить (или не хотят рисковать) купить 1 биткойн.

Давайте настроим Backtrader для поддержки дробной торговли:

В приведенном выше коде мы включили дробную торговлю в функции getsize. Мы также определили комиссию для каждого ордера, которая на Bitmex составляет 0,00075.

Торговая стратегия MACD

Торговая стратегия - это набор объективных правил, определяющих условия, которые должны быть выполнены для входа и выхода из сделки.

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

MACD рассчитывает две скользящие средние разной длины для определения направления и продолжительности тренда. Затем он берет разницу в значениях между этими двумя скользящими средними (линия MACD) и экспоненциальной скользящей средней (сигнальная линия) этих скользящих средних. У Tradeview есть отличная запись в блоге о MACD.

Стратегию можно резюмировать следующим образом:

  • входить в сделку (покупать), когда линия MACD пересекает сигнальную линию MACD.
  • выход из сделки (продажа), когда линия MACD пересекает сигнальную линию MACD,

Обратите внимание, изначально MACD определен для длинных и коротких позиций. Но в нашем случае мы тестируем только длинные позиции.

MACD в Backtrader

Давайте определим торговую стратегию MACD в Backtrader:

  • Чтобы сделать стратегию настраиваемой, мы добавляем параметры индикатора в кортежи (см. Кортеж params в коде ниже). Это упрощает проверку того, как стратегия будет работать при различных параметрах.
  • В методе инициализации мы инициализируем индикатор MACD и пересечение. Когда линия MACD пересекает сигнальную линию, пересечение будет иметь значение 1 и -1, когда произойдет противоположное пересечение.
  • Следующий метод обрабатывает каждую точку данных OHLC последовательно и проверяет, находимся ли мы в данный момент в позиции (что означает, что мы купили биткойн).
  • Если мы не в позиции и пересечение равно 1, мы покупаем биткойн. Мы держим его до тех пор, пока не произойдет обратное (то есть кроссовер равен -1). Затем стратегия продает это.

Мы также добавили в торговую стратегию 3 служебных метода:

  • notify_order сообщает нам, был ли заказ принят или отклонен. Он также печатает цену, стоимость и комиссию заказа.
  • Метод notify_trade выполняется после того, как стратегия продает позицию, и вычисляет валовую и чистую прибыль от сделки (то есть с комиссией и без нее).
  • В конце выполняется метод stop, который сообщает об окупаемости инвестиций в стратегию.

Теперь, когда мы реализовали все строительные блоки стратегии, мы можем инициализировать движок Backtrader Cerebro и запустить тестирование на истории. В приведенном ниже коде:

  • мы устанавливаем наличность портфеля в 1000 долларов,
  • определить Datafeed из файла, который мы предварительно обработали,
  • добавить стратегию MACD в движок Cerebro,
  • добавьте Bitmex CommissionInfo, чтобы он работал с долями Биткойна.
  • мы добавляем два анализатора, которые в конечном итоге будут оценивать эффективность нашей стратегии.

Теперь осталось только выполнить бэктест и распечатать результаты анализаторов:

Твист

Как и в случае с машинным обучением, мы можем быть слишком взволнованы результатами.

Метод остановки показал, что рентабельность инвестиций составила 7,31%. Это потрясающе: с 1000 долларов мы заработаем 1073 доллара в месяц. У нас ведь выгодная стратегия?

Не совсем!

Посмотрим на анализаторы TimeReturn:

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

Визуализация

Давайте визуализируем торговую стратегию MACD:

Здесь становится очевидным, почему стратегия «покупай и держи» так хорошо работает. Биткойн переживает период огромного роста.

Прежде чем ты уйдешь

Как обычно, вы можете загрузить этот Блокнот Jupyter, чтобы опробовать примеры на своей машине.

Следуйте за мной в Twitter, где я регулярно пишу твиты о Data Science и машинном обучении.