Идея коротко
John Bollinger придумал полосы в начале 80-х и называет их прибором, а не системой. Полосы отвечают на один вопрос: дороги цены или дёшевы относительно недавней волатильности. У нижней полосы цена низкая по определению. Поверх этого автор строит ценовые паттерны, и самый любимый из них W-дно.
Рынок падает и делает первый минимум с сильным импульсом, за нижней полосой. Потом отскакивает, снова падает и проверяет ценовой минимум. Второй минимум по цене рядом с первым или даже чуть ниже, но уже внутри полосы. Цена вернулась к тем же уровням, а сила падения относительно волатильности уменьшилась. Первый минимум снаружи полосы и второй внутри: по определению автора это W-дно.
Сам паттерн для автора только alert. В сделку он входит, когда ралли действительно началось. Дальше ставит chandelier-стоп от минимума и даёт сделке развиваться. M-вершины он торгует реже: вершины формируются дольше, они размыты, а их вариант «три толчка к максимуму» менее точен.
Почему это может работать
Объяснение автора: эмоции на дне острее и чётче, чем на вершине, поэтому донные паттерны резче. Первый минимум за полосой это панический выброс. На втором минимуме продавцы уже не могут вытолкнуть цену за пределы обычной волатильности. Полосы сами подстраиваются под волатильность, поэтому одно определение подходит для разных бумаг и лет без подбора порогов в пунктах.
Правило подтверждения автор называет ключевым принципом всей своей работы. По его словам, одно лишь ожидание подтверждения поднимает точность системы с 65% до 67–69%, а маленькая прибавка точности даёт большую разницу в P&L. Это общая цифра из интервью. Отдельного теста W-дна автор не показывал, графиков в открытой части выпуска нет.
Правила
Структура паттерна, подтверждение как принцип и chandelier от минимума названы автором. Период полос, поиск минимумов, допуски, критерий подтверждения и параметры chandelier в видео не прозвучали, их задали мы.
Полосы и %b
Mid = SMA(Close, 20) // Finetiq: стандартные 20 и 2, в видео не названы
Upper = Mid + 2 * StdDev(Close, 20) // генеральное стандартное отклонение
Lower = Mid - 2 * StdDev(Close, 20)
PctB = (Close - Lower) / (Upper - Lower) // автор: 1 у верхней полосы, 0 у нижней, 0.5 у средней
ATR14 = ATR(14) // Finetiq: для допусков
Свинг-минимум (Finetiq)
// бар, который был i баров назад, считается свинг-минимумом, если
Low[i] < Low[i+1], Low[i+2], Low[i+3] // ниже трёх баров слева
AND Low[i] <= Low[i-1], Low[i-2], Low[i-3] // не выше трёх баров справа
// о минимуме узнаём только через 3 бара после него, раньше в расчёт не берём
// в момент подтверждения запоминаем цену минимума, номер бара и Lower на том баре
W-дно: alert
L1 = предпоследний подтверждённый свинг-минимум
L2 = последний подтверждённый свинг-минимум
Peak = Highest(High) между L1 и L2
Cond1 = L1.Low < L1.Lower // автор: первый минимум снаружи нижней полосы
Cond2 = L2.Low >= L2.Lower // автор: второй минимум внутри полосы
Cond3 = abs(L2.Low - L1.Low) <= 1.0 * ATR14 // Finetiq: «ретест» ценового минимума
Cond4 = BarsBetween(L1, L2) >= 4 AND <= 40 // Finetiq
Cond5 = Peak - max(L1.Low, L2.Low) >= 1.0 * ATR14 // Finetiq: между минимумами был отскок
WAlert = Cond1 AND Cond2 AND Cond3 AND Cond4 AND Cond5
// Finetiq: с полосой сравниваем минимум бара.
// Вариант для проверки: закрытие, то есть PctB < 0 на L1 и PctB >= 0 на L2
Подтверждение и вход (Finetiq)
PatternLow = min(L1.Low, L2.Low)
// после WAlert ждём не больше 10 баров
IF Close > Peak AND MarketPosition == 0
BUY AT NEXT BAR OPEN // Finetiq: W достроено, ралли пошло
IF Low < PatternLow THEN CANCEL WAlert // паттерн сломан
IF прошло 10 баров без подтверждения THEN CANCEL WAlert
Стоп: chandelier от минимума
// автор: chandelier-стоп от минимума паттерна.
// Finetiq: максимум для chandelier отсчитываем с бара L2, числа стартовые
Chandelier = Highest(High, с бара L2 по текущий) - 3 * ATR(22)
StopLevel = max(StopLevel[1], Chandelier) // стоп только поднимается
EXIT STOP at StopLevel
// цели нет: автор даёт сделке развиваться
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Полосы | SMA 20 ± 2 стандартных отклонения | Finetiq |
| Первый минимум | Low ниже нижней полосы | автор (сравнение по Low: Finetiq) |
| Второй минимум | Low не ниже нижней полосы | автор (сравнение по Low: Finetiq) |
| Свинг-минимум | 3 бара слева и 3 справа | Finetiq |
| Допуск ретеста | 1 × ATR(14) | Finetiq |
| Расстояние между минимумами | 4–40 баров | Finetiq |
| Минимальный отскок | 1 × ATR(14) | Finetiq |
| Подтверждение | закрытие выше максимума между минимумами | Finetiq (принцип: автор) |
| Ожидание подтверждения | 10 баров | Finetiq |
| Стоп | chandelier от минимума | автор |
| Параметры chandelier | ATR 22 × 3, максимум с бара L2 | Finetiq |
| Цель | нет | автор |
Что проверить
- Сколько даёт подтверждение. Три прогона: вход на следующем баре после
WAlert, вход после закрытия вышеPeak, вход после закрытия выше средней полосы. Автор обещает прибавку точности на 2–4 пункта. Смотрите и на ожидание сделки: подтверждение повышает процент прибыльных, но входит выше. - Окрестность по методу самого автора. Автор гоняет среднюю 16–24 вместо 20 и выбрасывает систему, если результаты заметно различаются. Сделайте так же: период полос 16–24, множитель 1.8–2.2, свинг 2–5 баров, допуск ретеста 0.5–1.5 ATR.
- Минимум или закрытие. Условия относительно полосы по
Lowпротив условий поPctBзакрытия. Определение в видео допускает оба прочтения. - Нужен ли второй минимум. Базовая линия без W: закрытие вернулось внутрь полосы после закрытия за ней, тот же вход и стоп. Если W не лучше, двойное дно ничего не добавляет к простому возврату внутрь полос.
- Выход. Chandelier 2.5, 3 и 3.5 ATR против двух других трактовок: начальный стоп ровно на
PatternLowи выход на верхней полосе (PctB >= 1). Автор ведёт позицию долго, mean reversion с короткой целью может дать другой профиль сделок. - M-вершина зеркально. Первый максимум за верхней полосой, второй внутри. Автор ожидает худшего результата, это стоит подтвердить или опровергнуть на тех же бумагах.
- Много бумаг. На одной акции W-дно по таким правилам встречается редко. Прогоните 100–500 ликвидных акций и смотрите на медиану, а не на лучшие примеры.
Особенности платформ
TradingView (Pine Script)
ta.stdevпо умолчанию генеральное, как и в EasyLanguageStdDevи в MQL5iBands. Полосы на трёх платформах совпадут.ta.pivotlow(low, 3, 3)возвращает цену минимума на баре, где он подтвердился, то есть через 3 бара. Значение нижней полосы на самом минимуме берите со сдвигом:lower[3]. Рисовать метку задним числом можно, торговать нельзя.ta.atrсглаживает по Уайлдеру. В EasyLanguage и MQL5 встроенный ATR простое среднее, поэтому уровень chandelier на разных платформах разойдётся.- Стоп обновляйте каждый бар:
strategy.exit("CH", "L", stop = stopLevel), гдеstopLevelхранится вvarи только растёт.
MultiCharts и TradeStation (EasyLanguage)
AvgTrueRangeэто простое среднее TrueRange. Для совпадения с Pine считайте ATR по Уайлдеру сами:ATRw = ATRw[1] + (TrueRange - ATRw[1]) / 22.- Встроенные функции свингов тоже подтверждают минимум с задержкой на число баров справа. Значение
Lowerна баре минимума сохраните в переменную в момент подтверждения, со сдвигом на эту задержку. Sell next bar at StopLevel stopживёт один бар. Отправляйте его на каждом баре, пока есть позиция.- Если паттерн ищете на фьючерсе, помните про разницу между дневным баром с settlement и 1440-минутным баром. Касание полосы по
Lowна них может отличаться.
MetaTrader 5 (MQL5)
- Буферы
iBands: 0 средняя линия, 1 верхняя полоса, 2 нижняя. Берите значения закрытых баров. - Стандартный индикатор ZigZag перерисовывает последнее колено. Для поиска минимумов в советнике он не годится: тест увидит минимумы, которых в момент сделки ещё не было. Пишите проверку свинга сами по закрытым барам.
iATRпростое среднее TR, для совпадения с Pine считайте Уайлдера.- Стоп двигайте через изменение SL позиции на новом дневном баре и только вверх. SL задаётся ценой.
Где идея может сломаться
- От автора в видео две фразы об этом паттерне. Правил поиска минимумов, подтверждения и параметров стопа он не назвал. Наша формализация может отличаться от того, как он торгует на самом деле.
- Прибавка точности с 65% до 67–69% относится к подтверждению вообще. Для W-дна по нашим правилам её никто не мерил.
- У автора есть эвристика: система из двух-трёх строк скорее хорошая, из 150 строк почти наверняка плохая. Формализация W-дна тянет за собой пять допусков. Каждый из них лишний шанс подогнать результат, поэтому проверка окрестности обязательна.
- Паттерн редкий. На одной бумаге за десять лет наберётся мало сделок, и выводы по ней ненадёжны. Нужна вселенная акций и портфельный тест, которого нет в Pine.
- В том же интервью автор пересказывает Ларри Уильямса: стопы ломают торговые системы. Узкий chandelier на откате после W может выбивать сделки до того, как ралли разовьётся.
- Разворот от нижней полосы в долгом медвежьем рынке может оказаться паузой. Автор торгует среднесрочно и опирается ещё на индикаторы ширины рынка, которых в этих правилах нет.