Идея коротко
Alan Clement перепробовал на акциях разные трендовые входы: пробои, ящики Дарваса. Его наблюдение: любой такой вход работает лучше, если пропускать только бумаги с сильным моментумом, и тем лучше, чем выше порог. Если довести мысль до конца, вход не нужен вообще. Достаточно раз в неделю ранжировать бумаги индекса, держать верхние и заменять выпавших.
В правилах два вида моментума. Абсолютный это порог: держим только бумаги, которые выросли больше заданного процента. Пример автора: больше 20% за 18 месяцев. Относительный это место в рейтинге: из прошедших порог берём 10 сильнейших. Стопов нет. Бумага уходит из портфеля, когда выпадает из топа или опускается ниже порога.
Порог работает и как фильтр режима. В медвежьем рынке бумаги по одной проваливаются под него, портфель сжимается и поэтапно уходит в кэш. На росте список снова наполняется.
Вариант B от Nick Radge проверяет сначала тренд всего рынка. Если он вниз, портфель в кэше целиком. Если вверх, покупаются сильнейшие акции Russell 1000 за 12 месяцев.
От карточки «Двойной моментум» идея отличается масштабом. Там три-четыре индексных ETF, одна позиция на весь капитал и ориентир в виде T-bills. Здесь сотни акций, 10-16 позиций, а порог задан ростом самой бумаги. Выход из рынка идёт не разом, а по одной бумаге.
Почему это может работать
Clement называет три причины. Портфель всегда держит сильнейшие бумаги индекса, поэтому рост рынка он забирает. Продажа и покупка идут одновременно: одна бумага сменяет другую, и риск портфеля меняется плавно. У системы с отдельными сетапами капитал может уйти в сделки за один день и так же дружно попасть под откат на следующей неделе.
Третья причина касается выхода. Вершины редко бывают острыми: бумага сначала ходит в боковом диапазоне, и моментум в это время стремится к нулю. Ротация выводит из позиции посередине этого диапазона, не дожидаясь обвала и без стоп-лосса.
Radge смотрит на ту же механику через правый хвост. Сильные тренды бывают не всегда, но достаточно часто, и одна бумага вроде Tesla в 2020 году делает год. Моментум как фактор, по его словам, давно описан в академических работах. Слабое место оба знают: боковой рынок, где лидеры часто меняются.
Всё это объяснения авторов. Цифр по результатам самой ротации в интервью нет.
Правила
Основная версия (Clement)
// вселенная: акции одного индекса с историческим составом
// автор: индекс или сектор; Finetiq: S&P 500 как стартовая вселенная
// решение раз в неделю на закрытии последнего торгового дня недели,
// исполнение на открытии следующего бара
// автор: ротация раз в неделю; Finetiq: день недели
ROC(x) = Close(x) / Close(x, 378 баров назад) - 1 // автор: рост за 18 месяцев; Finetiq: 18 × 21 торговый день
Floor = 20% // автор: пример порога
N = 10 // автор: пример; оптимум по его опыту 14-16
Eligible = [x in Universe : ROC(x) > Floor] // абсолютный моментум (автор)
Top = N бумаг из Eligible с максимальным ROC // относительный моментум (автор)
// Finetiq: рейтинг по тому же ROC, отдельную меру автор не назвал
FOR each x in Portfolio
IF x NOT in Top // выпала из топа или ушла под порог (автор)
SELL x AT NEXT BAR OPEN
FOR each x in Top NOT in Portfolio
BUY x AT NEXT BAR OPEN
// если в Eligible меньше N бумаг, свободные слоты остаются в кэше (автор)
PositionSize = Equity / N // Finetiq: равные доли; автор говорит о многих малых позициях
// стопов нет, внутри недели позиции не трогаем (автор)
Фильтр режима (автор: любой из трёх)
// 1. моментум самого индекса (автор)
IF Close(Index) / Close(Index, 126 баров назад) - 1 < 0 // Finetiq: окно 6 месяцев и порог 0
SELL все позиции AT NEXT BAR OPEN, новых покупок нет
// 2. только порог по бумагам (автор): отдельного фильтра нет, портфель сжимается сам
// 3. внешний индикатор (автор): всплеск VIX или структура кривой фьючерсов VIX
// Finetiq: см. карточку vix-term-structure-regime
Вариант B. Radge: сначала рынок, потом акции
// вселенная: Russell 1000 с историческим составом (автор)
// ротация раз в месяц (автор; в общем описании «раз в месяц или раз в неделю»)
// Finetiq: последний торговый день месяца, исполнение на открытии следующего
Regime = Close(SPX) > SMA(Close(SPX), 200) // автор: один из двух примеров фильтра
// второй пример автора: new highs минус new lows NYSE, порог не назван
Mom(x) = Close(x) / Close(x, 252 бара назад) - 1 // автор: окно 12 месяцев «для примера»
N = 20 // Finetiq: число позиций автор не назвал
IF NOT Regime
SELL все позиции AT NEXT BAR OPEN // автор: рынок вниз, портфель в кэше
ELSE
Top = N бумаг с максимальным Mom
SELL держимые, которых нет в Top // автор: ослабевшие продаём
BUY бумаги из Top, которых нет в портфеле
// Finetiq: режим проверяем только в день ротации
Версия для одного-двух символов (Finetiq)
Ранжирование на одном символе не проверить. Проверить можно порог: сколько времени он держит в рынке и что делает на падениях.
// индексный ETF или фьючерс, решение раз в неделю
IF ROC(Close, 378) > Floor AND нет позиции
BUY AT NEXT BAR OPEN
IF ROC(Close, 378) <= Floor AND есть позиция
SELL AT NEXT BAR OPEN
// Floor: 0%, 10%, 20%. Порог для акций на индексе может держать вне рынка
// большую часть времени: посчитайте долю недель над порогом до теста
// два символа: держим тот, у кого ROC выше, если он над порогом, иначе кэш
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Вселенная | акции индекса или сектора | автор |
| Стартовая вселенная | S&P 500 с историческим составом | Finetiq |
| Мера моментума | rate of change | автор |
| Абсолютный порог | рост больше 20% за 18 месяцев | автор (пример) |
| Окно в барах | 378 торговых дней | Finetiq |
| Мера для рейтинга | тот же ROC | Finetiq |
| Число позиций | 10 в примере, оптимум 14-16 | автор |
| Частота ротации | раз в неделю | автор |
| День ротации | последний торговый день недели | Finetiq |
| Размер позиции | равные доли капитала | Finetiq |
| Стоп | нет | автор |
| Направление | только лонг | автор |
| Фильтр индекса | ROC индекса за 6 месяцев ниже 0 | Finetiq (автор: моментум индекса) |
| Вариант B: фильтр рынка | S&P 500 выше SMA 200 или new highs-new lows NYSE | автор (примеры) |
| Вариант B: окно | 12 месяцев, 252 бара | автор (пример), бары Finetiq |
| Вариант B: частота | раз в месяц | автор |
| Вариант B: число позиций | 20 | Finetiq |
Что проверить
- Окрестность порога и окна. Порог 0, 10, 20 и 30%, окно 6, 12, 18 и 24 месяца. Автор назвал 20% и 18 месяцев как пример. Если результат держится только около этой пары, она подобрана.
- Число позиций. 10 против 15 против 25. Смотрите доходность, просадку и долю недель, когда прошедших порог бумаг меньше, чем слотов.
- Порог против фильтра индекса. Три прогона: только порог по бумагам, только фильтр индекса, оба вместе. Отдельно 2008, 2020 и 2022 годы: как быстро портфель ушёл в кэш и как быстро вернулся.
- Частота и буфер. Ротация раз в неделю против раз в месяц. Затем буфер: при топ-10 продавать бумагу, только когда она опустилась ниже 15-го места. Считайте сделки в год и результат после комиссий и спреда.
- Исторический состав против текущего. Clement прямо предупреждает, что на нынешних членах индекса трендовые подходы выглядят лучше, чем были. Разница двух прогонов показывает размер ошибки выжившего.
- Боковые годы. 2011, 2015-2016 и 2022 отдельно: оборот, число возвратов в только что проданную бумагу за две недели, результат. Это слабое место, которое называет Radge.
- Основная версия против варианта B на одной вселенной и одном периоде: порог по каждой бумаге против общего фильтра рынка.
Особенности платформ
TradingView (Pine Script)
- Стратегия торгует только символ графика. Ротацию по сотням акций как стратегию не протестировать, а число запросов
request.securityограничено и для рейтинга по индексу не хватит. - Проверяется версия на одном символе. ROC за 18 месяцев на дневках:
close / close[378] - 1, первые 378 баров сигнала нет. На недельном графике то же окно около 76 баров (378 / 5). - Недельное решение на дневном графике придётся ловить по смене недели и исполнять на открытии следующего бара. Если неделя закончилась праздником, проверьте, что ротация не пропала.
- Дивиденды меняют ROC акций. Проверьте, включена ли корректировка графика (
adjustment.dividendsвticker.modify).
MultiCharts и TradeStation (EasyLanguage)
- Ордера отправляются только по Data1. Ротацию делают в портфельном модуле: TradeStation Portfolio Maestro или MultiCharts Portfolio Trader. На каждом символе работает копия стратегии, отбор топ-N выполняется на уровне портфеля.
- Список символов портфеля задаётся заранее. Если взять нынешних членов S&P 500, тест покупает уже известных победителей. Нужны данные с историческими составами индекса и исключёнными бумагами.
- Размер позиции считайте от капитала всего портфеля. Если каждая копия стратегии работает от своего стартового капитала, получится набор независимых систем, а не ротация.
- Смена недели на дневных барах:
DayOfWeek(Date) < DayOfWeek(Date[1])срабатывает на первом баре новой недели. Решение по закрытию прошлой недели тогда исполняется на день позже, чем в правилах. - Для 5-10 ETF работает упрощённый путь без модуля: стратегия на Data1 читает остальные символы как Data2 и далее и держит Data1, только когда он в топе. Для сотен акций это не подходит.
MetaTrader 5 (MQL5)
- Советник может торговать любой символ из Market Watch, мультисимвольный тестер это поддерживает. Проблема в данных: у брокера должен быть весь индекс. Обычно доступны CFD на несколько сотен американских акций, с короткой историей и без исключённых из индекса бумаг. Тест на таком списке это тест на выживших.
- Каждый символ нужно добавить в Market Watch и загрузить по нему историю. Тест по сотням символов получается тяжёлым.
- Дивиденды у CFD на акции приходят корректировкой баланса, а цена на графике падает в дату отсечки. ROC по такому ряду занижен у дивидендных бумаг. За удержание длинной позиции списывается своп, и при удержании три-четыре месяца он становится заметной издержкой.
- Недельную границу считайте по времени сервера, данные берите с закрытого дневного бара (индекс 1).
Где идея может сломаться
- Порог 20% за 18 месяцев и топ-10 Clement привёл как пример. Параметры своей системы и её результаты он не раскрыл.
- Без стопа убыток бумаги внутри недели ограничен только её долей в портфеле. Автор принимает этот риск сознательно и защищается числом позиций. В медвежьем рынке, по его же словам, корреляции акций стремятся к единице, и десять позиций падают вместе, пока порог или фильтр не выведут в кэш.
- Ошибка выжившего. Оба автора тестируют на исторических составах индексов. У розничного трейдера таких данных часто нет, а на текущем составе ротация выглядит лучше, чем была.
- Порог в процентах роста зависит от эпохи. В спокойные годы 20% за полтора года проходят немногие бумаги и портфель недобран, в пузырь проходят почти все и порог перестаёт фильтровать.
- Боковой рынок даёт частые замены и пилу. Radge называет 2022 год тяжёлым именно поэтому.
- Недельная ротация на сотнях бумаг даёт заметный оборот. Спред, комиссии и налог на короткие прибыли могут съесть часть результата.
- Цифры Radge о вероятности прибыли и о 2022 годе относятся к его счетам в целом, а не к описанной здесь конфигурации.