Идея коротко
Pavel Kycek управляет алгоритмическими фондами (Robuxio) и сводит любые стратегии к трём движениям: краткосрочный импульс, возврат к среднему и долгосрочный тренд. Для тренда он нарисовал на доске самую простую механику. Дневное закрытие выше максимума последних 100 баров открывает лонг. Позиция держится, пока закрытие не окажется ниже 10-дневной скользящей средней.
Окно можно удлинять. По словам автора, 200 дней сильнее 100, а пробой исторического максимума даёт самый сильный трендовый сигнал из возможных. Входить по закрытию выше уровня или по касанию он считает одинаково корректным.
Nick Radge торгует на австралийских акциях систему абсолютного тренда, которую построил в конце 1990-х для фьючерсов. Вход у него тот же: пробой нового 100-дневного максимума. Сверху добавлены фильтр режима рынка и трейлинг-стоп, который не опирается на скользящую среднюю. Эта версия описана ниже как вариант B.
Почему это может работать
Объяснение Kycek: пробитый сильный уровень чаще продолжает движение, чем возвращает цену, и чем сильнее уровень, тем больше потенциал следующего движения. Максимум за 100 дней сильнее вчерашнего, исторический максимум сильнее любого окна. Трендследование ловит крупную смену режима и старается сидеть в позиции как можно дольше. Прибыль приносят редкие длинные тренды, а короткая средняя быстро закрывает сделки, в которых тренд не случился.
Почему такой эдж не исчезает, автор объясняет конкуренцией. У долгосрочного моментума низкий Sharpe, и крупные деньги сосредоточены на младших таймфреймах и самых ликвидных рынках. Поэтому он называет этот подход самым робастным и работающим на всех классах активов, а новичку советует начинать с него. Для акций и фондовых индексов он рекомендует только лонг: широкий рынок после коррекций в среднем растёт дальше.
Radge смотрит на ту же идею через правый хвост распределения. Тренды случаются не всегда, но достаточно часто, и одна бумага вроде Tesla в 2020 году делает ему год. Слабое место он называет прямо: боковой рынок с частыми ложными пробоями. Ещё одно его наблюдение касается выбора рынка. Чем плотнее рынок покрыт аналитиками и институционалами, тем хуже на нём работает абсолютный тренд.
Ни один из авторов не показал бэктест именно этих правил. Объяснения выше это их логика, нами не проверенная.
Правила
Основная версия (Pavel Kycek)
// дневные бары
HH100 = Highest(High, 100)[1] // максимум последних 100 баров без текущего
MA10 = SMA(Close, 10) // Finetiq: тип средней автор не назвал, берём простую
// вход: закрытие выше уровня (автор)
IF MarketPosition = 0 AND Close > HH100
BUY AT NEXT BAR OPEN
// вход по касанию, по автору тоже корректный
// IF MarketPosition = 0 THEN BUY STOP at HH100 // уровень обновляется на каждом баре
// выход (автор)
IF MarketPosition > 0 AND Close < MA10
EXIT AT NEXT BAR OPEN
// отдельного стоп-лосса у автора нет, защитой служит выход по MA10
Длина окна (автор)
HH200 = Highest(High, 200)[1] // сильнее, чем 100 дней
ATH = максимум High за всю историю до прошлого бара // сильнейший вариант
// Finetiq: ATH использовать только после 500 баров истории,
// иначе в начале данных почти каждый новый максимум считается рекордом
Короткая сторона и размер позиции (Finetiq)
// автор показал только лонг. Для товаров, валют и крипты он допускает трендследование,
// но зеркальных правил не называл
LL100 = Lowest(Low, 100)[1]
IF MarketPosition = 0 AND Close < LL100 SELL SHORT AT NEXT BAR OPEN // Finetiq
IF MarketPosition < 0 AND Close > MA10 EXIT AT NEXT BAR OPEN // Finetiq
// размер позиции автор не назвал. Для сравнения рынков берём равный риск
Lots = Equity * 0.5% / (ATR(20) * PointValue) // Finetiq: стартовое значение
Вариант B. Абсолютный тренд Nick Radge
Radge назвал каркас трендовой системы: фильтр режима, фильтр самой бумаги, простой вход вроде пробоя 100 дней и трейлинг-стоп. Какие именно фильтр и трейлинг стоят в его системе, он не раскрыл.
// акции, дневные бары, только лонг
RegimeOK = IndexClose > SMA(IndexClose, 200) // автор: так устроены его фильтры режима (S&P 500 выше 200-дневной)
// Finetiq: для австралийских акций берём местный индекс
StockOK = Close > SMA(Close, 200) // Finetiq: фильтр бумаги; автор советует ту же длину, что у фильтра режима
IF MarketPosition = 0 AND RegimeOK AND StockOK AND Close > Highest(High, 100)[1]
BUY AT NEXT BAR OPEN // автор: пробой нового 100-дневного максимума
// автор: трейлинг не по скользящей средней, на акциях она слишком шумная
TrailStop = max(TrailStop[1], HighestCloseSinceEntry - 3 * ATR(20)) // Finetiq: стартовый вариант
IF MarketPosition > 0 AND Close < TrailStop
EXIT AT NEXT BAR OPEN
// Finetiq: выключенный режим запрещает новые входы, открытые позиции ведёт трейлинг
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Таймфрейм | дневные бары | автор |
| Окно максимума | 100, 200 дней или исторический максимум | автор |
| Условие пробоя | закрытие выше уровня или касание | автор |
| Выход | закрытие ниже 10-дневной средней | автор |
| Тип средней | простая | Finetiq |
| Сторона | лонг; шорт зеркально для товаров, валют и крипты | автор (лонг), Finetiq (шорт) |
| Минимум истории для ATH | 500 баров | Finetiq |
| Размер позиции | 0.5% капитала на ATR(20) | Finetiq |
| B: вход | пробой 100-дневного максимума | автор |
| B: фильтр режима | индекс выше SMA 200 | автор (пример из его стратегий) |
| B: фильтр бумаги | цена выше SMA 200 | Finetiq (равная длина фильтров по совету автора) |
| B: трейлинг | 3 × ATR(20) от максимального закрытия | Finetiq (автор: не по средней) |
| B: выбор длин | круглые числа (100, 200) или 21, 42, 63 дня | автор |
Что проверить
- Длина окна. 100 дней против 200 против исторического максимума на одном наборе рынков. Автор утверждает, что длиннее значит сильнее. Смотрите и на число сделок: у исторического максимума их мало, и вывод по нескольким десяткам сделок ненадёжен.
- Закрытие или касание. Автор считает оба входа корректными. Вход по закрытию опаздывает на бар, стоп-ордер на гэпе исполняется выше уровня. Сравните среднюю сделку и проскальзывание.
- Выход по MA10. Для входа по 100–200-дневному уровню это очень короткий выход. Посчитайте долю сделок, закрытых в первые пять дней, и как часто система сразу входит снова. Сравните с MA20, MA50 и трейлингом на ATR.
- Окрестность параметров. Окно 80, 100, 120, 150, 200, 250; средняя 8, 10, 12, 15; SMA против EMA той же длины. Radge советует оптимизировать, чтобы найти самый чувствительный параметр, а не лучший. Если замена SMA на EMA ломает результат, по его меркам это красный флаг.
- Много рынков одними параметрами. Kycek называет подход робастным на всех классах активов. Прогоните правила на 20–30 фьючерсах или ETF без подстройки и смотрите медиану. Систему, которая работает на одном рынке, Radge считает подозрительной.
- Фильтр режима из варианта B. Одна и та же вселенная с фильтром и без, отдельно по годам бокового рынка.
- Тезис об институционализации. Прогоните одинаковые правила на Russell 2000 и S&P 500, затем на акциях США и Австралии. Radge утверждает, что на менее институционализированном рынке результат заметно лучше.
Особенности платформ
TradingView (Pine Script)
- Уровень берите без текущего бара:
ta.highest(high, 100)[1]. С текущим баром закрытие никогда не окажется выше максимума, и сигналов не будет. - Исторический максимум накапливайте в переменной
varна каждом баре. Глубина истории ограничена тарифом, и на коротком графике «рекорд» окажется максимумом доступных данных. - Вход по касанию:
strategy.entry("L", strategy.long, stop = hh). Ордер висит до исполнения или отмены, поэтому обновляйте уровень на каждом баре и снимайте ордер черезstrategy.cancel, когда условие ушло. - По умолчанию сигнал на закрытии исполняется на открытии следующего бара, как в правилах.
- Для акций проверьте, включена ли корректировка на дивиденды. От неё зависят старые максимумы и день пробоя на бумагах с высокой дивидендной доходностью.
MultiCharts и TradeStation (EasyLanguage)
- Уровень:
Highest(High, 100)[1], входBuy next bar at marketпосле закрытия. Для касанияBuy next bar at HH100 stopживёт один бар, его нужно отправлять на каждом баре, пока позиции нет. - Исторический максимум храните в переменной:
ATH = MaxList(ATH, High[1]). Для окна 200 грузите историю с запасом, первые MaxBarsBack баров стратегия не торгует. - Дневной бар фьючерса в TradeStation закрывается по settlement, 1440-минутный по последней сделке. Пробой «по закрытию» на двух видах бара даёт разные сигналы. Бэктест и торговлю ведите на одном виде.
- На склеенном непрерывном фьючерсе (back-adjusted) исторический максимум не совпадает с реальным рекордом цены. Для варианта с ATH сверяйте уровень с несклеенным рядом.
- Трейлинг варианта B задавайте ценой:
Sell next bar at TrailStop stop.SetDollarTrailingсчитает в деньгах и даёт другой уровень.
MetaTrader 5 (MQL5)
- Уровень через
iHighestиiHighсо сдвигом 1. Сигнал берите с закрытого дневного бара и проверяйте появление нового бара, иначе вход повторится на каждом тике. - Дневной бар CFD строится по времени сервера брокера. Короткие воскресные бары сдвигают и MA10, и 100-дневный максимум.
- История котировок у брокера часто короче биржевой. Исторический максимум CFD на акцию или индекс может оказаться максимумом последних нескольких лет. Сверьте уровень с биржевыми данными.
- Вариант B на списке акций реализуем в советнике, но все бумаги и индекс для фильтра должны быть у брокера. Значение индекса берите с закрытого бара:
iClose(symbol, PERIOD_D1, 1).
Где идея может сломаться
- Kycek показал правила на доске как иллюстрацию первых принципов. Бэктеста в видео нет, сила сигнала описана словами.
- Radge не раскрыл фильтр, трейлинг и точные параметры своей системы. Вариант B это его каркас, заполненный нами.
- Боковой рынок. Тренд долго теряет понемногу, и Radge называет боковик ахиллесовой пятой своего подхода. Смотрите результат по годам, а не только итог.
- Вывод про институционализацию Radge строит на своём опыте и сам говорит, что академического объяснения у него нет.
- Акции. Карточка описывает сигнал на одном символе. У Radge система работает по всей вселенной рынка, а тестирует он на исторических составах индекса, включая исключённые бумаги. Такие данные у розничного трейдера обычно платные, а тест на сегодняшнем списке завышен выжившими. Ротацию по списку в Pine не сделать, в EasyLanguage нужен портфельный модуль.
- Исторический максимум зависит от данных: склейка фьючерсов, корректировка дивидендов и глубина истории у брокера дают разные уровни.