Предыдущий

портфель Премия по акциям стоимости сокращается

Следующий

выходной ETF на чужую ипотеку

Бэктестинг стратегии торговли FXUS

Так ли уж необходимо тестирование торговых стратегий? Что такое бэктестинг? Для примера попробуем натянуть технический анализ на акцию фонда 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 и получили первые результаты.

data/Whispered/2020/8/initialHypotesis.jpg

Как читать графики:

  1. Broker - это сумма портфеля. Стартуя со 100 000, стратегия добралась до 190 717 после учёта всех проскальзываний и комиссий.
  2. Trades - итоги сделок. Чем выше кружок, тем удачнее была предыдущая сделка. Синие принесли нам прибыль, красные — убыток.
  3. DrawDown - инветрированная просадка по портфелю в процентах.
  4. TimeReturn - изменение доходности стратегии во времени.
  5. btFXUS - график цены FXUS с точками входа и выхода из позиций.

Подводный камень заключается в том, что итоговая доходность может ввести в заблуждение, ведь гипотеза могла получить высокую доходность за счёт одной случайной сделки, а в остальных сделках быть убыточна. Или другой вариант: гипотеза хорошо работает только на растущем рынке, игнорируя возможность смены парадигмы рынка.

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

Коэффициент Шарпа0.15
Худший год-9.70%
Лучший год55.20%
Количество отрицательных лет1
Количество положительных лет7
Среднегодовая доходность10.46%
Суммарная доходность64.56%
202013.57%
20194.29%
20188.92%
20173.24%
2016-9.70%
20151.10%
201455.20%
20131.03%
Количество сделок21
SQN1.39

Доходность составила 10.5% с 2013 года! Хороший рост для такой простой стратегии. Правда, коэффициент Шарпа слишком мал, так как стратегия крайне волатильна и непредсказуема.

Шаг 3: Бенчмарк (Baseline)

Хотя гипотеза и дала хорошую доходность, теперь её необходимо сравнить с рынком. Альтернативная идея, знакомая всем: просто взять FXUS и ничего больше не придумывать. Протестируем и её, она будет нашим бенчмарком в будущем.

Коэффициент Шарпа0.56
Худший год-9.03%
Лучший год84%
Количество отрицательных лет1
Количество положительных лет 7
Среднегодовая доходность24.40%
Суммарная доходность141.66%
202024.21%
201914.95%
201812.38%
201713.08%
2016-9.02%
201530.12%
201484.87%
20133.81%
Количество сделок1
SQN0

Простая стратегия 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%
202015.43%
201913.14%
201821.82%
201720.77%
2016-13.72%
201529.70%
201480.05%
201303.29%
Количество сделок17

Вознаграждение за единицу риска у идеи выросло более чем в 3 раза — до 0.56! А суммарная доходность очень сильно приблизилась к доходности бенчмарка, составив 23.81% в среднем каждый год. Отставание от бенчмарка — 1% в год.

Шаг 5. Лайфхаки бэктестинга

Рынок мы не победили, но тут в дело вступают особенности бэктеста.

При применении активых стратегий существуют моменты, когда инвестор (трейдер) вышел из позиции и сидит в деньгах. Если у него в запасе имеется 2-3 аналогичных стратегии, то при выходе из одной стратегии может подать хороший сигнал вторая. В таком случае трейдер продаст FXUS и купит что-то другое.

Таким образом, собрав дополнительные стратегии, можно увеличить потенциальную доходность и, в теории, переиграть рынок.

Вернёмся к нашей оптимизированной гипотезе и посмотрим, как она исполняла сделки.

data/Whispered/2020/8/OptimizedRun.PNG

Внимательный читатель обнаружит, что оптимизация доучила стратегию держать растущую акцию постоянно. По сути она приблизила нас к бенчмарку. Такой эффект называют переоптимизацией или переобучением. Стратегия сработает только на этой истории и ни на чём больше.

Соответственно, у такой стратегии возникают новые риски:

  1. Как она поведёт себя, если режим рынка сменится на боковик или на неплавное падение? Скорее всего, стратегия будет приносить убытки.
  2. Значима ли эта стратегия для FXUS? Применяя её из года в год, гарантируем ли мы себе доходность?
  3. Если просадка будет слишком большой, сможет ли стратегия восстановить саму себя?
  4. Сработает ли гипотеза для других инструментов (не только FXUS)?

Но даже будучи переоптимизированной, стратегия не смогла победить бенчмарк. Гипотеза в её основе оказалась несостоятельной и уходит на наше кладбище других гипотез. Там она займет место под номером 169.

Выводы

Бэктестинг — отличный инструмент для управления рисками. Прежде чем набивать шишки, рискуя собственными деньгами, бэктестинг позволяет очень быстро и объективно выбрать себе стратегию работы с фондовым рынком. И это даже надёжнее, чем торговля руками по стратегии на демо-счёте.

Вместо слепого следования стратегиям авторитета лучше перепроверьте их. Возможно, вы спасёте и свой портфель, и портфель авторитета, если обнаружите в какой-либо стратегии ошибки и укажете на них.

Бэктестингом можно проверять не только результаты технического анализа, но также и гипотезы о влиянии ключевой ставки на индексы (работает) или же стоимостной подход через мультипликатор P/E (не работает).

Обычная стратегия на пересечение скользящей средней работала до 90-ых годов, но сейчас будет неэффективна и затратна по комиссиям. Помните, что книги и статьи устаревают, как устаревают и рабочие стратегии в них.

Есть идея, но не хочешь тестировать? Команда RUSETFS оказывает услуги независимого бэктестинга торговых стратегий. Пишите на info@rusetfs.ru. Конфиденциальность гарантирована.