Идея коротко
Фильтр смотрит не на цену индекса, а на то, сколько акций внутри него растёт. Мера простая: доля бумаг индекса, которые закрылись выше своей скользящей средней. Jack Corsellis считает её на трёх длинах: 20 дней (короткий прилив), 50 и 200 дней, для S&P 500, NASDAQ-100 и NASDAQ Composite. В TradingView это готовые ряды, например NCTW для NASDAQ Composite и 20-дневной средней.
Пороги у автора одни для всех длин. Выше 75% рынок перекуплен, прилив зашёл далеко. Ниже 25% перепродан, прилив ушёл. Значения от высоких 80% до 90% и выше Джек считает крайностью: давить на свинг-лонги в это время он не хочет, но и прямого запрета не называет. Для свинг-трейдера в лонг это значит: активнее набирать лидеров, когда ширина в перепроданности или выходит из неё, и сбавлять риск, когда перекуплено всё сразу. Отдельный сигнал это дивергенция: индекс обновляет максимум, а ширина нет.
Почему это может работать
Джек называет рынок машиной возврата к среднему. Большинство акций идут за индексом. Когда почти все бумаги уже выше своих средних, у рынка мало места для дальнейшего роста, и следующее важное движение, по мнению автора, скорее вниз. Когда почти все ниже, зона обратная. Лидеры, которые держались во время отлива, первыми растут, когда прилив возвращается, и позиция в них получает рынок на своей стороне.
Дивергенция объясняется участием. Если индекс растёт на всё меньшем числе бумаг, основание рынка слабеет раньше, чем это видно по цене. Джек сравнивает это с лавиной: сначала подтачивается слой под снегом, поверхность двигается последней.
Автор несколько раз повторяет, что это не грааль. Перекупленность может держаться долго, перепроданность тоже. Статистики в видео нет, только эпизоды на графиках.
Отличие от index-ema-regime: там фильтр по тренду цены индекса, он запрещает покупки в падении. Ширина работает почти наоборот: подталкивает к покупкам, когда большинство бумаг уже упало, и тормозит в сильном росте. От follow-through-day отличие в данных: день подтверждения смотрит только на индекс и его объём. Фильтры могут противоречить друг другу, это нужно проверять.
Правила
Данные и зоны (автор, порог крайности Finetiq)
// дневные значения для S&P 500, NASDAQ-100, NASDAQ Composite
B20 = доля акций индекса с Close > MA(Close, 20), %
B50 = доля с Close > MA(Close, 50), %
B200 = доля с Close > MA(Close, 200), %
// автор: готовые ряды TradingView; в видео названы NCTW, S5TW, NDFI
// Finetiq: тип средней внутри ряда задаёт поставщик данных
Overbought(B) = B > 75 // автор
Oversold(B) = B < 25 // автор
Extreme(B) = B >= 90 // Finetiq: порог; у автора крайность уже от высоких 80%, без прямого запрета
Дивергенция (автор, пороги Finetiq)
IndexHigh = Close of Index >= Highest(Close of Index, 60) // Finetiq: 60-дневный максимум
PrevPeakB = B50 на прошлом 60-дневном максимуме индекса, не ближе 20 дней // Finetiq
NegDiv = IndexHigh AND B50 < PrevPeakB - 5 // автор: индекс выше, ширина ниже
// Finetiq: разрыв 5 пунктов
// автор: на длинном горизонте тот же приём по B200
IndexLow = Close of Index <= Lowest(Close of Index, 60)
PosDiv = IndexLow AND B50 > (B50 на прошлом 60-дневном минимуме) + 5 // автор: позитивная дивергенция
// Finetiq: NegDiv и PosDiv считаются до блока режима и входят в него ниже
Режим для новых лонгов (автор словами, числа Finetiq)
// значения прошлого закрытого дня
// Finetiq: блок считается последним, после дивергенции и осциллятора Макклеллана (вариант B)
AllOB = Overbought(B20) AND Overbought(B50) AND Overbought(B200)
AllOS = Oversold(B20) AND Oversold(B50) AND Oversold(B200)
TideOut = Oversold(B20) хотя бы на одном из последних 10 дней // Finetiq: окно 10
OR PosDiv // Finetiq: позитивная дивергенция тоже отлив
OR McOS // вариант B; без него McOS = FALSE
TideIn = Overbought(B20) OR Overbought(B50)
// автор: в первую очередь смотрит 20 и 50 дней, 200 держит в уме
// условия проверяются сверху вниз, последнее сработавшее побеждает
RiskMult = 1.0 // Finetiq: база
IF TideOut THEN RiskMult = 1.5 // автор: активнее набирать лидеров; Finetiq: 1.5
IF TideIn THEN RiskMult = 0.5 // автор: торговать меньше, сбавить газ
IF NegDiv THEN RiskMult = MIN(RiskMult, 0.5) // Finetiq: негативная дивергенция
IF AllOB OR Extreme(B20) OR Extreme(B50) THEN RiskMult = 0 // автор: при высоких 80-90% не время давить на свинг-лонги
// Finetiq: 0.5 уже от 75%, полный запрет новых входов от 90%
// или когда перекуплено всё; запрет строже слов автора
// Finetiq: 1.5 касается риска на сделку, общий лимит риска портфеля не меняется
Открытые позиции (автор словами, правило Finetiq)
// автор: в перекупленности не выходит сразу, но придаёт больший вес закрытиям под EMA 10 и 21
IF AllOB
трейлинг позиции: закрытие ниже EMA(Close, 10) // Finetiq
// автор: в общей перепроданности готов держать лидера дольше, «от 50-дневной до 50-дневной»
IF AllOS в день входа
трейлинг позиции: закрытие ниже SMA(Close, 50) // Finetiq
Вариант B. Осциллятор Макклеллана (автор, без чисел)
Джек использует его как дополнение к ширине, в основном по перепроданности. Формулу он предлагает найти самостоятельно и описывает осциллятор через новые максимумы и минимумы. Стандартный осциллятор строится на разнице растущих и падающих акций. Порогов в видео нет.
NetAdv = число растущих - число падающих акций за день
McClellan = EMA(NetAdv, 19) - EMA(NetAdv, 39) // сообщество: стандартная формула
McOS = McClellan <= 10-й перцентиль за последние 250 дней // Finetiq: порог
// автор: осциллятор усиливает сигнал на покупку; Finetiq: McOS входит в TideOut в блоке режима
Подключение к карточкам базы (Finetiq)
// пример 1: qullamaggie-breakout (пробой, риск 0.3-0.5%)
RiskMoney = Equity * 0.5% * RiskMult // вход и стоп карточки не меняются
IF RiskMult = 0 THEN новые входы запрещены
// медленные бумаги там ведутся по EMA 20: при AllOB переключить их на EMA 10
// пример 2: five-day-low-mr (покупка 5-дневного минимума)
IF FiveDayLow AND MarketOK AND TideOut AND NOT InPosition // MR-вход только при отливе
BUY AT NEXT BAR OPEN
// сравнить с фильтром карточки без ширины и с запретом входов только при AllOB
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Индексы | S&P 500, NASDAQ-100, NASDAQ Composite | автор |
| Длины средних | 20, 50, 200 дней | автор |
| Перекупленность | выше 75% | автор |
| Перепроданность | ниже 25% | автор |
| Крайность | 90% и выше (у автора уже от высоких 80%) | Finetiq |
| Окно недавнего отлива | 10 дней | Finetiq |
| Множитель риска при отливе | 1.5 | Finetiq |
| Множитель при перекупленности | 0.5 | Finetiq |
| Запрет новых лонгов | всё перекуплено или крайность по 20 или 50 дням | Finetiq |
| Дивергенция | 60-дневный экстремум индекса, разрыв 5 пунктов | Finetiq |
| Трейлинг при общей перекупленности | EMA 10 | Finetiq |
| Трейлинг при общей перепроданности в день входа | SMA 50 | Finetiq |
| Осциллятор Макклеллана | EMA 19 и 39 от разницы растущих и падающих | сообщество |
| Перепроданность осциллятора | 10-й перцентиль за 250 дней | Finetiq |
Что проверить
- Есть ли возврат к среднему. Посчитайте доходность индекса через 10, 20 и 40 дней после входа B20 в зону ниже 25% и выше 75%. Сравните со всеми днями. Это главное утверждение автора, и оно проверяется без стратегии.
- Множитель против запрета. Одна пробойная стратегия с тремя версиями фильтра: без ширины, только запрет входов при AllOB, полная шкала 1.5, 1.0, 0.5, 0. Смотрите на просадку и число пропущенных сильных сделок.
- Окрестность порогов. 70 и 30, 75 и 25, 80 и 20; крайность 85 и 90; окно отлива 5, 10, 20 дней. Если результат держится только на 75 и 25, фильтр подогнан.
- Длина средней. Фильтр только по B20, только по B50 и по сочетанию. Автор сам говорит, что короткий и длинный приливы могут показывать разное.
- Конфликт с фильтром тренда. Совместите с
index-ema-regimeи разметьте сделки по четырём сочетаниям: тренд да или нет, отлив да или нет. Особенно интересны покупки при отливе в падающем рынке. - Дивергенция. Сколько раз NegDiv появлялась перед падением индекса на 10% и больше и сколько раз без него. Запомнившиеся эпизоды ничего не доказывают.
- Какой индекс. Ширина S&P 500 против NASDAQ Composite для акций NASDAQ. Во втором индексе около 3000 бумаг, много мелких, и его ширина ведёт себя иначе.
Особенности платформ
TradingView (Pine Script)
- Ряды ширины есть готовыми: в видео названы NCTW, S5TW и NDFI. Ряды для других длин идут по той же схеме (например, S5FI и S5TH для S&P 500), символы сверьте в поиске.
- Читайте их через
request.security(sym, "D", close[1], lookahead = barmerge.lookahead_on). Значение за день становится известно только после закрытия всех акций индекса. - Глубина истории у рядов ширины разная. Проверьте, с какого года ряд начинается, прежде чем тестировать 200-дневную версию.
- Стратегия торгует только символ графика. Фильтр для корзины акций проверяется по одной бумаге, множитель риска передаётся через
qtyвstrategy.entry.
MultiCharts и TradeStation (EasyLanguage)
- Готовый ряд доли акций выше средней должен быть у поставщика данных отдельным символом, тогда он подключается вторым потоком (
Close of Data2). Если его нет, ряд импортируется извне или считается самостоятельно. - Самостоятельный расчёт делается в портфельном модуле по всем бумагам индекса. Нужен исторический состав индекса на каждую дату: сегодняшний список даст ошибку выжившего, и ширина в прошлом получится выше реальной.
- Для осциллятора Макклеллана нужны числа растущих и падающих акций. Если их нет в данных, они строятся так же по составу индекса.
- Фильтр берите по значению прошлого дня, даже если стратегия работает на внутридневных барах.
MetaTrader 5 (MQL5)
- Рядов ширины в MT5 нет. Долю можно посчитать только по CFD на акции, которые есть у брокера: обычно несколько сотен крупных бумаг вместо полного состава индекса.
- История дневных баров CFD на акции короткая, а доля выше 200-дневной требует 200 баров разогрева по каждой бумаге.
- Дневные бары разных CFD закрываются по серверному времени брокера. Проверьте, что доля считается по одной дате для всех символов.
- Состав индекса брокер не хранит. Ширина на MT5 это приближение, и пороги 25 и 75 на нём могут не работать.
Где идея может сломаться
- Статистики нет. Все эпизоды показаны задним числом, и автор сам предупреждает, что зоны могут держаться долго.
- Правила применения автор дал словами: активнее, меньше, сбавить газ. Множители и окна наши, и результат от них зависит.
- Покупки в перепроданности означают входы на падающем рынке. В медвежьем рынке ширина может оставаться ниже 25% неделями, и ранний вход получает серию стопов.
- Готовый ряд ширины может считаться по составу индекса на каждую дату или по сегодняшнему. Способ расчёта у поставщика нужно выяснить.
- Описание осциллятора Макклеллана в видео расходится со стандартной формулой. Какой вариант смотрит сам Джек, неизвестно.
- Оба видео спонсирует один сервис Investor's Business Daily: MarketSmith, в 2024 году переименованный в MarketSurge (внешний факт, не из видео). В январском видео 2024 года спонсор ещё назван MarketSmith, в сентябрьском уже MarketSurge. В первом Джек упоминает готовые раскладки для участников своей платформы.