Alexander Rumyantsev
8
All posts from Alexander Rumyantsev
Alexander Rumyantsev in Quantrum,

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

Индикатор 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 уже чище и показывает лучшие результаты.
  • Сигнальная линия дает наибольшую прибыль и наименьшую просадку.

Гистограмма

Линия MACD

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Результаты

СтратегияВремя торговКол-во сделокPnLДоходностьПросадки
Купи-ДержиOpen53/0-160.1%-54.9%
Как есть: гистограммаOpen+1163/16313%30.8%-29.3%
Как есть: линия MACDOpen+169/6819%68%-22.3%
Как есть: сигнальная линияOpen+140/3919%90.2%-21.6%
Стоп-лоссOpen+192/9118%77%-19%
В обе стороныOpen+140/396%28%-27%
ФильтрOpen+124/2319%49.6%-12.9%
  • Время торгов — время, когда алгоритм начинает торговать: Open — открытие рынка, Open+1 — через 1 час после открытия рынка.
  • Кол-во сделок — количество сделок на покупку и продажу. В поле указаны Покупки/Продажи.
  • PnL — отношение прибыльных дней к убыточным. Если прибыльных больше — значение положительное.

Заключение

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

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

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