Главная Записи Рынок акций

16.05.2020, 01:24

Работает ли индикатор MACD?

Проверяем на акциях S&P 500

Категории: Рынок акций, США

Я не большой фанат технического анализа. Его почти невозможно фальсифицировать и поэтому он ненаучен. Но используя кое какие методы машинного обучения можно попробовать реально протестировать индикатор без брутфорса (перебора всех возможных комбинаций). 

Я все чаще замечаю что аналитики цитируют индикатор MACD. Возможно потому что стал больше смотреть CNBC=) И поэтому задался вопросами: "Почему так много людей используют MACD?" и "Действительно ли он настолько эффективен?". Что такое MACD можно прочитать по ссылке: https://www.investopedia.com/terms/m/macd.asp

MACD имеет четыре измерения, от которых зависят сигналы:

  1. Лаг более быстрой средней EMA;
  2. Лаг более медленной EMA;
  3. Лаг сигнального индикатора MACD;
  4. Акция, к которой применяется MACD.

Чтобы проверить эффективность индикатора в идеале необходимо протестить все возможные комбинации этих четырех параметров. Это, конечно, нереально даже с компьютером. Поэтому для начала я предлагаю установить мягкие "разумные" рамки на каждое из измерений:

  1. Лаг быстрой EMA - от 5 до 200 дней;
  2. Лаг медленной EMA - от 10 до 300 дней;
  3. Лаг сингального индикатора MACD - от 5 до 100 дней;
  4. Акции, входящие в 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";
  • Все остальные - с ценами отдельной акции.
Создано: 16.05.2020, 01:24
Понравилось? Лайкни!
Комментарии ({{cc.current.comments.length}})
{{comment.created_at | amDateFormat:'DD.MM.YYYY HH:mm'}} Отредактирована {{ comment.updated_at | amDateFormat:'DD.MM.YYYY HH:mm' }}
×

{{child.created_at | amDateFormat:'DD.MM.YYYY HH:mm'}} Отредактирована {{ child.updated_at | amDateFormat:'DD.MM.YYYY HH:mm' }}
×
Комментариев пока нет