16.05.2020, 01:24
Работает ли индикатор MACD?
Проверяем на акциях S&P 500
Категории: Рынок акций, США
Я не большой фанат технического анализа. Его почти невозможно фальсифицировать и поэтому он ненаучен. Но используя кое какие методы машинного обучения можно попробовать реально протестировать индикатор без брутфорса (перебора всех возможных комбинаций).
Я все чаще замечаю что аналитики цитируют индикатор MACD. Возможно потому что стал больше смотреть CNBC=) И поэтому задался вопросами: "Почему так много людей используют MACD?" и "Действительно ли он настолько эффективен?". Что такое MACD можно прочитать по ссылке: https://www.investopedia.com/terms/m/macd.asp
MACD имеет четыре измерения, от которых зависят сигналы:
- Лаг более быстрой средней EMA;
- Лаг более медленной EMA;
- Лаг сигнального индикатора MACD;
- Акция, к которой применяется MACD.
Чтобы проверить эффективность индикатора в идеале необходимо протестить все возможные комбинации этих четырех параметров. Это, конечно, нереально даже с компьютером. Поэтому для начала я предлагаю установить мягкие "разумные" рамки на каждое из измерений:
- Лаг быстрой EMA - от 5 до 200 дней;
- Лаг медленной EMA - от 10 до 300 дней;
- Лаг сингального индикатора MACD - от 5 до 100 дней;
- Акции, входящие в S&P 500 и имеющие не менее 10 лет исторических данных (434 акций).
Эти ограничения уменьшают проблему до всего лишь 2,3 миллиарда комбинаций=). Все еще, конечно, слишком огромная задача. Но вот тут мы и применим один из методов машинного обучения, которая постарается найти лучшую комбинацию - Байезовскую оптимизацию. Про нее можно прочитать тут: https://arxiv.org/pdf/1807.02811.pdf
Вкратце, Байезовская оптимизация работает примерно как человек: она не перебирает все возможные комбинации, а пытается найти лучший вариант в самых многообещающих областях пространства. Также, чтобы не застрять в локальном экстремуме, она делает поиск в областях с наименьшой информацией, так как там, возможно, находится этот глобальный максимум. У процесса есть заданное количество попыток, которое он использует для разрешения данной задачи.
Я даю Байезовской оптимизации 300 попыток для нахождения лучшей комбинации для каждой отдельной акции, т.е. проблема сократилась всего до 130 тысяч вариантов! Программа обучается на первых 9 годах данных и тестирует на десятом году, который она раньше не видела. Я также ввел транзакционные издержки в размере 0,2% от суммы сделки. Т.е. каждый раз, как программа исполняет сделку, доход дня снижается на 0,2%.
Результаты
В среднем для каждой акции индикатор принес на 10,3% больше, чем если бы вы просто держали эту акцию. Из 434 акций индикатор заработал больше, чем стратегия "купи и держи" в 216 случаях (49,8%). Также, стоит отметить, что индикатор лучше работает для акций в медвежьем рынке - корреляция между эффективностью индикатора и фактической доходностью самой акции за период = -0,48. То есть он скорее поможет потерять меньше на слабых акциях и не даст нормально заработать на растущих.
Лично я не стал бы сильно доверять индикатору - он работает по сути лишь в половине случаев. Если бы вы инвестировали во все 434 акции поровну с индикатором MACD в течение последнего года, то потеряли бы 2,8%. За этот же период индекс S&P 500 потерял 3,3% - по сути одно и то же.
Код доступен здесь: https://github.com/askmedov/MACD-test/blob/master/MACD.ipynb
Датасетом поделиться не могу, но он выглядит так (если захотите потестить сами):
- Первая колонка с датами и называется "Dates";
- Все остальные - с ценами отдельной акции.
Изменить Изображение