Ідея коротко
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 потрібен портфельний модуль.
- Історичний максимум залежить від даних: склейка ф'ючерсів, коригування дивідендів і глибина історії в брокера дають різні рівні.