Идея коротко
Eric Crittenden (Standpoint Asset Management) управляет фондом, в котором держит собственные деньги: трендследование на фьючерсах, мировые акции и казначейские векселя. В конце выпуска он рассказал, как устроена трендовая часть. Новшество, по его словам, одно: из неё убрана вся сложность, за которую рынок не платит.
Вход это простой пробой канала. Лонг на максимуме за 6, 9 или 12 месяцев, шорт на таком же минимуме. Стопы далеко: стоп в 2-3 ATR автор считает слишком близким. Подходят chandelier, выход по стандартному отклонению или откат на треть годового диапазона, лишь бы метод был одинаковым для всех рынков и шёл за ценой на расстоянии.
Сверху стоит бюджет риска. Если все позиции одновременно дойдут до стопов, фонд потеряет около 10% капитала. Автор подчёркивает, что это не цель по волатильности, а полный риск портфеля (heat). Если все стопы сработали разом и бюджет потерян, срабатывает «рубильник»: фонд не отыгрывается, новые сделки открываются только на новых трендах.
От turtle-4w-2w система отличается длиной окон и стопом. Черепахи входят на пробое 20 дней и выходят на пробое 10, здесь окна в 6-12 раз длиннее, а выход задаёт отдельный широкий стоп. В always-in-breakout позиция переворачивается на противоположном пробое, а здесь после стопа система ждёт вне рынка. От kill-switch-max-dd рубильник отличается тем, что не выключает систему навсегда, а только не пускает её обратно в старые тренды.
Почему это может работать
Автор объясняет доходность трендовиков тем, кто им платит. После комиссий фьючерсы для него игра с отрицательной суммой, и прибыль спекулянта в итоге оплачивает хеджер. У хеджеров глубокие карманы, и они согласны терять на хедже, потому что убирают риск, который не хотят нести. Сам автор называет это гипотезой: рынок анонимен, и проверить её нельзя.
Широкие стопы следуют из того, как распределена прибыль. По словам автора, на любом окне в 3-5 лет 80% прибыли дают 20% рынков, причём те, где движение казалось исчерпанным. Близкий стоп выбивает из таких движений до того, как они случились. По той же причине он не урезает выросшую позицию: так недовешиваются рынки, которые делают результат.
Скорости он смешивает ради пути капитала. Длинный тренд в его тестах в итоге лучше, но может отставать годами. За пять лет фонда сильнее всех отработала короткая система, а длинная была слабой. Если не смешивать скорости, долгосрочное ожидание, по его словам, то же, а риск неудачной последовательности заметно выше, и за него рынок не доплачивает. Как это сочетается с его же словами, что длинный тренд в тестах работает лучше, автор не пояснил.
Бюджет риска отвечает на вопрос, сколько можно потерять, если всё пойдёт не так разом. Рубильник не даёт небольшому болезненному эпизоду превратиться в смертельный.
Цифр доходности и просадки трендовой части в выпуске нет. Логика выше это позиция автора, нами не проверенная.
Правила
Вход: три окна пробоя (автор, детали Finetiq)
// дневные бары, каждый рынок и каждое окно считаются отдельно
Windows = {126, 189, 252} // автор: 6, 9 и 12 месяцев; Finetiq: 21 торговый день в месяце
// Finetiq: автор называет и три окна, и три системы (короткая, средняя, длинная),
// но прямо их не связывает. Здесь каждое окно считается своей системой
FOR EACH N IN Windows
IF позиции системы N нет AND Close > Highest(High, N)[1] AND NOT BlockedLong(N)
BUY AT NEXT BAR OPEN // Finetiq: пробой по закрытию
IF позиции системы N нет AND Close < Lowest(Low, N)[1] AND NOT BlockedShort(N)
SELL SHORT AT NEXT BAR OPEN // автор: «то же с минимумами»
Стоп: один метод на все рынки (автор, параметры Finetiq)
// автор: 2-3 ATR слишком близко. Годятся три вида, лишь бы одинаково везде
// Вариант 1. Chandelier
LongStop = HighestHigh(с входа) - 5 * ATR(20) // Finetiq: 5 ATR по Уайлдеру
// Вариант 2. Стандартное отклонение
LongStop = HighestClose(с входа) - 6 * StdDev(Close - Close[1], 100) // Finetiq: 6 дневных отклонений
// Вариант 3. Треть годового диапазона
LongStop = HighestHigh(с входа) - (Highest(High, 252) - Lowest(Low, 252)) / 3 // автор
LongStop = MAX(LongStop, LongStop[1]) // Finetiq: стоп только поднимается, у шорта зеркально
SELL STOP at LongStop
// цели нет, выход только по стопу
Размер и бюджет риска (автор, распределение Finetiq)
// риск позиции = расстояние до стопа × объём × стоимость пункта
Risk(i) = |Close - Stop(i)| * Units(i) * PointValue(i)
Heat = Σ Risk(i) / Equity // автор: около 10%
// автор: доля риска рынка по открытому интересу, знаменатель всегда 10%
// Finetiq для розницы: равные доли на каждую пару «рынок × окно»
Slots = число рынков * 3
SlotRisk = 10% * Equity / Slots
Units(new) = SlotRisk / (|EntryPrice - Stop| * PointValue)
// Finetiq: размер считается только на входе, выросшую позицию не урезаем
// (автор: не подстраивать позиции по волатильности, не забирать у победителей).
// Если Heat плюс риск новой позиции больше 10%, новая позиция уменьшается до остатка
Рубильник (автор, формализация Finetiq)
// автор: рубильник срабатывает, когда все позиции разом дошли до стопов
// и фонд потерял около 10% (весь бюджет риска). Дальше без отыгрыша:
// новые сделки только на новых трендах, риск считается от текущего капитала
StopLoss20 = убыток сделок, закрытых по стопу за последние 20 баров / Equity[20]
IF StopLoss20 >= 8% // Finetiq: «разом» = 20 баров, «около 10%» = от 8%
FOR EACH система N, вышедшая из лонга по стопу за эти 20 баров
BlockedLong(N) = TRUE
IF BlockedLong(N) AND High > максимум High закрытой сделки
BlockedLong(N) = FALSE // Finetiq: новый тренд = новый максимум выше прошлой сделки
// у шорта зеркально
// Finetiq, вариант строже для проверки: блокировать систему N после любого одиночного стопа
Вариант B. Бюджет на меняющееся число позиций (автор, программа на акциях)
// автор: целевой риск 20% делится на текущее число позиций
TargetRisk(i) = 20% * Equity / число позиций с учётом новых сигналов
// три пути при новых сигналах: пропустить их, взять лишний риск, урезать старые позиции.
// Автор выбирает третий и называет первые два плохой идеей
// Finetiq: для фьючерсов подставьте 10%. Урезание спорит с правилом
// не трогать победителей, поэтому сравните оба подхода
Набор рынков (автор, состав Finetiq)
// автор: 6-7 секторов, внутри каждого самые ликвидные рынки,
// диверсификация и между секторами, и внутри них
// Finetiq: 3-4 самых ликвидных фьючерса на сектор, всего 20-25 рынков
// автор: у фонда индексы акций недовешены, потому что рядом портфель акций,
// и доля S&P 500 ограничена. Отдельной трендовой системе это не нужно
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Окна пробоя | 6, 9 и 12 месяцев | автор |
| Окна в днях | 126, 189, 252 | Finetiq |
| Сторона | лонг и шорт | автор |
| Условие пробоя | закрытие за уровнем | Finetiq |
| Ширина стопа | шире 2-3 ATR | автор |
| Виды стопа | chandelier, стандартное отклонение, треть годового диапазона | автор |
| Chandelier | 5 × ATR(20) | Finetiq |
| Стоп по отклонению | 6 × StdDev дневных изменений за 100 дней | Finetiq |
| Бюджет риска (heat) | около 10% капитала | автор |
| Распределение бюджета | по открытому интересу | автор |
| Распределение для розницы | равные доли на рынок и окно | Finetiq |
| Пересчёт размера | только на входе | Finetiq (автор: не подстраивать по волатильности) |
| Срабатывание рубильника | убыток по стопам от 8% капитала за 20 баров | Finetiq (автор: все стопы разом, около 10%) |
| Возврат после рубильника | новый экстремум за пределами прошлой сделки | Finetiq (автор: только новые тренды) |
| Сектора | 6-7, внутри самые ликвидные рынки | автор |
| Число рынков | 20-25 | Finetiq |
| B: целевой риск | 20% на все позиции, урезать старые | автор (программа на акциях) |
Что проверить
- Ширина стопа. Chandelier 2, 3, 4, 5, 6 и 8 ATR на одних и тех же входах. Автор считает 2-3 ATR слишком близкими. Посмотрите, где кривая «ширина против результата» выходит на плато.
- Вид стопа. Chandelier, отклонение и треть годового диапазона при сопоставимой средней ширине. Автор говорит, что работают все. Если так и есть, результат дают вход и ширина, а не формула стопа.
- Три окна против одного. Каждое окно отдельно и все три вместе. Сравните доходность к максимальной просадке и самый длинный период без нового максимума капитала. Отдельно 2020-2024 годы: у автора короткая система там заметно обогнала длинную.
- Размер бюджета. Heat 5, 10, 15 и 20%. Сравните худший месяц теста с заявленным бюджетом: гэпы и остановки торгов дают убыток больше суммы рисков до стопов. Отдельно рубильник: блокировка после стопов разом против блокировки после любого одиночного стопа и против работы без рубильника.
- Урезать или нет. Размер только на входе против приведения к бюджету при каждом новом сигнале (вариант B). Посчитайте долю прибыли 20% лучших рынков в каждом окне 3-5 лет и то, как урезание её меняет.
- Окрестность окон. 5, 6, 7 месяцев; 8, 9, 10; 11, 12, 13. Вход по закрытию против стоп-ордера на уровне.
- Издержки удержания. Позиции живут месяцами. Учтите перекладку фьючерсов, а на CFD своп.
Особенности платформ
TradingView (Pine Script)
- Стратегия торгует только символ графика. Общий бюджет риска на десятки рынков и правило «сумма рисков до стопов не больше 10%» в Pine не собрать. Сигнал и стопы проверяются по одному рынку, но это система без главного портфельного правила.
- Позиция в стратегии Pine одна, нетто. Если 6-месячное окно дало шорт, а 12-месячная система ещё в лонге, вход в шорт закроет лонг. Три окна на одном символе требуют трёх отдельных стратегий.
- Уровни без текущего бара:
ta.highest(high, 252)[1]. Для окна 252 и разогрева индикаторов нужна длинная история, она ограничена тарифом. На непрерывных фьючерсах проверьте корректировку склеек. - Стоп храните в переменной
var, которая только поднимается, и передавайте вstrategy.exitчерезstop.trail_pointsзадаётся в тиках и процентный или ATR-стоп не повторяет.
MultiCharts и TradeStation (EasyLanguage)
- Портфельный бюджет считается только в портфельном модуле: Portfolio Trader в MultiCharts, Portfolio Maestro в TradeStation. В момент сайзинга нужна сумма рисков по открытым позициям всех рынков. Проверьте, умеет ли ваша версия модуля управлять размером на уровне портфеля, до того как писать правила.
- Стратегия на символе держит нетто-позицию. Лонг 12-месячной системы и шорт 6-месячной взаимно погасятся, как и в Pine.
- Kevin Davey (The Algorithmic Advantage #036): у фьючерсов в TradeStation закрытие дневного бара это settlement, у 1440-минутного бара последняя сделка. Пробой по закрытию на двух видах бара даёт разные сигналы.
AvgTrueRangeэто простое среднее TrueRange. Для chandelier по Уайлдеру считайте ATR сами. Стоп ценой:Sell next bar at LongStop stop, ордер живёт один бар.
MetaTrader 5 (MQL5)
- Мультисимвольный советник может считать heat сам: по каждой позиции расстояние до SL, делённое на
SYMBOL_TRADE_TICK_SIZE, ×SYMBOL_TRADE_TICK_VALUE× объём. Для теста нужен мультисимвольный режим тестера. - На хеджинговом счёте три окна держат отдельные позиции по одному символу со своими SL, различайте их по magic number. На неттинговом счёте позиции сольются в одну.
- Фьючерсы с длинной историей у брокеров MT5 редки. CFD на товары обычно идут за ближним контрактом или спотом, и 12-месячный максимум по ним другой, чем по склеенному фьючерсу.
- Позиция живёт месяцами, своп по CFD начисляется каждую ночь. Проверьте, что тестер его учитывает.
Где идея может сломаться
- Результатов трендовой части в выпуске нет. В фонде она работает рядом с портфелем акций и векселями и откалибрована под них, отдельно цифры будут другими.
- Параметры стопов, распределение бюджета, число рынков, порог срабатывания рубильника и правило возврата после него дописаны нами. Автор назвал виды стопа, окна и бюджет 10%.
- Бюджет 10% предполагает исполнение стопов по цене. Автор рассказывает, как LME остановила торги никелем и позицию нельзя было торговать, после чего он убрал никель из вселенной. Гэпы и остановки торгов дают убыток больше heat.
- Окна 6-12 месяцев дают мало сделок на рынок. На одном рынке и коротком тесте вывод почти ничего не значит, а длинный тренд, по словам автора, может отставать годами.
- На маленьком счёте минимальный контракт делает риск одной позиции больше доли бюджета на слот. С 20-25 рынками и бюджетом 10% правило без микроконтрактов или CFD не выполнить.
- Открытого интереса для взвешивания на торговых платформах обычно нет. Замена на объём или равные доли даёт другой портфель.