Стратегии
Сезонная лонг-надстройка на стыке месяцев для SPY + QQQ (USEQ, дневные бары, только лонг, держать каждый ETF только в окно конца месяца [-1,+3] при тренде выше 200-дневного, иначе в казначейских векселях, без комиссии, 3 параметр)
Итог: Отменено
TurnOfMonthSeasonalOverlaySpyQqqUseq
Сводка по итогам
Эта стратегия точно воспроизвела хорошо документированную календарную аномалию: удерживала SPY и QQQ только на стыке месяцев и только выше их долгосрочного тренда. Её бэктест выглядел достаточно чисто на данных за 33 лет (PF 1.43, доля прибыльных сделок 60%, доходность на сделку выше порога комиссий USEQ), чтобы аналитик одобрил оптимизацию. На этапе оптимизации стратегия провалилась: коэффициент Шарпа внутри выборки 0.87 упал до 0.019 вне выборки, PBO достиг 0.77, а дефлированный коэффициент Шарпа 0.020 показал, что результат статистически неотличим от шума в 225 испытаниях. Одновременно провалены три безусловные жёсткие проверки, поэтому аналитик отказался от стратегии после одной итерации. Она пополнила устойчивое семейство отвергнутых вариантов со входом на стыке месяцев, подтвердив, что эффект слишком слаб для обобщения в надстройку для торговли на реальном счёте.
Гипотеза
Переобучение без преимущества вне выборки: коэффициент Шарпа OOS в walk-forward-анализе 0.019 (< порога валидности 0.5) против IS 0.87, OOS 0.235/-0.017/-0.162 по окнам, PBO 0.77 (> 0.5), провал теста дефлированного коэффициента Шарпа: DSR=0.020, ожидаемый максимум=0.47 за 225 испытаний (43 эффективных) — выбранный коэффициент Шарпа неотличим от шума лучшего из N вариантов, не проходит программную проверку FDR (4 из 272), is_significant=false. Три проверки HARD провалены (OOS<0.5, is_overfitted, PBO>0.5), поэтому повышение статуса невозможно. Доходность на сделку превышает порог комиссий USEQ, а коэффициент Шарпа на отложенной выборке номинально положительный (0.36), однако эффект стыка месяцев слишком слаб, чтобы обобщить его до торгуемой надстройки: стратегия подогналась под шум внутри выборки. Это соответствует устойчивому провалу семейства стратегий (сезонность стыка месяцев отвергнута на QQQ, BTC, BNB и смежных трендовых вариантах USEQ); перенос того же механизма на очередной актив снова приводил к переобучению, поэтому подходящего переформулирования нет.
Реализация
Результаты верификации
При желании можно вычислять опорный последний будний день по наблюдаемым барам сессий (как уже делает _session_index), а не простым подсчётом будних дней, чтобы время входа учитывало праздники, как и выход. Не обязательно.
Время входа определяется календарной арифметикой будних дней (_weekdays_left), которая NOT моделирует US рыночные праздники, тогда как выход привязан к фактическому числу сессионных баров (_session_index) и потому устойчив к праздникам. Если праздник в конце месяца приходится на один из последних двух будних дней (например, Memorial Day), этот единственный вход сдвигается на одну сессию. Разработчик явно документирует это, и это никогда не меняет знак сделки; src/data/market_calendar.py (XNYS) существует и мог бы точнее определять вход, но текущее приближение приемлемо и не влияет на измеримость.
Изменения не нужны, если базовый шаблон вызывает переопределение подкласса для проверки прогрева (вызывает). Оставлено для сведения.
min_bars_required(self) переопределяет метод фреймворка (предупреждение статического анализа base_shadow). Здесь это сделано намеренно — метод возвращает trend_sma_days + 2 для проверки прогрева — и работает корректно, но убедись, что базовый класс учитывает переопределение, а не использует собственную реализацию.
Первичная проверка в песочнице дала пограничный результат: коэффициент Шарпа 0.107 (CI [-0.68, 0.94] пересекает ноль), avg_trade_return_pct 0.1535% (едва выше порога спреда и влияния на цену ~0.02-0.05% USEQ), PF 1.15, win_rate 0.60. Разделение по режимам неблагоприятно: прибыль сосредоточена в терциле обычной волатильности (+10.44%), тогда как в спокойном (-0.57%) и стрессовом (-4.35%) терцилях убыток; impact_cost_pct составляет 16.4% валового результата при умеренной ёмкости $3.7 млн. Это реальная, хорошо документированная календарная аномалия, и реализация ей соответствует, поэтому оправдан полный бэктест, но перед оптимизацией аналитику следует проверить, сохраняется ли доходность за окно после учёта спреда и влияния на цену на полной истории и не ограничена ли она одним режимом волатильности.
Обзор бэктеста
- Шарп
- 0,19
- Общая доходность
- 104,42%
- Максимальная просадка
- 12,25%
- Всего сделок
- 500
- Доля прибыльных
- 60,2%
- Профит-фактор
- 1,43
Точная реализация хорошо документированной календарной аномалии (стык месяцев) на полной исторической выборке за 33 лет (1993-2026), 500 сделок лонг / 0 шорт / ~28.5% экспозиции — сделки полностью соответствуют гипотезе (сезонная надстройка только в лонг, иначе средства в денежных средствах).
Преимущество с запасом покрывает издержки USEQ: avg_trade_return_pct 0.338% (намного выше порога отказа 0.05% и предпочтения >0.10%; проверку L75 проходит), profit_factor 1.43, win_rate 0.60, влияние на цену — лишь 7.9% валового результата, ёмкость около $15.9 млн.
Ключевое опасение NOT по поводу QA подтвердилось на всей истории: regime_performance положителен в ALL трёх терцилях волатильности (спокойная +5.1%, обычная +37.3%, стрессовая +35.4%, only_one_regime=false) — убытки в спокойном и стрессовом режимах были артефактом усечённой песочницы.
Низкое значение max_drawdown 12.2%, для подбора параметров сделок достаточно.
Итоговый коэффициент Шарпа низкий (0.194, CI [-0.12, 0.53] пересекает ноль), но эта надстройка большую часть времени держит средства в денежных средствах (28% времени на рынке) и оценивается по полной кривой капитала с учётом переоценки по рынку, поэтому свободные средства снижают показатель; на этапе повышения статуса оценивай качество с поправкой на риск относительно экспозиции, а не здесь.
Только CAGR 2.64% — надстройка по замыслу; капитал простаивает примерно 72% времени, поэтому есть запас для объединения или масштабирования, это не дефект.
В некоторые годы результат отрицательный (2008 -6.7%, 2022 -8.3%, 2016 -4.1%), но аномалия положительна в большинстве календарных лет.
Анализ
Точное исполнение стратегии с низким оборотом на хорошо документированной календарной аномалии (стык месяцев) на полной исторической выборке за 33 лет; сделки соответствуют гипотезе (500 лонг / 0 шорт, ~28% экспозиции, входы в сезонное окно при тренде выше собственного 200д).
Доходность на сделку превышает порог комиссий USEQ (avg_trade_return_pct оптимизировано 0.21%, порог 0.05%); резких перепадов чувствительности нет; просадка низкая (6.1%); коэффициент Шарпа на отложенной выборке формально положительный (0.36).
Поверхность чувствительности плоская и гладкая при trend_sma_days и exit_trading_day — хрупких параметров нет.
Walk-forward-анализ убедительно выявил переобучение: коэффициент Шарпа IS 0.87 против OOS 0.019, а OOS по окнам равен 0.235 / -0.017 / -0.162 — преимущество не сохраняется вне выборки.
PBO 0.77 (> 0.5) — вероятнее всего, подбор параметров привёл к переобучению.
Дефлированный коэффициент Шарпа 0.020 и PSR/is_significant=false; стратегия не проходит программную проверку FDR (сохраняются 4 из 272; p кандидата=0.98). Оптимизированный коэффициент Шарпа неотличим от шума лучшего из N вариантов среди 225 испытаний (43 эффективных).
OOS Коэффициент Шарпа 0.019 << 0.5 порога валидности — три сбоя HARD, которые нельзя отменить.
Заранее зарегистрированные прогнозы не подтвердились по важным показателям: коэффициент Шарпа OOS 0.019 против заявленного 0.9, PF 1.39 против 1.5, avg_trade_return 0.21% против 0.30%.
Исходная оценка семейства стратегий резко отрицательная: сезонность стыка месяцев неоднократно отвергалась на смежных активах (QQQ TOM fee_edge, BTC TOM fee_edge, BNB TOM другие, переобучение тренда с управлением волатильностью QQQ). Исторически аномалия реальна, но слишком слаба, чтобы покрыть издержки и статистическую поправку в торгуемой надстройке.
Метод Бенджамини — Хохберга при q=0.10 среди 272 кандидатов программы сохраняет 4. Кандидат, не прошедший эту проверку, неотличим от шума самой программы, как бы хорошо ни выглядели его отдельные статистические показатели.
Сводка по итогам
Исторически аномалия стыка месяцев реальна, но слишком слаба, чтобы покрыть издержки и поправку на множественное тестирование в торгуемой надстройке; перенос той же сезонности на очередной актив (после провалов QQQ, BTC, BNB) снова приводит к переобучению, а не к обобщаемому преимуществу.
Аналитик отказался от неё после оптимизации: три проверки валидности не пройдены (HARD коэффициент Шарпа OOS < порога 0.019 0.5, is_overfitted true, PBO 0.77 > 0.5); дефлированный коэффициент Шарпа не отличался от шума выбора лучшего результата из N на 225 испытаниях, а стратегия не прошла FDR на уровне программы, поэтому её продвижение стало невозможным.
Сезонная надстройка только в лонг на стыке месяцев держит SPY и QQQ (USEQ, дневные бары) только в окне конца месяца [-1,+3] и лишь когда каждый ETF выше собственного тренда примерно за 200 дней; в остальное время средства остаются в денежных средствах.
На полной выборке 1993-2026 стратегия совершила 500 сделок лонг с долей прибыльных 0.60, фактором прибыли 1.43, средней доходностью на сделку 0.34% (0.21% оптимизировано), CAGR 2.64% и максимальной просадкой 12.2%, но итоговый коэффициент Шарпа составил лишь 0.194 (CI пересекает ноль). Оптимизация выявила решающее переобучение: коэффициент Шарпа IS в walk-forward-анализе 0.87 против OOS 0.019 (0.235/-0.017/-0.162 по окнам), PBO 0.77, дефлированный коэффициент Шарпа 0.020.
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.