Данная статья продолжает цикл анализа простых стратегий со стандартными индикаторами. Тестируем стратегии в Quantopian, а пишем на Python. В этот раз мы сравним индикатор Rate-of-Change (ROC) и популярное пересечение скользящих средних SMA(50) и SMA(200).
Дополнительно рассмотрим подход быстрого получения доходности и просадки простых стратегий в блокноте Jupyter.
Индикатор ROC показывает процент изменения текущей цены относительно прошлого значения. Параметр индикатора — кол-во дней, между которыми сравниваем цены. Формула:
Значение индикатора находится вокруг нуля.
Проверять будем на SPY, но помним, что все активы ведут себя по разному. Условия:
Код условия на Quantopian:
# получаем цены и рассчитываем ROC(200) price_hist = data.history(context.asset, 'close', 400, '1d') roc = talib.ROC(price_hist, timeperiod=200) # сигнал на значении выше нуля allow = roc[-1] >= 0 # ... if data.can_trade(context.asset): if allow: # покупаем актив на 100% портфеля, если разрешено order_target_percent(context.asset, 1.) else: # закрываем позицию при запрете order_target_percent(context.asset, 0.)
Результаты ROC(200) и сравнение с пересечением SMA(50) и SMA(200):
С 2004 год SPY вырос на +230% имея просадку в 2008 году около -55%. Рядом с этим показателем только пересечение SMA(50) и SMA(200) с меньшей просадкой. ROC(200) оказался даже хуже пересечения цены и SMA(200), показав чуть меньшее количество сделок за весь период. Внизу показан результат сглаженного ROC по формуле из этой статьи, который показал наихудший результат.
Тесты дают более точную картину и это актуально при сложных стратегиях. Но для стратегий с редкими ребалансировками, где можно использовать цену закрытия, мы получим максимально приближенные результаты используя Jupyter, pandas и numpy.
Получая итоговую доходность для серии pandas, мы проходим следующие шаги:
Код есть в telegram-канале: @quantiki.
Получить максимальную просадку можно так:
В итоге имеем следующий код для расчёта простых стратегий и их просадки:
Код на Quantrum.me
Результаты выглядят следующим образом:
Сравнив результаты с тестами на Quantopian видна разница, которой можно принебречь для принятия первичных решений. В некоторых случаях разница в доли процентов. Высока вероятность, что расхождение связано со временем ребалансировки стратегий (за 1 час до закрытия рынка). Мы же делаем расчёт по цене закрытия.
Мы увидели, что использование ROC(200), как фильтра трендов, является невыгодным. Также научились быстро получать доходность и просадку для простых стратегий, достаточные для принятия решений, а работающие на порядок быстрее.
В следующий раз мы ещё немного помучаем ROC. Проверим доходность, используя силу тренда, пересечение разных периодов ROC и создадим индикатор Know Sure Thing (KST), созданный Мартином Прингом на основе ROC.
В комментариях пишите, ваши вопросы по тесту и коду. Запрашивайте полный код стратегии и блокнота.
Александр Румянцев
Автор на Quantrum.me
Telegram-канал: @quantiki
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде.