Бэктестинг: алгоритм на основе 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 уже чище и показывает лучшие результаты.
- Сигнальная линия дает наибольшую прибыль и наименьшую просадку.
Сигнальная линия
Код алгоритма: Код доступен на 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.
Готовы начать торговать💰? Тогда открывайте счет поближе к профессионалам.👍