Идея коротко
Rob Hanna больше двадцати лет исследует краткосрочное поведение американского рынка и ведёт рассылку Quantifiable Edges. Одна из его тем сезонность: дни недели, праздники, дни отчёта по занятости и дни решений ФРС.
По его исследованиям день публикации решения FOMC в среднем бычий. Сильнее всего эффект, когда перед решением на рынке был страх: индекс закрылся на 3-, 5- или 10-дневном минимуме или у самого низа дневного диапазона. Если перед решением рынок разогнался и закрылся на 20-дневном максимуме, эффекта почти нет.
Вторая часть находки касается времени. Основная прибыль набирается от закрытия накануне до 14:00 ET, когда выходит решение. После публикации рынок может резко пойти в любую сторону, но на длинной истории в среднем стоит на месте. Отсюда правило: покупка на закрытии накануне и выход до публикации.
Инструмент в этом месте интервью Hanna не называет. Свои модели он строит на исследованиях S&P 500 и NASDAQ, поэтому ниже взят S&P 500: фьючерс ES, SPY или CFD.
Почему это может работать
Объяснение автора связано с поведением самой ФРС. Много лет она считала своей задачей гасить панику: успокаивать рынок, обещать снижение ставок. И наоборот, остужать слишком сильный рынок. Часть участников продаёт накануне, потому что не хочет держать позицию через объявление. Если ФРС склонна успокаивать, эта скидка отыгрывается ещё до публикации. Ведущий добавляет, что к моменту объявления информированные участники уже сторговали, и Hanna соглашается.
Цифр в интервью нет. Hanna говорит, что несколько раз писал об этом в блоге. Мы блог не проверяли, поэтому сила эффекта и его устойчивость здесь не подтверждены.
Правила
Календарь событий
Даты решений FOMC не вычисляются по формуле, их задают списком. Источник: официальный сайт ФРС, страница календаря заседаний (federalreserve.gov/monetarypolicy/fomccalendars.htm) и архив материалов по годам (federalreserve.gov/monetarypolicy/fomc_historical_year.htm). Плановых заседаний восемь в год, большинство двухдневные, решение публикуется во второй день. Внеплановые решения в архиве тоже есть, их нужно отметить отдельно.
FedDays = [даты публикации решений по плановым заседаниям, из архива ФРС]
// Finetiq: внеплановые решения исключаем, проверить отдельно
PreFedDay = последний торговый день перед FedDay
AnnounceET = 14:00 ET // автор: «2 PM»
// Finetiq: для старых лет время публикации сверять по пресс-релизу в архиве,
// за историю оно менялось
Фильтр страха
// дневные бары S&P 500, расчёт на закрытии PreFedDay
Fear3 = Close <= Lowest(Close, 3) // автор: закрытие на 3-дневном минимуме
Fear5 = Close <= Lowest(Close, 5) // автор: 5-дневный
Fear10 = Close <= Lowest(Close, 10) // автор: 10-дневный
// Finetiq: минимум по закрытиям, текущий бар входит в окно.
// Вариант: Close < Lowest(Low, N)[1]
RangePos = (Close - Low) / (High - Low)
LowInRange = RangePos <= 0.25 // автор: «у низа диапазона дня»; Finetiq: порог 25%
Fear = Fear3 OR LowInRange
// Finetiq: закрытие на 5- или 10-дневном минимуме всегда и на 3-дневном,
// поэтому Fear3 уже включает остальные. Автор перечисляет их как разные
// способы разметки, тестировать каждый отдельно
RunUp = Close >= Highest(Close, 20) // автор: закрытие на 20-дневном максимуме, эффекта почти нет
Вход и выход
IF Date = PreFedDay AND Fear AND NOT RunUp
BUY AT CLOSE // автор: отсчёт от закрытия дня накануне
// Finetiq: на практике ордер на закрытие или покупка за 5 минут до конца сессии
IF Date = FedDay AND Time >= 13:55 ET // Finetiq: начало последнего 5-минутного бара до публикации
EXIT AT MARKET // автор: выйти до 14:00
// стоп-лосса у автора нет, удержание меньше суток
// Finetiq: вариант для проверки, StopLoss = EntryPrice - 1.5 * ATR(14) дневного
Контрольные группы (Finetiq)
Эти правила не для торговли. Они показывают, откуда берётся результат.
AllFed = каждый PreFedDay без фильтров, тот же вход и выход
RunUpFed = только PreFedDay с RunUp
FearOnly = Fear AND NOT RunUp в обычные дни без решения ФРС,
выход на следующий день в 13:55 ET
Параметры
| Параметр | Значение | Откуда |
|---|---|---|
| Событие | решения по плановым заседаниям FOMC | автор |
| Инструмент | S&P 500: ES, SPY, CFD | Finetiq (автор исследует S&P 500 и NASDAQ) |
| Вход | закрытие последнего торгового дня перед решением | автор |
| Страх: минимум закрытий | 3, 5 или 10 дней | автор |
| Страх: низ диапазона дня | нижние 25% | автор (порог Finetiq) |
| Запрет входа | закрытие на 20-дневном максимуме | автор |
| Выход | до 14:00 ET, бар 13:55 ET | автор (минута Finetiq) |
| Стоп | нет, вариант 1.5 × ATR(14) | Finetiq |
| Внеплановые решения | исключить | Finetiq |
Что проверить
- Три группы дней ФРС. Все решения, решения после страха и решения после закрытия на 20-дневном максимуме. Hanna утверждает, что результат убывает именно в таком порядке: страх, все дни, разгон. Если разница между группами в пределах разброса, фильтр ничего не добавляет.
- Какой страх. 3-, 5-, 10-дневный минимум и низ диапазона по отдельности. Смотрите не только на среднюю сделку, но и на число событий: чем строже фильтр, тем меньше дат.
- ФРС или обычный откат. Тот же фильтр страха в обычные дни с выходом на следующий день в 13:55 ET. Покупка краткосрочного минимума S&P 500 сама по себе часто даёт отскок. Эффект ФРС это разница между днями решений и обычными днями, а не весь результат дней решений.
- Время выхода. 13:55 ET против закрытия дня решения. Если выход в 16:00 не хуже, заявление о том, что после публикации рынок стоит на месте, на ваших данных не подтверждается.
- Время входа. Закрытие накануне против открытия дня решения. У фьючерса и CFD ночь торгуется, и часть результата может приходиться на ночной ход.
- Периоды. Отдельно годы снижения и годы повышения ставок, например 2022. Объяснение автора опирается на то, как ФРС вела себя много лет. Если поведение изменилось, эффект мог ослабнуть.
Особенности платформ
TradingView (Pine Script)
- Календаря событий нет. Даты храните массивом меток времени, по одной на решение из архива ФРС:
array.from(timestamp("America/New_York", год, месяц, день, 14, 0), ...). - Правило требует двух таймфреймов: фильтр по дневному закрытию и выход в 13:55 ET. На 5-минутном графике закрытие последнего бара сессии и есть дневное закрытие. Минимумы закрытий за 3-20 дней удобнее копить самим.
- Покупка на закрытии требует
process_orders_on_close = true. По умолчанию ордер с последнего бара дня исполнится на открытии следующей сессии, то есть уже в день решения. Это другой вариант правила. - Внутридневная история ограничена тарифом. На 5-минутных барах может поместиться несколько лет, то есть пара десятков решений.
- У ES сессия начинается в 18:00 ET предыдущего дня. Диапазон дня и закрытие по фьючерсной и по кэш-сессии разные. Выберите одно и держите во всех прогонах.
MultiCharts и TradeStation (EasyLanguage)
- Даты храните массивом и сравнивайте с
Date. В EasyLanguage дата записана числом YYYMMDD с годом от 1900: 15 марта 2024 года это1240315. - Если считать фильтр по дневному ряду
Data2, помните: пока идёт сессия, дневной бар не закрыт, иClose of Data2в 15:55 показывает вчерашний день. Минимум, максимум и закрытие текущей сессии считайте по внутридневным барам. Timeэто время закрытия бара. Бар 13:50-13:55 имеетTime = 1355, иIf Date = FedDate and Time >= 1355 then Sell next bar at marketисполнится на открытии в 13:55.- В TradeStation дневной бар фьючерса закрывается по settlement, а не по последней сделке. Фильтр по дневным закрытиям и по закрытию внутридневных баров может отобрать разные даты.
MetaTrader 5 (MQL5)
- Даты задавайте массивом
datetimeво времени ET и переводите в серверное время брокера с учётом летнего времени обеих сторон. В тестереTimeGMT()равен серверному времени и не помогает. - Функции экономического календаря в MQL5 есть, но для теста на истории даты надёжнее зашить массивом.
- Дневной бар CFD на S&P 500 строится по серверному времени и включает часы после 16:00 ET. Закрытие на 5-дневном минимуме по такому бару и по кэш-индексу может не совпасть. Дневные закрытия на 16:00 ET считайте сами по внутридневным барам.
- Позиция переносится через ночь, у CFD это своп. Спред проверяйте именно в минуты входа и выхода.
Где идея может сломаться
- Событий мало. Восемь плановых решений в год, после фильтра страха в разы меньше. Даже за 20 лет выборка небольшая, и один-два сильных дня могут сделать весь результат.
- В интервью нет ни одной цифры. Эффект описан словами, проверить его можно только самостоятельно.
- Объяснение опирается на привычки ФРС. Смена руководства, цикл повышения ставок или новый формат коммуникации могут изменить реакцию рынка.
- Фильтр страха сам по себе отбирает краткосрочные откаты S&P 500, которые часто отскакивают и без ФРС. Без контрольной группы легко приписать ФРС обычный возврат к среднему.
- Ошибка в календаре ломает тест целиком. Перепутанный день двухдневного заседания или неверное время публикации для старых лет сдвигают вход и выход.