Так ли уж необходимо тестирование торговых стратегий? Что такое бэктестинг? Для примера попробуем натянуть технический анализ на акцию фонда FXUS, агрегирующего в себе американский рынок. Статья рассчитана на инвесторов. Инвесторы, можете использовать её в спорах с новичками на бирже.
Любое утверждение касательно эффективной стратегии, которое встречается в чатах, книгах и статьях, нужно подвергать сомнению. Желательно в любом случае самостоятельно протестировать её исторический результат, чтобы не продырявить свой карман.
Определимся с понятием. Бэктестинг — это тестирование торговой стратегии на исторических ценах. Тестировать нужно практически все возможные стратегии, начиная с простых buy-and-hold и заканчивая сложными макроэкономическими торговыми моделями.
У бэктестинга есть основополагающая аксиома: любая стратегия, которая хорошо работала в прошлом, вероятно, будет так же хорошо работать и в будущем. Очень часто трейдеры и даже некоторые инвесторы ориентируются на исторический рост цены акции, надеясь на продолжение банкета. В обратную сторону аксиома тоже работает: если стратегия была убыточной, таковой она и останется.
Шаг 1: Гипотеза
Не вдаваясь в сложные хитросплетения рынка, выдвигаем предельно простую Гипотезу:
Если FXUS за день вырос на 2% по любым причинам, будь то хорошие новости или словесные интервенции Трампа, то этот рост продолжится в течение следующих 30 дней.
Формулировка позволяет чётко обозначить торговые сигналы на покупку и продажу акций. Если она кажется вам слишком простой — не отчаивайтесь. Чуть позже придётся её подкрутить.
Шаг 2: Гипотеза vs FXUS
Теперь нам нужно проверить эту Гипотезу на ценовом графике FXUS.
Можно оценить эффективность своих гипотез на глаз. Естественно, при столь субъективном подходе сработает психологическая ловушка — мозг будет упорно искать подтверждения гипотезы и игнорировать обратные случаи, идущие вразрез с нашими идеями.
Раньше это делали на бумажках с табличками, кропотливо рассчитывая всё вручную. Сейчас же доступно множество инструментов, которые позволяют проводить бэктесты: MetaTrader, Quantopian, BackTrader, TradingView и даже Excel.
Многие из них могут учитывать комиссии брокера, маржинальную торговлю, ставку по плечам, налоги и проскальзывание в сделках. Особо навороченные умеют работать со множеством акций, портфелями и режимами рынка одновременно. Мы выставим комиссию 0.1% за сделку и успешное завершение сделки через 2-4 часа после поступления сигнала.
Записка для любителей IT: Используется событийный фреймворк на базе BackTrader. Исходники применения стратегии лежат в github репозитории. Стратегия описана в следующем виде:
class BigJumpAndAfterGrowth(StrategyMeta):
params = (
('jump_size', 2),
('period_after_jump', 30),
)
def buy_signal(self):
return self.data.close[0] > self.data.close[-1]*(1 + self.params.jump_size/100)
def close_signal(self):
return len(self) >= (self.bars_after_trade_executed + self.params.period_after_jump)
BtRunCase(strategy=BigJumpAndAfterGrowth, ticker='FXUS')
Итак, запустили тестирование Гипотезы по отношению FXUS и получили первые результаты.
Как читать графики:
- Broker - это сумма портфеля. Стартуя со 100 000, стратегия добралась до 190 717 после учёта всех проскальзываний и комиссий.
- Trades - итоги сделок. Чем выше кружок, тем удачнее была предыдущая сделка. Синие принесли нам прибыль, красные — убыток.
- DrawDown - инветрированная просадка по портфелю в процентах.
- TimeReturn - изменение доходности стратегии во времени.
- btFXUS - график цены FXUS с точками входа и выхода из позиций.
Подводный камень заключается в том, что итоговая доходность может ввести в заблуждение, ведь гипотеза могла получить высокую доходность за счёт одной случайной сделки, а в остальных сделках быть убыточна. Или другой вариант: гипотеза хорошо работает только на растущем рынке, игнорируя возможность смены парадигмы рынка.
Для всестороннего рассмотрения результатов можно использовать следующие метрики: коэффициент Шарпа для обозначения скорректированной на риск доходности, Просадку для оценки максимального ущерба, VaR для вероятностной оценки будущих потерь.
Коэффициент Шарпа | 0.15 |
Худший год | -9.70% |
Лучший год | 55.20% |
Количество отрицательных лет | 1 |
Количество положительных лет | 7 |
Среднегодовая доходность | 10.46% |
Суммарная доходность | 64.56% |
2020 | 13.57% |
2019 | 4.29% |
2018 | 8.92% |
2017 | 3.24% |
2016 | -9.70% |
2015 | 1.10% |
2014 | 55.20% |
2013 | 1.03% |
Количество сделок | 21 |
SQN | 1.39 |
Доходность составила 10.5% с 2013 года! Хороший рост для такой простой стратегии. Правда, коэффициент Шарпа слишком мал, так как стратегия крайне волатильна и непредсказуема.
Шаг 3: Бенчмарк (Baseline)
Хотя гипотеза и дала хорошую доходность, теперь её необходимо сравнить с рынком. Альтернативная идея, знакомая всем: просто взять FXUS и ничего больше не придумывать. Протестируем и её, она будет нашим бенчмарком в будущем.
Коэффициент Шарпа | 0.56 |
Худший год | -9.03% |
Лучший год | 84% |
Количество отрицательных лет | 1 |
Количество положительных лет | 7 |
Среднегодовая доходность | 24.40% |
Суммарная доходность | 141.66% |
2020 | 24.21% |
2019 | 14.95% |
2018 | 12.38% |
2017 | 13.08% |
2016 | -9.02% |
2015 | 30.12% |
2014 | 84.87% |
2013 | 3.81% |
Количество сделок | 1 |
SQN | 0 |
Простая стратегия Buy-and-hold показала доходность 24% при значительно более хорошем коэффициенте Шарпа, а значит, нашу гипотезу можно выбросить.
Шаг 4. Оптимизация.
Хотя постойте, не торопитесь закрывать статью. У нас есть гипотеза, которая как-то работает, но почему мы решили, что прыжок в цене должен составлять именно 2%, а выходить из позиции нужно именно через 30 дней?
Возможно, ситуация изменится, если это будут 5% и 10 дней, или 1% и 90 дней, или ещё что-то... Существует множество сочетаний, и некоторые из них могут дать хороший результат.
Оптимизация - это и есть процесс повторения Гипотезы при разных сочетаниях входных параметров.
BtRunOpt(strategy=BigJumpAndAfterGrowth, ticker = 'FXUS',
jump_size=range(1, 10, 1),
period_after_jump = range(1, 90, 1))
Заставив компьютер в лоб перебрать каждый вариант, получим наилучшее сочетание с точки зрения коэффициента Шарпа. Теперь наша гипотеза поменяла параметры и звучит так:
Если FXUS за день вырос на 1% благодаря любым причинам, то этот рост продолжится в течение следующих 81 дней.
А вот и результат тестирования:
Коэффициент Шарпа | 0.56 |
Худший год | -13.72% |
Лучший год | 80.05% |
Количество отрицательных лет | 1 |
Количество положительных лет | 7 |
Среднегодовая доходность | 23.81% |
Суммарная доходность | 138.61% |
2020 | 15.43% |
2019 | 13.14% |
2018 | 21.82% |
2017 | 20.77% |
2016 | -13.72% |
2015 | 29.70% |
2014 | 80.05% |
2013 | 03.29% |
Количество сделок | 17 |
Вознаграждение за единицу риска у идеи выросло более чем в 3 раза — до 0.56! А суммарная доходность очень сильно приблизилась к доходности бенчмарка, составив 23.81% в среднем каждый год. Отставание от бенчмарка — 1% в год.
Шаг 5. Лайфхаки бэктестинга
Рынок мы не победили, но тут в дело вступают особенности бэктеста.
При применении активых стратегий существуют моменты, когда инвестор (трейдер) вышел из позиции и сидит в деньгах. Если у него в запасе имеется 2-3 аналогичных стратегии, то при выходе из одной стратегии может подать хороший сигнал вторая. В таком случае трейдер продаст FXUS и купит что-то другое.
Таким образом, собрав дополнительные стратегии, можно увеличить потенциальную доходность и, в теории, переиграть рынок.
Вернёмся к нашей оптимизированной гипотезе и посмотрим, как она исполняла сделки.
Внимательный читатель обнаружит, что оптимизация доучила стратегию держать растущую акцию постоянно. По сути она приблизила нас к бенчмарку. Такой эффект называют переоптимизацией или переобучением. Стратегия сработает только на этой истории и ни на чём больше.
Соответственно, у такой стратегии возникают новые риски:
- Как она поведёт себя, если режим рынка сменится на боковик или на неплавное падение? Скорее всего, стратегия будет приносить убытки.
- Значима ли эта стратегия для FXUS? Применяя её из года в год, гарантируем ли мы себе доходность?
- Если просадка будет слишком большой, сможет ли стратегия восстановить саму себя?
- Сработает ли гипотеза для других инструментов (не только FXUS)?
Но даже будучи переоптимизированной, стратегия не смогла победить бенчмарк. Гипотеза в её основе оказалась несостоятельной и уходит на наше кладбище других гипотез. Там она займет место под номером 169.
Выводы
Бэктестинг — отличный инструмент для управления рисками. Прежде чем набивать шишки, рискуя собственными деньгами, бэктестинг позволяет очень быстро и объективно выбрать себе стратегию работы с фондовым рынком. И это даже надёжнее, чем торговля руками по стратегии на демо-счёте.
Вместо слепого следования стратегиям авторитета лучше перепроверьте их. Возможно, вы спасёте и свой портфель, и портфель авторитета, если обнаружите в какой-либо стратегии ошибки и укажете на них.
Бэктестингом можно проверять не только результаты технического анализа, но также и гипотезы о влиянии ключевой ставки на индексы (работает) или же стоимостной подход через мультипликатор P/E (не работает).
Обычная стратегия на пересечение скользящей средней работала до 90-ых годов, но сейчас будет неэффективна и затратна по комиссиям. Помните, что книги и статьи устаревают, как устаревают и рабочие стратегии в них.
Есть идея, но не хочешь тестировать? Команда RUSETFS оказывает услуги независимого бэктестинга торговых стратегий. Пишите на info@rusetfs.ru. Конфиденциальность гарантирована.