Идея коротко
Andrea Unger, четырёхкратный победитель World Cup Trading Championship, строит стратегии под каждый фьючерс отдельно. Отправная точка у него почти всегда одна. Покупка на пробое максимума прошлой сессии, выход в конце дня, обязательный стоп. Если такой скелет на рынке даёт растущую, но ещё неторгуемую кривую, Unger ищет условия, при которых пробой работает лучше.
Один из фильтров он называет почти универсальным: дневной ADX с периодом 5. Когда ADX ниже 35, пробой срабатывает заметно лучше, чем при высоком ADX. Высокий ADX, по его объяснению, значит, что рынок уже много пробежал и выдохся.
Вариант B от Toby Crabel не добавляет правил входа. Он даёт редкие цифры: доля продолжения после выноса вчерашнего максимума упала с 56% до 52 или 51%. Это повод измерить распад базового пробоя по годам до того, как добавлять к нему фильтры.
Почему это может работать
Unger сравнивает рынок с бегуном, который догоняет автобус. После сильного направленного движения рынку трудно сразу бежать дальше, и пробой очередного максимума чаще гаснет. Когда ADX низкий, рынок отдохнул, и выход за вчерашний максимум чаще становится движением на весь день. Горизонт, для которого это верно, он называет сам: внутри дня или три-четыре дня.
Индикаторы Unger не использует как сетап, только как фильтр условий. Метод он описывает прямо. Один и тот же вход прогоняется отдельно при условии и при его отсутствии. Если исход меняется статистически, условие проверяется на здравый смысл: есть ли у него объяснение или это совпадение.
Crabel объясняет, почему такие пробои слабеют. Рынки торгуются круглосуточно, и вместо открытия и вчерашних экстремумов появилось 10-20 точек отсчёта. Закрытие прошлого дня стало важнее, чем раньше. Вокруг одно- и двухдневных максимумов и минимумов стоит много заявок, связанных с опционами, рынки там останавливаются, и возврата к среднему стало больше. Сдвиг вероятности на несколько процентов, по его словам, сильно меняет итог торговли.
Цифр по фильтру ADX Unger не называет. Это его оценка по опыту на своих рынках.
Правила
Фильтр (автор)
// дневной ряд: Unger берёт 1440-минутные бары, чтобы закрытием была последняя сделка дня, а не settlement
DailyADX = ADX(5) по вчерашнему закрытому дневному бару // автор: период 5
// Finetiq: сглаживание Уайлдера, как в стандартном ADX
TradeAllowed = DailyADX < 35 // автор: «ниже 40 или 35»
Вход (автор)
// 15-минутный график, ликвидные фьючерсы CME и EUREX
PrevHigh = максимум прошлой сессии
PrevLow = минимум прошлой сессии
IF TradeAllowed AND TradesToday = 0
BUY STOP at PrevHigh + 1 тик // автор: пробой максимума прошлой сессии; Finetiq: отступ 1 тик
// Finetiq: зеркальный шорт на пробое PrevLow. Unger описывает лонг, шорт проверяйте отдельно
// Finetiq: одна сделка в день
Выход (автор, размеры Finetiq)
StopLoss = EntryPrice - 0.5 * DailyATR(20) // автор: стоп обязателен всегда; Finetiq: размер
EXIT at SessionClose - 15 мин // автор: выход в конце дня; Finetiq: время
// другие выходы скелета у автора: через два дня или по тейк-профиту, размеры не названы
Как Unger проверяет фильтр (автор)
Run A: тот же вход и выход, только дни с DailyADX < 35
Run B: тот же вход и выход, только дни с DailyADX >= 35
// сравнить среднюю сделку, профит-фактор и форму кривой
// условие берётся в систему, если разница заметна и у неё есть объяснение
// отсев по издержкам: тест на 1 контракт без комиссий,
// но средняя сделка должна с запасом покрывать комиссию и проскальзывание
Вариант B. Проверка распада по Toby Crabel
// событие: цена в течение дня превысила максимум прошлой сессии
Event = High > PrevHigh
// продолжение: Crabel определение не назвал, дальше Finetiq
Continued = Close > PrevHigh // день закрылся выше пробитого уровня
// вариант: Close > PrevHigh + 0.25 * DailyATR(20)
ContinuationRate[год] = число дней (Event AND Continued) / число дней Event
// Crabel: раньше около 56%, сейчас 52%, 51% или меньше
// считать по годам, отдельно для дней с DailyADX < 35 и >= 35
// зеркально для выноса вчерашнего минимума
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Рынки | ликвидные фьючерсы CME и EUREX | автор |
| Таймфрейм входа | 15 минут | автор (основной ТФ Unger) |
| Уровень входа | максимум прошлой сессии | автор |
| Отступ | 1 тик | Finetiq |
| Фильтр | дневной ADX(5) < 35 | автор |
| Второй порог | 40 | автор |
| Дневной бар | 1440-минутный, закрытие без settlement | автор |
| Стоп | обязателен, 0.5 × дневной ATR(20) | автор (наличие), Finetiq (размер) |
| Выход | конец дня | автор |
| Альтернативные выходы | через 2 дня, тейк-профит | автор, размеры не названы |
| Шорт | зеркально на минимуме | Finetiq |
| Сделок в день | 1 | Finetiq |
| Продолжение в варианте B | закрытие выше пробитого максимума | Finetiq |
Что проверить
- Фильтр по методу автора. Два прогона одного входа и выхода: ADX(5) ниже 35 и не ниже 35. Unger говорит, что разница огромная. Если на вашем рынке её нет, фильтр не нужен.
- Окрестность фильтра. Период ADX 4, 5, 7 и 10, порог 25, 30, 35 и 40. Устойчивый фильтр даёт похожий результат в соседних значениях. Unger сам называет два порога, 35 и 40.
- Распад по годам. Посчитайте долю продолжения из варианта B по каждому году и отдельно для дней с фильтром и без. Проверьте цифры Crabel на своих рынках и то, удерживает ли ADX долю выше 52%.
- Какой дневной бар. ADX по дневным барам с settlement против 1440-минутных баров. Unger перешёл на 1440 минут именно из-за settlement.
- Какая сессия. Максимум основной сессии против максимума круглосуточной. У фьючерсов это разные уровни, и Crabel говорит, что круглосуточная торговля изменила сами точки отсчёта.
- Средняя сделка против издержек. Главный отсев автора. Если средняя сделка на один контракт близка к $80 на mini NASDAQ или ниже, Unger такую систему не торгует. Добавьте комиссию и 1-2 тика проскальзывания на стоп-ордер входа и на выход.
- Гэпы и лонг против шорта. Отдельно посмотрите дни, когда рынок открылся выше вчерашнего максимума и стоп-ордер исполнился сразу. На индексах сравните лонг с зеркальным шортом: автор описывает только лонг.
Особенности платформ
TradingView (Pine Script)
- Дневной ADX на 15-минутном графике без заглядывания вперёд:
request.security(syminfo.tickerid, "D", adx[1], lookahead = barmerge.lookahead_on), гдеadxизta.dmi(5, 5). Без[1]бэктест увидит сегодняшний незакрытый ADX. ta.dmiсчитает ADX по Уайлдеру, как стандартный индикатор в EasyLanguage.- Вчерашний максимум тоже берите через
request.securityсо сдвигом[1]. Дневной бар фьючерса CME начинается в 18:00 ET, поэтому такой максимум включает ночную торговлю. Максимум только основной сессии считайте сами по окну времени. - Стоп-ордер:
strategy.entry("L", strategy.long, stop = prevHigh + syminfo.mintick). Если день открылся выше уровня, ордер исполнится по первой доступной цене, а не по уровню.
MultiCharts и TradeStation (EasyLanguage)
- Kevin Davey (The Algorithmic Advantage, #036) описывает ту же ловушку, что и Unger. У дневного бара фьючерса в TradeStation закрытие это settlement, у 1440-минутного бара последняя сделка. ADX и сигналы на двух видах бара различаются. Бэктест и торговлю ведите на одном виде.
- Дневной ряд подключите вторым потоком (
Data2) и беритеADX(5) of Data2на закрытом дневном баре. Buy next bar at PrevHigh + MinMove / PriceScale stopживёт один бар. Отправляйте его на каждом 15-минутном баре, пока за день не было входа.- Выход в конце дня:
If Time >= 1545 then Sell next bar at marketпри закрытии сессии в 16:00 (бар подписан временем закрытия).SetExitOnCloseв реальной торговле не срабатывает.
MetaTrader 5 (MQL5)
- В MT5 два ADX:
iADXс другим сглаживанием иiADXWilder. Для совпадения с Pine и EasyLanguage беритеiADXWilder(_Symbol, PERIOD_D1, 5), значение с закрытого бара (сдвиг 1). - Дневной бар строится по времени сервера брокера. У брокеров с сервером не в GMT+2/+3 бывают короткие воскресные бары. При периоде 5 один такой бар это пятая часть окна ADX.
- Вчерашний максимум
iHigh(_Symbol, PERIOD_D1, 1)у CFD это максимум суток по серверу, а не максимум основной сессии биржи. Порог ADX 35 подобран автором на фьючерсах, на CFD-дневках его надо проверять заново. - Отложенный
BuyStopчерезCTradeставьте с экспирацией до конца дня, чтобы неисполненный ордер не остался на завтра.
Где идея может сломаться
- Цифр по фильтру ADX нет. «Намного лучше» это оценка Unger по его рынкам и его версиям стратегии, которые он дополнительно дорабатывает под каждый рынок.
- Unger сам говорит, что скелет «пробой вчерашнего максимума, выход в конце дня» обычно неторгуем: средняя сделка не покрывает издержки. Фильтр сокращает число сделок, а издержки остаются главным риском.
- Цифры Crabel даны без рынка, периода и определения продолжения. Если сдвиг с 56% до 51% реален, базовый пробой близок к подбрасыванию монеты, и весь эдж должен давать фильтр.
- Crabel связывает остановки у одно- и двухдневных экстремумов с опционными заявками и ростом возврата к среднему. Это довод скорее против пробоя вчерашнего максимума, чем за него.
- Размер стопа и тейка автор не назвал. Стоп меняет результат сильнее порога ADX, и его легко подогнать.
- Максимум «прошлой сессии» у круглосуточных фьючерсов, кэш-индексов и CFD это три разных уровня. Результат теста зависит от выбора сильнее, чем кажется.