Бэктестинг: алгоритм на основе MACD

5 месяцев назад
42 в quantopian

Индикатор MACD широко известен среди трейдеров💵. Мне его сигналы помогают находить развороты⤴ и предупреждения о коррекциях⛔. Много написано, как использовать его сигналы для открытия позиций, а мы сегодня рассмотрим прикладное применение в алготрейдинге🤖.

Все будет тестироваться на Quantopian (см. сюда), писать код будем на Python🐍. Рассмотрим следующие стратегии:

  • Что надо знать и как не надо делать.
  • Как есть: гистограмма, линия MACD, сигнальная.
  • Добавим стоп-лосс.
  • Торгуем в двух направлениях.
  • Отфильтруем боковики и волатильность.

Пара слов о MACD

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

Базовые параметры:

  • быстрая скользящая - EMA(12)
  • медленная скользащая - EMA(26)
  • сигнальная линия - EMA(9)

Разница первых двух используется для построения линии MACD. Сигнальная линия сглаживает линию MACD. Разница сигнальной и линии MACD дают гистограмму.

🎓Гипотеза

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

Исходя из этого, мы должны входить в рынок только на росте и будем брать все растущие движения. Звучит отлично!👍

Условия тестирования:

  • SPY
  • c 01/01/2004 до 30/12/2016 (13 лет)
  • торгуем спустя 1 час после открытия рынка

☔Что надо знать и как не надо делать

Начнем с простого теста, попробуем покупать актив по факту пересечения нуля снизу вверх каждой составляющей индикатора MACD: гистограмма, линия, сигнальная линия. Каждый день будем брать 40 дней истории и рассчитывать значения индикатора с помощью библиотеки ta-lib. Внизу графики тестов:

Гисторграмма

Линия MACD

Сигнальная линия

Данные оказались обратными предположению, гистограмма дает наилучший результат, затем идет линия, а хуже всех показатели у сигнальной. Пристальное изучение позволило найти ошибку, все дело в нестабильном периоде экспоненциальной средней (EMA). Ее значения напрямую зависят от длины анализируемой истории. Если история короткая, то библиотека ta-lib рассчитывает ее равной обычной скользящей средней (SMA). А это дает удивительно большую ошибку, так как сам MACD весь состоит из EMA.Увеличив период истории сразу до 500 дней, исключим любой намек на подобные ошибки и получим результаты, которые и предположили. Далее рассмотрим стратегию "Как есть".

👎Как есть: гистограмма, линия MACD, сигнальная

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

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

Сигнальная линия

Код алгоритма: Код доступен на Quantrum.me.

👎Добавим стоп-лосс

Так как мы торгуем только в лонг и у нас есть просадка в -20%, попробуем добавить стопы в 3% от цены открытия. До этого мы закрывались при пересечении сигнальной линией MACD и нуля. Теперь будем контролировать просадку и закрываться за час до конца торгов, если цена опустилась ниже 3% порога.

На графике ниже видны не сногсшибательные результаты. Удалось отыграть ~1% просадки и поплатиться частью прибыли. Дополнительно поставлен фильтр, чтобы алгоритм не перезаходил на падающей цене - цена предыдущего дня должна быть ниже текущей.

Код алгоритма ниже: Код доступен на Quantrum.me.

👎Торгуем в двух направлениях

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

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

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

👎Отфильтруем волатильность и боковики

Волатильность будем фильтровать повышенным значением ATR относительно среднего за последние 200 дней. Боковики постараемся найти положением средних, когда SMA20 находится в 1,5% от SMA50. В это время позиции не открываем.

Результаты показывают, что купи-держи значительно лучше, а вот просадку удается сократить до 13%. Хоть что-то...

Код алгоритма ниже: Код доступен на Quantrum.me.

🥇Результаты

Результаты доступны на Quantrum.me.

  • Время торгов - время, когда алгоритм начинает торговать: Open - открытие рынка, Open+1 - через 1 час после открытия рынка.
  • Кол-во сделок - количество сделок на покупку и продажу. В поле указаны Покупки/Продажи.
  • PnL - отношение прибыльных дней к убыточным. Если прибыльных больше - значение положительное.

🏁Заключение

Результаты тестов показывают, что в голом виде индикатор MACD не подходит для создания несметного богатства💰, во всяком случае на SPY. Удивительно, но обнаружил относительно хорошее поведение MACD и QQQ (здесь не публикую, попробуйте сами), в сравнении с другими "голыми" индикаторами.

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

💬Напишите в комментариях, как можно улучшить алгоритм с MACD. Где корень неудач? Или предложите, какие стратегии стоит рассмотреть в будущем. 

Александр Румянцев aka "iamraa"
Автор Quantrum.me
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.

Готовы начать торговать💰? Тогда открывайте счет поближе к профессионалам.👍

Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное

Привет! Я робот. Хозяин поручил мне проголосовать за Ваш пост! Я нашла похожий контент, который может быть интересен читателям ГОЛОСа:
https://quantrum.me/819-bektesting-algoritm-na-osnove-macd/