Идея коротко
Полосы Боллинджера строятся на стандартном отклонении закрытий и поэтому быстро сужаются, когда рынок затихает. Сквизом называют момент, когда полосы стали очень узкими. Обычно его ищут на глаз. У самого Джона Боллинджера есть точное определение: bandwidth, расстояние между полосами, делённое на среднюю линию, опустилось до минимума за 125 периодов. Он называет это правило нерушимым и говорит, что его команда торгует сквиз часто.
Сквиз описывает состояние, а не сделку. Боллинджер не сказал, в какую сторону входить и где выходить. В этой карточке эти правила формализованы нами и помечены. Вариант B: классический подход, который Боллинджер упоминает сам (полосы Боллинджера целиком внутри канала Кельтнера). Вариант C: недельный TTM Squeeze для акций-лидеров из видео Financial Wisdom, где правила пробоя уже названы.
Почему это может работать
Боллинджер объясняет живучесть полос тем, что они опираются на первый принцип рынка, волатильность. Волатильность сама меняется: периоды затишья сменяются расширением. Минимум ширины полос за полгода дневок отмечает место, где затишье дошло до края своей недавней истории, и расширение становится вероятнее.
Сравнение с каналом Кельтнера добавляет вторую меру. Кельтнер строится на ATR, то есть на типичном диапазоне бара, и меняется медленнее. Когда полосы Боллинджера ушли внутрь Кельтнера, разброс закрытий сжался сильнее, чем обычный размах баров. Автор Financial Wisdom описывает это как накопление энергии: чем сильнее был рост до консолидации, тем мощнее, по его мнению, выход из неё.
Что расширение волатильности после сквиза даёт прибыль в конкретную сторону, никто из авторов не показал. Направление приходится задавать отдельным правилом.
Правила
Сквиз (автор)
Mid = SMA(Close, 20)
SD = StdDev(Close, 20) // генеральное стандартное отклонение
Upper = Mid + 2 * SD
Lower = Mid - 2 * SD
// Finetiq: длина 20 и множитель 2. Параметры своих полос Боллинджер в интервью внятно не назвал
BandWidth = (Upper - Lower) / Mid // автор
Squeeze = BandWidth <= Lowest(BandWidth, 125) // автор: 125-периодный минимум
// Finetiq: текущий бар входит в окно из 125 баров
Вход и выход после сквиза (Finetiq)
// Боллинджер не назвал направление и триггер пробоя. Всё в этом блоке наша формализация
Armed = Squeeze хотя бы на одном из последних 10 баров // Finetiq
IF Armed AND Close > Upper THEN BUY AT NEXT BAR OPEN // Finetiq: закрытие за полосой
IF Armed AND Close < Lower THEN SELL SHORT AT NEXT BAR OPEN
Long: StopLoss = Lower на баре сигнала // Finetiq: противоположная полоса
IF Close < Mid THEN EXIT AT NEXT BAR OPEN // Finetiq: возврат к средней
Short: StopLoss = Upper на баре сигнала
IF Close > Mid THEN EXIT AT NEXT BAR OPEN
// после выхода новый вход только после нового сквиза // Finetiq
Вариант B. Полосы внутри Кельтнера (Боллинджер)
KC_Mid = EMA(Close, 20) // автор: EMA 20 или 21
KC_Up = KC_Mid + 2 * ATR(20) // автор: 2 ATR; Finetiq: период ATR 20, по Уайлдеру
KC_Low = KC_Mid - 2 * ATR(20)
InsideKC = Upper < KC_Up AND Lower > KC_Low // автор: обе полосы Боллинджера внутри Кельтнера
// автор: дальше «искать волатильностный пробой», триггер не назван
Fired = InsideKC[1] AND NOT InsideKC // Finetiq: первый бар выхода из сжатия
Armed = Fired хотя бы на одном из последних 5 баров // Finetiq
// вход, стоп и выход как в основной версии
Вариант C. Недельный TTM Squeeze (Financial Wisdom)
// недельные бары, акции из отбора (см. ниже)
// BB и Кельтнер как в варианте B, множитель Кельтнера 1.5 (строже, реже 5% времени) или 2.0 (автор)
// Finetiq: длины 20; автор использует готовый индикатор TradingView, где их можно менять
SqueezeWeeks = число недель InsideKC за последние 8 недель
Setup = SqueezeWeeks >= 3 // автор: «несколько красных точек»; Finetiq: 3 из 8
Pivot = Highest(High, 8)[1] // автор: максимум консолидации (у чашки с ручкой максимум ручки)
// Finetiq: 8 недель
IF Setup
BUY STOP at Pivot LIMIT Pivot * 1.05 // автор: не дальше 5% за пивотом
// автор: пробой должен подтвердиться объёмом
IF Volume недели пробоя < 1.5 * Average(Volume, 10)[1] // Finetiq: порог 1.5×
EXIT AT NEXT BAR OPEN
StopLoss = Low недели пробоя или ближайший свинг-минимум // автор
// автор: при широком стопе (пример Robinhood, 11%) уменьшать размер позиции
IF Close < SMA(Close, 10) THEN EXIT AT NEXT BAR OPEN // Finetiq: автор выход не назвал
// Отбор бумаг (автор): отдельное правило по всей вселенной
// капитализация от $2 млрд, сортировка по доходности за год, 30 лучших,
// либо акции из trend template с RS от 90. Сигнал выше считается на каждой бумаге отдельно
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Полосы Боллинджера | SMA 20, 2 стандартных отклонения | Finetiq |
| Bandwidth | (Upper − Lower) / Mid | автор |
| Окно минимума | 125 баров | автор |
| Сквиз «действует» | 10 баров | Finetiq |
| Триггер | закрытие за полосой | Finetiq |
| Стоп | противоположная полоса на баре сигнала | Finetiq |
| Выход | закрытие по другую сторону средней | Finetiq |
| Кельтнер | EMA 20-21, 2 ATR | автор |
| Период ATR | 20, по Уайлдеру | Finetiq |
| Вариант C: множитель Кельтнера | 1.5 или 2.0 | автор |
| Вариант C: таймфрейм | неделя | автор |
| Вариант C: сетап | 3 недели сквиза из 8 | Finetiq |
| Вариант C: пивот | максимум за 8 недель | Finetiq |
| Вариант C: максимум входа | пивот + 5% | автор |
| Вариант C: объём | 1.5× средней за 10 недель | Finetiq |
| Вариант C: стоп | минимум недели пробоя или свинг-минимум | автор |
| Вариант C: выход | закрытие ниже SMA 10 недель | Finetiq |
| Вариант C: отбор | от $2 млрд, 30 лучших за год | автор |
Что проверить
- Предсказывает ли сквиз расширение. Посчитайте средний ATR(10) и модуль изменения цены за 10 баров после сквиза и после случайных дней. Если после сквиза волатильность не растёт заметнее, пробойные правила поверх него не имеют опоры.
- Сквиз как фильтр пробоя. Одна и та же сделка на закрытии за полосой: только после сквиза против любого закрытия за полосой. Это прямая проверка, добавляет ли определение Боллинджера что-то к пробою полосы.
- Окрестность параметров по методу Боллинджера. Он сам проверяет соседние значения (для средней 20 это 16-24) и выбрасывает систему, если результаты не похожи. Прогоните окно минимума 100, 110, 125, 140, 150 и длину полос 16-24.
- Триггер направления. Закрытие за полосой против стоп-ордеров за максимумом и минимумом периода сквиза и против входа только по тренду (цена выше SMA 50 для покупок). Это самая слабая часть карточки, у автора её нет.
- Два определения сжатия. Как часто совпадают 125-периодный минимум bandwidth и полосы внутри Кельтнера при множителе 1.5 и 2.0. Проверьте утверждение Financial Wisdom про 5% времени на своих рынках.
- Дневки против недель, акции против фьючерсов. Сквиз на спокойных рынках (облигации, валюты) и на акциях ведёт себя по-разному. Смотрите результат по каждому классу отдельно.
- Ложные пробои. Доля сделок, закрытых стопом в первые 5 баров. Если она высокая, попробуйте вход на повторном закрытии за полосой.
Особенности платформ
TradingView (Pine Script)
ta.stdevпо умолчанию генеральное, какStdDevв EasyLanguage иiBandsв MT5. Ширина полос на трёх платформах совпадёт.- Bandwidth и минимум проще посчитать самим:
bw = (upper - lower) / basis,squeeze = bw <= ta.lowest(bw, 125). - Кельтнер для варианта B соберите сами:
ta.ema(close, 20)плюс-минус2 * ta.atr(20). Уta.kcсвоя реализация, и частота сжатия с ней может разойтись с источником. - Недельному варианту C нужна история на разогрев средних (20 недель) и окно сквиза в 8 недель. Если проверять на неделях 125-периодный минимум из основной версии, нужно ещё 125 недель, около 2.5 лет. Глубина истории зависит от тарифа. Стоп-лимит на пивоте:
strategy.entryсstop = pivotиlimit = pivot * 1.05.
MultiCharts и TradeStation (EasyLanguage)
- Для полос берите
StdDev(генеральное).StdDevSвыборочное: полосы получатся шире, и минимумы ширины сдвинутся. Lowest(BW, 125)включает текущий бар, как в правилах. Ширину храните в переменной, иначе функция будет пересчитывать полосы на каждом шаге окна.AvgTrueRangeэто простое среднее TR. Кельтнер на нём уже или шире, чем на ATR Уайлдера, и сжатие в варианте B будет случаться с другой частотой. Для совпадения с Pine считайте ATR по Уайлдеру вручную.Buy next bar at Pivot stopживёт один бар. На недельном графике отправляйте ордер каждую неделю, лимит 5% эмулируйте проверкой открытия.
MetaTrader 5 (MQL5)
iBandsдаёт полосы на генеральном отклонении, bandwidth считается из буферов вручную.- Встроенного Кельтнера нет:
iMAв режиме EMA плюс ATR.iATRэто простое среднее TR, для совпадения с Pine нужен Уайлдер. - Короткие воскресные бары на D1 у части брокеров добавляют лишние закрытия в окна 20 и 125. Ширина полос и её минимум от этого искажаются.
- Недельный вариант на CFD акций упирается в историю брокера и в объём: у CFD только тиковый объём, и подтверждение пробоя по нему приблизительное.
Где идея может сломаться
- Боллинджер дал определение сквиза, но не систему. Направление, стоп и выход наши. Если результат плохой, это может быть слабость нашей формализации, а не сквиза.
- Параметры полос в транскрипте не прозвучали разборчиво. Мы взяли стандартные 20 и 2, у Боллинджера могли быть другие.
- Затишье может длиться долго. В спокойных трендах ширина полос снижается постепенно, и сквизы идут сериями без последующего расширения.
- Примеры Financial Wisdom подобраны задним числом, все победители, статистики нет. Недельный вариант опирается на отбор 30 лучших акций и RS от 90, чего нет в Pine и MT5.
- Реализации Кельтнера различаются между платформами. Частота сжатия и набор сделок в варианте B могут не совпасть даже на одних данных.