Индикатор MACD широко известен среди трейдеров . Мне его сигналы помогают находить развороты и предупреждения о коррекциях . Много написано, как использовать его сигналы для открытия позиций, а мы сегодня рассмотрим прикладное применение в алготрейдинге .Все будет тестироваться на Quantopian (см. сюда), писать код будем на Python . Рассмотрим следующие стратегии: Что надо знать и как не надо делать.Как есть: гистограмма, линия MACD, сигнальная.Добавим стоп-лосс.Торгуем в двух направлениях.Отфильтруем боковики и волатильность.Пара слов о MACDИндикатор основан на экспоненциальных скользящих средних и показывает их пересечения. Когда основная линия MACD над нулем, это означает, что быстрая средняя находится над медленной, а цена растет в краткосрочном периоде. Положение гистограммы над нулем говорит о росте цены. Дополнительно на индикаторе ищут расхождения движения цены и сигнальных линий, что может предупредить о развороте тенденции, но это уже другая история.Базовые параметры: быстрая скользящая — EMA(12)медленная скользащая — EMA(26)сигнальная линия — EMA(9)Разница первых двух используется для построения линии MACD. Сигнальная линия сглаживает линию MACD. Разница сигнальной и линии MACD дают гистограмму.ГипотезаИсходя из теории и графика, предположим, что при пересечении любой составляющей индикатора MACD нуля снизу вверх сообщает нам, что цена начала расти. Гистограмма дает сигнал раньше всех и обладает большим количеством ложных сигналов, линия MACD дает меньше сигналов, а самая чистая должна быть сигнальная линия.Исходя из этого, мы должны входить в рынок только на росте и будем брать все растущие движения. Звучит отлично!Условия тестирования: SPYc 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. Где корень неудач? Или предложите, какие стратегии стоит рассмотреть в будущем. Учитывайте, что это учебная статья, а не законченный алгоритм.