Идея коротко
Toby Crabel написал книгу о краткосрочных ценовых паттернах и пробое диапазона открытия (ORB). Главная мысль: рынок чередует покой и движение, и одна фаза порождает другую. Поэтому пробой открытия стоит торговать после дня сжатия, когда диапазон дня уже нескольких предыдущих, а не после широкого дня.
Сжатие Крэбел меряет простыми фильтрами: NR4 (диапазон дня уже каждого из трёх предыдущих), NR7 (уже шести предыдущих), inside day (диапазон внутри вчерашнего) и их сочетание ID/NR4. На следующий день он ставит стоп-ордера выше и ниже диапазона открытия на расстоянии stretch, среднего за 10 дней отклонения от открытия до ближнего экстремума. Сработавший ордер становится позицией, второй служит защитным стопом.
В карточке ещё два варианта той же идеи сжатия. Jack Corsellis торгует узкие дневные бары в акциях-лидерах через их максимум. Trader X, разобранный проп-фирмой IQ Capital по логам сделок, ищет на часовом графике ES и NQ четыре свечи подряд, каждая не шире предыдущей.
Почему это может работать
Узкий день означает, что ни покупатели, ни продавцы не смогли сдвинуть цену. Рынок в равновесии и ждёт новой информации. Крэбел пишет, что участники действуют на первом признаке направления после такого затишья, поэтому первый уверенный выход из диапазона после сжатия чаще перерастает в трендовый день. Stretch отсекает шум у открытия: цена должна уйти от диапазона на типичную для этого рынка величину.
Второй слой объяснения про время. Идеальная сделка у Крэбела сразу идёт в плюс, лучше всего вход в первые 10 минут. Чем больше времени прошло от открытия до входа, тем ниже шанс. Если после входа цена стоит на месте, сделка подозрительна.
Цифры Крэбела взяты из его книги. Рынки и период теста в видео не названы. Объяснение Trader X про смену режимов волатильности дал ведущий по его логам, сам трейдер правила выхода не раскрыл.
Правила
Фильтры сжатия (автор)
// дневные бары; день 0 = последний закрытый день
R(k) = High[k] - Low[k]
NR4 = R(0) < R(1) AND R(0) < R(2) AND R(0) < R(3) // уже каждого из трёх предыдущих
NR7 = R(0) < R(k) для всех k = 1..6
Inside = High[0] <= High[1] AND Low[0] >= Low[1] // Finetiq: равенство экстремумов допускаем
ID_NR4 = Inside AND NR4 // лучший фильтр по данным Крэбела
R2(k) = Highest(High, 2)[k] - Lowest(Low, 2)[k]
NR2bar = R2(0) < Lowest(R2, 20)[1] // самый узкий 2-дневный диапазон за 20 дней
R3(k) = Highest(High, 3)[k] - Lowest(Low, 3)[k]
NR3bar = R3(0) < Lowest(R3, 28)[1] // 28 дней в видео #14 (27:23);
// в видео #41 (02:25) Джек называет 20 дней. Проверьте оба
// Finetiq: сравниваем с окнами, закончившимися на днях 1..N, пересечение на день допускаем
Contraction = NR7 OR ID_NR4 OR (Inside AND R(0) < R(k) для k = 1..4)
// автор: ORB эффективен после inside day уже 4-5 предыдущих дней и после любого NR7
Вход ORB (автор)
// stretch по 10 предыдущим дням
Stretch = Average( MIN(High - Open, Open - Low), 10 )[1]
// день после Contraction
OR_High, OR_Low = максимум и минимум диапазона открытия
// Finetiq: длина диапазона в видео не названа. Стартовая версия: первый 5-минутный бар,
// вариант для проверки: цена открытия (OR_High = OR_Low = Open)
BuyLevel = OR_High + Stretch
SellLevel = OR_Low - Stretch
BUY STOP at BuyLevel
SELL SHORT STOP at SellLevel
// первый исполненный ордер = позиция, второй остаётся защитным стопом
Long: StopLoss = SellLevel
Short: StopLoss = BuyLevel
CANCEL оба ордера, если за 60 минут после открытия ни один не исполнен
// Finetiq: автор говорит лишь, что поздний вход хуже, а худший вход перед закрытием
ORBp: одна заявка по тренду (автор)
// в рынке с явным направлением и на любом inside day (автор)
TrendUp = Close > EMA(Close, 21) AND EMA(Close, 21) > EMA(Close, 21)[5]
TrendDown = Close < EMA(Close, 21) AND EMA(Close, 21) < EMA(Close, 21)[5]
// автор: основной тренд важнее всего остального. EMA 21 взята из примера Джека, наклон за 5 дней Finetiq
IF TrendUp THEN только BUY STOP at BuyLevel
IF TrendDown THEN только SELL SHORT STOP at SellLevel
// защитный стоп ставится после входа: Long StopLoss = SellLevel
IF цена сначала дошла до противоположного уровня THEN CANCEL заявку // автор
Сопровождение
// автор: стоп в безубыток в течение часа после входа
IF прошло 60 минут после входа
IF позиция в плюсе THEN StopLoss = EntryPrice
ELSE EXIT AT NEXT BAR OPEN // Finetiq: «сделка ведёт себя не как идеал» трактуем как выход
// автор: цель это ход на 2-3 дня, но переносить только при существенной прибыли к концу сессии
IF до конца сессии 5 минут
IF прибыль в пунктах >= Stretch THEN держим, StopLoss = EntryPrice // Finetiq: «существенная» = один stretch
ELSE EXIT
IF позиция открыта 3 дня THEN EXIT на закрытии // Finetiq
Вариант B. Дневной узкий бар в лидере (Джек)
// дневные бары; какие акции считать лидерами, решает отбор вне сигнала
Trigger = (NR7 OR NR2bar OR NR3bar OR Inside)
AND бар у EMA(Close, 10) или EMA(Close, 21) // автор: чаще всего у EMA 10 и 21
// Finetiq: «у средней» = Low <= EMA <= High
ADRpct = 100 * (Average(High / Low, 20) - 1) // автор: 20-дневный ADR% без гэпов; Finetiq: формула
IF Trigger
BUY STOP at High[0] // автор: через максимум узкого бара
StopLoss = Low[0] // автор
IF (High[0] - Low[0]) / High[0] * 100 > 2/3 * ADRpct THEN CANCEL // автор: риск 1/2-2/3 ADR%
CANCEL через 3 дня без исполнения // Finetiq
SELL 1/2 (или 1/3) LIMIT at EntryPrice + 1R (или + 2R) // автор
остаток: EXIT AT NEXT BAR OPEN при Close < EMA(Close, 10) или EMA(Close, 21) // автор
Вариант C. Монотонное сжатие Trader X
// часовые бары ES и NQ, позиции переносятся через ночь (автор)
Compression = R(0) <= R(1) AND R(1) <= R(2) AND R(2) <= R(3)
// автор: четыре свечи подряд, каждая не шире предыдущей, последняя самая узкая
// Finetiq: фразу можно прочитать и как четыре сравнения (пять свечей). Проверьте оба
BUY STOP at High[0] + 1 тик
SELL SHORT STOP at Low[0] - 1 тик // OCO (автор)
после срабатывания оба уровня стираются, повторного входа по сетапу нет // автор
не больше одной сделки в день на инструмент // автор
часть крупных новостей пропускается // автор, какие именно, неизвестно
// выход: у автора волатильностный трейлинг, формулу подобрать не удалось
InitialStop = противоположный уровень // Finetiq
Trail (long) = Highest(High с момента входа) - 3 * ATR(14) // Finetiq: стартовое значение
SELL 1/2 LIMIT at EntryPrice + 2R, остаток по Trail // Finetiq: автор закрывает частями
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| NR4 и NR7 | уже 3 и 6 предыдущих дней | автор |
| Inside day | диапазон внутри вчерашнего | автор |
| Лучший фильтр | ID/NR4 | автор |
| Окно 2-bar NR | 20 дней | автор |
| Окно 3-bar NR | 28 дней (#14) или 20 дней (#41) | автор, два значения |
| Stretch | среднее MIN(High − Open, Open − Low) за 10 дней | автор |
| Диапазон открытия | первый 5-минутный бар | Finetiq |
| Окно для входа | 60 минут от открытия | Finetiq |
| Фильтр тренда ORBp | EMA 21, наклон за 5 дней | автор (пример Джека), наклон Finetiq |
| Безубыток | в течение часа после входа | автор |
| Перенос позиции | прибыль к концу дня от одного stretch, до 3 дней | Finetiq |
| Вариант B: риск | не больше 1/2-2/3 ADR% за 20 дней | автор |
| Вариант B: частичный выход | 1/2 или 1/3 на 1R или 2R | автор |
| Вариант B: трейлинг | закрытие ниже EMA 10 или 21 | автор |
| Вариант C: сжатие | 4 свечи, каждая не шире предыдущей | автор |
| Вариант C: таймфрейм и рынки | H1, ES и NQ | автор |
| Вариант C: трейлинг | 3 × ATR(14) от максимума | Finetiq |
| Вариант C: частичный выход | 1/2 на 2R | Finetiq |
Что проверить
- Главное утверждение Крэбела. ORB в дни после Contraction против ORB в дни после широкого дня (диапазон больше трёх или шести предыдущих) и против ORB каждый день. Если после сжатия результат не лучше, фильтр не работает на вашем рынке.
- ID/NR4 против отдельных фильтров. Сравните inside day, NR4 и их сочетание на одном и том же входе. Крэбел утверждает, что сочетание лучше в 15 тестах из 16.
- Окрестность stretch. Множитель 0, 0.5, 1 и 1.5, окно 5, 10 и 20 дней. Отдельно длина диапазона открытия: цена открытия, 5, 15 и 30 минут. Если результат держится только на одной комбинации, это подгонка.
- Окно 3-bar NR. 20 дней против 28. Разница в двух видео Джека даёт готовый тест чувствительности.
- Выход. Безубыток через час против отсутствия безубытка, против выхода в конце дня и против переноса на 2-3 дня. Правило часа сильнее всего меняет процент прибыльных сделок.
- Trader X и издержки. Три сравнения против четырёх, монотонное сжатие против классического NR4 на H1. На ES тик стоит $12.50. Добавьте по тику проскальзывания на каждом стоп-ордере и комиссию и посмотрите, сколько остаётся от средней сделки.
- Вариант B. Порог риска 1/2 ADR против 2/3 и против отсутствия порога. Если без порога результат не хуже, фильтр только сокращает число сделок.
Особенности платформ
TradingView (Pine Script)
- Фильтры сжатия и stretch считаются по дневкам, а вход на 5-минутках. Берите вчерашние значения без заглядывания:
request.security(syminfo.tickerid, "D", expr[1], lookahead = barmerge.lookahead_on). - Дневной бар фьючерсов CME начинается в 18:00 ET предыдущего дня. Open, High и Low такого бара это не дневная сессия, на которой строится ORB. Для фьючерсов считайте диапазон, NR и stretch по основной сессии из внутридневных баров.
- Пара заявок:
strategy.entryсstopиoca_type = strategy.oca.cancel, после входа защитный стоп черезstrategy.exit(..., stop = sellLevel). - Час в сделке на 5-минутках:
bar_index - strategy.opentrades.entry_bar_index(0) >= 12. Если вход и стоп задеты одной свечой, нуженuse_bar_magnifier = trueили младший таймфрейм.
MultiCharts и TradeStation (EasyLanguage)
Timeэто время закрытия бара: первый 5-минутный бар после открытия в 09:30 имеетTime = 935. Дневные значения удобно брать из второго потока (High of Data2).Buy next bar at BuyLevel stopживёт один бар, заявки отправляются заново на каждом баре. Когда позиция открыта, перестаньте отправлятьSell Shortи выставляйтеSell next bar at SellLevel stop. Иначе встречная заявка перевернёт позицию, а у Крэбела второй ордер только закрывает её.- NR и stretch зависят от Open, High и Low дня, а они от шаблона сессии (дневная или круглосуточная). Держите один шаблон для дневного и внутридневного потока.
- Правило часа на 5-минутках:
If BarsSinceEntry >= 12 then .... Для порядка исполнения внутри свечи включите Bar Magnifier или Look-Inside-Bar.
MetaTrader 5 (MQL5)
- Дневной бар строится по времени сервера брокера, и его Open это полночь сервера, а не открытие биржи. Stretch по такому бару другой. Считайте дневные значения сами из M5 за биржевую сессию.
- Короткий воскресный бар у части брокеров почти всегда проходит как NR4 и NR7. Это ложные сигналы на понедельник, их нужно исключить.
- Открытие 09:30 ET переводите в серверное время с учётом летнего времени.
TimeGMT()в тестере равен серверному времени. - «Один тик» у Trader X это шаг цены ES (0.25). У CFD на S&P 500 шаг другой, берите
SYMBOL_TRADE_TICK_SIZE, а не_Point. OCO и стирание уровней после входа придётся писать самим.
Где идея может сломаться
- Статистика Крэбела старая и из книги. Рынки, период и издержки теста в видео не названы. Паттерны сжатия с тех пор стали широко известны.
- Крэбел требует учитывать весь контекст рынка: тренд, поддержку и сопротивление, характер конкретного инструмента. Механическая версия этого не содержит и может работать хуже его практики.
- Результаты Trader X покрывают 25 календарных дней и 20 торговых. Их показала проп-фирма в рекламном ролике со скидкой на челлендж. Ведущий говорит, что по коду стратегия находила и посредственные пробои, которые Trader X не брал, то есть отбор сигналов у него ручной. Формула стопа неизвестна.
- Стоп-ордера на пробое у открытия исполняются с проскальзыванием, а спреды в первые минуты шире. На частых внутридневных сделках это заметная доля ожидания.
- Вариант B опирается на выбор акций-лидеров. Какие бумаги считать лидерами, Джек решает сам, и без этого отбора сигнал на случайной акции может вести себя иначе.