Ідея коротко
Anthony Crudele, трейдер ф'ючерсів на індекси з двадцятирічним стажем, починає будь-яку угоду з питання про середовище. Середовищ три: консолідація, тренд, повернення до середнього. Визначає він їх за денними смугами Боллінджера з періодом 20 і трьома стандартними відхиленнями замість звичних двох. Коли середовище відоме, він торгує в один бік. Обидва боки дозволені лише в консолідації.
Смуги звужуються: консолідація, виходи з діапазону частіше повертаються. Смуги з пласких розходяться, і ціна бере максимум: тренд, лише лонги (при розширенні вниз лише шорти). Після тренду смуги сходяться: повернення до середнього, угоди проти минулого тренду з ціллю в середині смуг.
Варіант B від Kieran Duff, який веде на CFD портфель із 20-30 автоматичних стратегій: фільтр складає метрики в бал і вирішує, які сигнали пропускати. Ваги й пороги він не назвав, скоринг нижче це формалізація Finetiq.
На відміну від bollinger-squeeze, смуги тут не дають входів, а розподіляють дозволи між пробійними стратегіями і стратегіями повернення. Від zero-parameter-filters відмінність у формі: перемикач із трьох станів замість «так» або «ні».
Чому це може працювати
Crudele прийшов до системи після збитків: він був контраріанцем, фейдив ралі й пробої і втрачав на розвороті ринку 2000 року. Причину він бачить у тому, що не визначав середовище. Три відхилення він обрав під індекси: смуги у два відхилення NASDAQ пробиває у звичайний день. Користь правила він описує так: воно тримає його поза фейдами тренду і поза пробоями всередині діапазону.
Kieran розв'язує ту саму задачу для портфеля. Коли ADX зростає, ціна відходить від середніх і ATR розширюється, пробоям добре, а стратегії повернення й шорти краще вимкнути. Фільтр лише прибирає сигнали з меншою ймовірністю, і Kieran визнає, що іноді він заблокує угоду, яка відіграла б учорашній збиток.
Тесту самого класифікатора немає ні в кого з авторів. Цифри Kieran стосуються його портфеля з п'яти стратегій на in-sample, де він уперше ввімкнув фільтр. Усі свої стратегії він туди ще не додав і сам каже, що підсумковий вигляд буде іншим.
Правила
Смуги й ознаки (автор)
// денні бари, індексні ф'ючерси ES, NQ, RTY
Mid = SMA(Close, 20)
SD = StdDev(Close, 20) // генеральне
Upper = Mid + 3 * SD // автор: 20 періодів, 3 відхилення
Lower = Mid - 3 * SD
Width = Upper - Lower
Outward = Upper > Upper[1] AND Lower < Lower[1] // автор: смуги дивляться назовні; Finetiq: обидва краї за бар
Inward = Width < Width[1] AND Width[1] < Width[2] // автор: смуги сходяться; Finetiq: 2 бари поспіль
Narrow = Width < SMA(Width, 50) // Finetiq: смуги стиснуті
Класифікатор середовища (автор, пороги Finetiq)
// Env зберігається між барами, стартове значення CONSOLIDATION
NewUp = Outward AND Close > Highest(High, 20)[1] // автор: розширення і новий максимум; Finetiq: за 20 барів
NewDown = Outward AND Close < Lowest(Low, 20)[1]
IF NewUp AND Env <> TREND_UP
Env = TREND_UP; EpisodeStart = поточний бар // Finetiq: початок епізоду ставиться лише при зміні середовища
IF NewDown AND Env <> TREND_DOWN
Env = TREND_DOWN; EpisodeStart = поточний бар
// новий максимум усередині того самого тренду EpisodeStart не зсуває
IF Env IN (TREND_UP, TREND_DOWN) AND Inward // автор: після тренду смуги сходяться
PeakUp = максимум Upper від EpisodeStart // Finetiq: піки смуг за епізод
PeakDown = мінімум Lower від EpisodeStart
PrevTrend = Env
Env = MEAN_REV
IF Env = MEAN_REV AND (Narrow OR ціль 50% досягнута OR 10 барів без нового тренду)
Env = CONSOLIDATION // автор: смуги стиснулися, це консолідація; далі чекати, руки в кишенях
// Finetiq: ціль 50% і 10 барів як запасні умови
Дозволи за середовищами (автор)
TREND_UP: лише лонги; шорти й фейди заборонені // автор
TREND_DOWN: лише шорти // автор
CONSOLIDATION: обидва боки, біля країв діапазону, не в середині // автор
вихід за діапазон імовірно повернеться // автор
Finetiq: пробійні стратегії вимкнені
MEAN_REV: угоди проти PrevTrend, розмір 0.5 // автор: проти основного тренду маленьким
// розміром; Finetiq: 0.5
угоди за PrevTrend заборонені // автор: більше не хоче бути в лонгу
Рівні повернення й цілі (автор, побудова Finetiq)
Crudele будує сітку Фібоначчі не за ціною, а за смугами: від піку верхньої смуги до піку нижньої. Його індикатор Beacon малює її сам. Як вибираються піки, показано лише на дошці й одному графіку, нижче наше прочитання.
Range = PeakUp - PeakDown
// після TREND_UP: шорт
L30 = PeakUp - 0.30 * Range
L50 = PeakUp - 0.50 * Range
IF Env = MEAN_REV AND PrevTrend = TREND_UP AND Close < L30 // автор: денне закриття нижче 30%
SELL SHORT AT NEXT BAR OPEN
Target = L50 // автор: ціль 50%
IF Close > L30 THEN EXIT AT NEXT BAR OPEN // автор: доки закриття не повернулося вище
StopLoss = максимум бару, на якому розвернувся тренд // автор; Finetiq: максимум епізоду
// рівень 70% автор використовує, щоб оцінити силу розвороту, не для входу
// після TREND_DOWN дзеркально від PeakDown: закриття вище 30%, ціль 50%
// ціль у тренді (автор): минулий пік смуги, «незакінчена справа»
TrendTarget_Up = Highest(Upper, 60) до EpisodeStart // Finetiq: вікно 60
Виходи в тренді Crudele веде за VWAP від бару розвороту і середніми 8, 21 і 34, розмір позиції рахує від відстані до стопа.
Варіант B. Скоринг режиму (Kieran Duff, ваги й пороги Finetiq)
Метрики фільтра Kieran: ATR, SMA 50, SMA 200, ADX, закриття останнього денного бару, ATR поточного бару, перцентиль ATR, режим обсягу і режим тренду. Формул, ваг і порогів в інтерв'ю немає. Для VIX він пропонує не поріг, а розширення за 2 дні проти середнього за 2 місяці, але цей модуль у нього ще не побудований.
// денні значення минулого закритого бару
ATR14 = ATR(14); ADX14 = ADX(14) // Finetiq: періоди
Dist = ABS(Close - SMA(Close, 50)) / ATR14
S1 = ADX14 > ADX14[5] // автор: ADX зростає; Finetiq: за 5 днів
S2 = Dist > Dist[5] // автор: ціна відходить від середніх
S3 = ATR14 > ATR14[5] // автор: ATR розширюється
S4 = PercentRank(ATR14, 250) >= 50 // автор: перцентиль ATR; Finetiq: вікно й поріг
S5 = SMA(Volume, 10) > SMA(Volume, 50) // автор: режим обсягу; Finetiq: порівняння
TrendUp = Close > SMA(Close, 200) AND SMA(Close, 50) > SMA(Close, 200) // автор: режим тренду
TrendDown = Close < SMA(Close, 200) AND SMA(Close, 50) < SMA(Close, 200) // Finetiq: визначення
Score = S1 + S2 + S3 + S4 + S5 // Finetiq: рівні ваги, від 0 до 5
IF Score >= 4 AND TrendUp THEN пробійні лонги; повернення й шорти вимкнені // автор: дія; Finetiq: поріг 4
IF Score >= 4 AND TrendDown THEN пробійні шорти; повернення вимкнене // Finetiq
IF Score >= 4 AND NOT TrendUp AND NOT TrendDown THEN пробої в обидва боки, розмір 0.5 // Finetiq
IF Score <= 1 THEN стратегії повернення; пробійні вимкнені // Finetiq
IF Score IN (2, 3) THEN усі стратегії, розмір 0.5 // Finetiq
Підключення до карток бази (Finetiq)
// приклад 1: prev-high-breakout-adx. Фільтр ADX(5) < 35, BUY STOP над максимумом минулої сесії
Allowed_A = DailyADX < 35 // як у картці
Allowed_B = Allowed_A AND Env = TREND_UP // Crudele: пробій лише в тренді
Allowed_C = Allowed_A AND Env <> CONSOLIDATION // м'якше: заборона лише в діапазоні
// зверніть увагу на конфлікт: ADX(5) < 35 відбирає тихі дні, TREND_UP вимагає розширення смуг
// приклад 2: five-day-low-mr. Купівля 5-денного мінімуму, вихід вище MA5
Allowed_MR = Env IN (CONSOLIDATION, TREND_UP) // купівля відкату не суперечить «лише лонг»
OR (Env = MEAN_REV AND PrevTrend = TREND_DOWN) // повернення після падіння, розмір 0.5
// у TREND_DOWN і в MEAN_REV після зростання купівлі заборонені
Параметри
| Параметр | Значення | Звідки |
|---|---|---|
| Таймфрейм | денний | автор |
| Смуги Боллінджера | SMA 20, 3 стандартні відхилення | автор |
| Смуги назовні | верхня зростає й нижня падає за бар | Finetiq |
| Пробій у тренді | закриття за 20-денним екстремумом | Finetiq |
| Смуги сходяться | ширина падає 2 бари поспіль | Finetiq |
| Смуги стиснуті | ширина нижче своєї SMA 50 | Finetiq |
| Рівні повернення | 30, 50, 70% між піками смуг | автор |
| Вхід у повернення | денне закриття за рівнем 30% | автор |
| Ціль повернення | 50%, вихід при закритті назад за 30% | автор |
| Розмір проти основного тренду | 0.5 | Finetiq (автор: маленький) |
| Вихід із MEAN_REV | смуги стиснуті (Narrow), ціль 50% або 10 барів | автор (стиснення смуг), Finetiq (поріг стиснення, ціль, 10 барів) |
| Ціль у тренді | минулий пік смуги, вікно 60 барів | автор, вікно Finetiq |
| Варіант B: метрики | ADX, ATR, перцентиль ATR, SMA 50 і 200, обсяг, тренд | автор |
| Варіант B: періоди, ваги, пороги | ADX 14, ATR 14, 5 і 250 днів, бали 4 і 1 | Finetiq |
Що перевірити
- Чи розділяє класифікатор ринок. Розмітьте історію ES і NQ середовищами й порахуйте для кожного середню зміну ціни за 5 днів, частку продовжень пробоїв 20-денного екстремуму і частку повернень до Mid. Якщо в TREND_UP пробої продовжуються не частіше, ніж у CONSOLIDATION, класифікатор не працює.
- Три відхилення проти двох. Той самий класифікатор на 20/2 і 20/2.5: частота зміни середовищ і результат. Crudele вважає два відхилення на індексах надто близькими.
- Околиця порогів Finetiq. Пробій за 10, 20 і 40 барів; сходження 1, 2 і 3 бари; вікно Narrow 30, 50 і 100. Стрибок результату від сусіднього значення означає підгонку.
- Стратегія з фільтром і без. Три версії
prev-high-breakout-adxз прикладу: скільки угод фільтр прибрав і якими вони були. - Рівні 30/50/70. Вхід за 30% проти 50% і проти входу одразу при Inward, ціль 50% проти поточної Mid.
- Скоринг Kieran. Рівні ваги проти одного ADX і одного перцентиля ATR. Пороги обирайте лише на in-sample.
- Витрати на перемикання. Скільки разів на рік змінюється середовище. Перемикання на прикордонних барах множать угоди, які лише платять спред.
Особливості платформ
TradingView (Pine Script)
ta.bb(close, 20, 3)використовує генеральне відхилення, якStdDevв EasyLanguage іiBandsу MT5, тож рівні 30/50/70 збігатимуться.- Середовище й піки смуг зберігайте в змінних
varі оновлюйте лише на закритому барі. - ADX для варіанта B беріть із
ta.dmi(14, 14), він за Вайлдером. Перцентиль ATR:ta.percentrank(atr, 250). - У ES денний бар у TradingView починається о 18:00 ET. Смуги за кеш-індексом і за ф'ючерсом різняться, рахуйте за тим рядом, яким торгуєте.
MultiCharts і TradeStation (EasyLanguage)
- Смуги простіше порахувати явно:
Average(Close, 20) + 3 * StdDev(Close, 20).StdDevSвибіркове й дасть ширші смуги. - У ф'ючерсів денний бар TradeStation закривається за settlement, а 1440-хвилинний за останньою угодою. Закриття за рівнем 30% може випасти на різні дні. Бектест і торгівлю ведіть на одному виді бару.
AvgTrueRangeце просте середнє TR, у Pine ATR за Вайлдером. Ознаки S2, S3 і S4 варіанта B дадуть інші дні, якщо не порахувати ATR за Вайлдером вручну.- Класифікатор копіюйте в код кожної стратегії, яку він фільтрує. Так у бектесті всі бачать одне значення минулого дня.
MetaTrader 5 (MQL5)
iBands(_Symbol, PERIOD_D1, 20, 0, 3, PRICE_CLOSE)дає смуги на генеральному відхиленні. Значення беріть із бару 1.- Денний бар CFD будується за серверним часом брокера. Короткі недільні бари додають зайві закриття у вікно 20 і зсувають смуги.
- Для варіанта B беріть
iADXWilder,iADXзгладжує інакше.iATRце просте середнє TR. - Режим обсягу в CFD рахується за тиковим обсягом (
iTickVolume). Kieran торгує CFD саме так, але це активність котирувань у брокера, а не обсяг торгів.
Де ідея може зламатися
- Crudele торгує з дискрецією: цілі за чужими рівнями, виходи за VWAP і середніми, опціони при широкому стопі, розмір за макрофоном. Механічна версія цього не повторює.
- Найважче місце він називає сам: перехід після повернення до середнього, коли невідомо, буде консолідація чи новий тренд. Тут його найчастіше б'є, і тут найбільше наших порогів.
- Визначення «смуги назовні», «сходяться» і вибір піків для сітки наші. Різні прочитання дадуть різні дати зміни середовища.
- Статистики у відео немає, лише схеми на дошці й один графік ES 2025 року. У випуску багато реклами проп-фірм.
- Цифри Kieran отримано на in-sample 2018-2019 років, у першому прогоні фільтра і не на всьому портфелі. Про out-of-sample вони нічого не кажуть.
- Скоринг із п'яти ознак із порогами легко підігнати. Ваги автора невідомі, наші рівні ваги лише стартова точка.