Давление пенсионной ребалансировки в конце месяца на SPY: торговать против разницы SPY минус TLT с начала месяца в последнюю сессию месяца, затем развернуть позицию на протяжении первых 2 сессий следующего месяца (SPY.USEQ 1-DAY, длинно-короткая стратегия, только сигнал TLT, без позиции около 86%)
Итог: Отменено
PensionMonthEndRebalanceSpyTlt
Сводка по итогам
PensionMonthEndRebalanceSpyTlt пыталась торговать против потока ребалансировки акций и облигаций в конце месяца со стороны сбалансированных фондов, используя разницу SPY минус TLT с начала месяца. Она прошла проверку бэктеста с 514 сделками и величиной 0.162% на сделку; ее реестр сделок за весь период воспроизвел коэффициент Шарпа около 0.55, полученный до исследования. После оптимизации стратегия не прошла два обязательных критерия (переобучение при скользящей проверке, коэффициент Шарпа OOS CPCV 0.26 < 0.5); средняя доходность сделок в периоде отложенной выборки составила -0.014%, поэтому аналитик отказался от нее после 2 итераций как от no_edge. Аналитик также отметил предполагаемый артефакт движка USEQ для отдельной проверки: парные колебания MTM в дни, когда открытых позиций нет, искажающие коэффициенты Шарпа и просадку.
Одна торгуемая часть позиции: SPY.USEQ на дневных барах. TLT.USEQ — дополнительный инструмент SIGNAL-ONLY, которым никогда не торгуют. Экономическая причина: сбалансированные портфели (пенсионные фонды, фонды с целевой датой и 60/40) проводят ребалансировку к фиксированным долям акций и облигаций в конце месяца. Когда акции с начала месяца опережают облигации, им необходимо SELL акции до закрытия месяца; когда акции отстают, им необходимо BUY. Это известный механический поток, нечувствительный к цене; он описан у……Показать большеСвернуть
Одна торгуемая часть позиции: SPY.USEQ на дневных барах. TLT.USEQ — дополнительный инструмент SIGNAL-ONLY, которым никогда не торгуют. Экономическая причина: сбалансированные портфели (пенсионные фонды, фонды с целевой датой и 60/40) проводят ребалансировку к фиксированным долям акций и облигаций в конце месяца. Когда акции с начала месяца опережают облигации, им необходимо SELL акции до закрытия месяца; когда акции отстают, им необходимо BUY. Это известный механический поток, нечувствительный к цене; он описан у Harvey, Mazzoleni & Melone (2025, «Непредвиденные последствия ребалансировки», NBER w33554): доходность SPY за последние дни месяца отрицательна после опережающей динамики акций относительно облигаций, а в начале следующего месяца частично разворачивается, когда поток прекращается. Плательщик — фонд, проводящий ребалансировку: он торгует в заранее известное время независимо от цены. Правило, использующее только доступные на тот момент данные, без подогнанного порога: на закрытии SECOND-TO-LAST NYSE сессии месяца m (рассчитываемой по календарю XNYS) вычислить G = SPY_close/SPY_close(последняя сессия m-1) - TLT_close/TLT_close(последняя сессия m-1). Этап A (давление в конце месяца): позиция = -sign(G) SPY на этом закрытии, удерживать до закрытия LAST сессии месяца m. Этап B (разворот после прекращения потока): на последнем закрытии месяца m развернуть позицию в +sign(G) и удерживать 2 сессий, до закрытия 2-й сессии месяца m+1. Затем оставаться без позиции до сигнала следующего месяца. Предварительное исследование: я самостоятельно провел проверку с учетом доступности данных на тот момент на каталожных барах 1-DAY с частотой SPY/TLT за период от 2002-08 до 2026-08 (289 концов месяца), с издержками 3 б.п. на единицу оборота. Этап A: среднее +0.236% на сделку, t = 4.19. Этап B: среднее +0.216% на сделку, t = 2.35. Совокупный портфель при 1x: календарный коэффициент Шарпа 0.58, 3.9%/год, максимальная DD 18.4%, 72% положительных лет, позиция на рынке в течение 14% сессий. Коэффициент Шарпа для первой 80% выборки (IS) равен 0.49, а для последней 20% (2021-11 — 2026-08) — 1.02, то есть эффект не ослабел. Контроль атрибуции: то же правило без облигационной части (SPY, только доходность с начала месяца, то есть обычный краткосрочный разворот) дает коэффициент Шарпа 0.24, t этапа A = 0.74, а коэффициент Шарпа последнего -20% — -0.67. Следовательно, информация содержится в разнице динамики акций и облигаций, а не в собственном развороте SPY. Проверка устойчивости: результат сохраняется при использовании IEF или AGG в качестве облигационной части (t этапа A = 3.0 и 3.2), а также при использовании дня сигнала T-3 вместо T-2 (t = 3.08). Это отличается от оставленной сделки IEF на удлинение дюрации в конце месяца, которая представляла собой безусловное удержание длинной позиции по календарю без межрыночного сигнала, и от оставленного еженедельного селектора большинства/меньшинства SPY, основанного исключительно на собственной цене. Механизм без указания инструмента и временного интервала: «торговать против вынужденного потока в конце месяца, который следует из смещения долей акций и облигаций в сбалансированном фонде, а затем против его обратного движения». Это утверждение не проверялось на имеющемся массиве. Фрагменты библиотеки, намеренно оставленные без внимания: ни один из показанных библиотечных документов не применим.
Итерация 2 устраняет обнаруженную QA задержку исполнения на одну сессию. На USEQ рыночный ордер исполняется по цене закрытия дневного бара NEXT, поэтому каждое решение теперь принимается за одну сессию до целевой даты исполнения. G рассчитывается, а ордер для этапа A подается на сессии n-2, поэтому он исполняется при закрытии(n-1). Это собственный вариант проверки устойчивости гипотезы T-3, который QA воспроизвел на данных каталога: этап A +0.211%/сделку (t=3.72), этап B +0.204% (t=2.21). Разворот позиции……Показать большеСвернуть
Итерация 2 устраняет обнаруженную QA задержку исполнения на одну сессию. На USEQ рыночный ордер исполняется по цене закрытия дневного бара NEXT, поэтому каждое решение теперь принимается за одну сессию до целевой даты исполнения. G рассчитывается, а ордер для этапа A подается на сессии n-2, поэтому он исполняется при закрытии(n-1). Это собственный вариант проверки устойчивости гипотезы T-3, который QA воспроизвел на данных каталога: этап A +0.211%/сделку (t=3.72), этап B +0.204% (t=2.21). Разворот позиции подается на n-1 и исполняется при закрытии(n). Выход из этапа B подается на сессии leg_b_sessions-1 месяца m+1 (или на сессии n, когда leg_b_sessions=1) и исполняется при закрытии сессии leg_b_sessions. Теперь signal_offset означает сессию принятия решения, отсчитанную от конца месяца (k = n - offset). Границы не изменились: [2,4], поскольку 1 оставило бы этап A без длительности. Изменились только блок расписания и строка документации. Сигнал, размер позиции, импорты и структура не затронуты. По-прежнему используется разворот с закрытием, а затем входом в той же сессии; для симуляционной торговли может потребоваться единый нетто-ордер.
Код отказа: no_edge. Преимущество исчезает вне выборки; это не fee_edge. В первом измеренном отчёте доходность за сделку за весь период составляет 0.16%, что выше порога USEQ в 0.05%. По фактическому журналу сделок средняя доходность сделок в контрольном окне (2017-10 — 2023-12, n=150) составляет -0.014% на сделку (t=-0.13); значения 2018, 2019 и 2020 отрицательны. Средняя доходность сделок до контрольного периода составляет +0.198% (t=2.88); результат сосредоточен в 2003-2011. Не пройдены также два критерия……Показать большеСвернуть
Код отказа: no_edge. Преимущество исчезает вне выборки; это не fee_edge. В первом измеренном отчёте доходность за сделку за весь период составляет 0.16%, что выше порога USEQ в 0.05%. По фактическому журналу сделок средняя доходность сделок в контрольном окне (2017-10 — 2023-12, n=150) составляет -0.014% на сделку (t=-0.13); значения 2018, 2019 и 2020 отрицательны. Средняя доходность сделок до контрольного периода составляет +0.198% (t=2.88); результат сосредоточен в 2003-2011. Не пройдены также два критерия HARD: при проверке на последовательных выборках отмечено переобучение, а коэффициент Шарпа CPCV OOS составляет 0.26, что ниже 0.5. Ни один из критериев нельзя отменить. В правиле нет настраиваемых параметров сигнала (при анализе чувствительности не менялись signal_offset, leg_b_sessions или min_abs_gap), поэтому итерации не помогут, а повторная оптимизация лишь заново подгонит кредитное плечо. SEPARATE ENGINE ISSUE, для проверки, но не подтверждено: в ряду дневной доходности MTM регулярно встречаются парные колебания -10% — -19% / +10% — +25% в дни без открытых позиций (например, 2023-01-26/27), а также значение -16% на последнем баре при нулевом PnL у фиктивной короткой позиции. Это тот же признак, что и у селектора большинства/меньшинства SPY. Это искажает коэффициент Шарпа, просадку и DSR в запусках USEQ и требует проверки движка (влияние runner/свёртка MTM на USEQ) независимо от этого вердикта. Примечание для руководителя исследовательского отдела: механизм ребалансировки сбалансированных фондов в конце месяца выглядит правдоподобным и действительно проявлялся внутри выборки. Для SPY/TLT на дневном масштабе он не сохранялся после 2017 в доступных для наблюдения данных. Версия, подтверждаемая данными после -2017, должна иметь другую форму, например исполнение через фьючерсы или на закрытии внутри дня, улавливающее поток MOC, либо панель нескольких активов. Не следует предлагать его повторно как то же самое календарное правило для одного SPY.
Реализация
SPY.USEQ — дневная частота, TLT — только сигнал. G = доходность SPY с начала месяца минус доходность TLT (относительно закрытия последнего дня предыдущего месяца), измеренная на закрытии T-3 (сессия n-2). Нога A: короткая позиция по SPY, если G>0, длинная — если G<0; исполнение на закрытии (n-1), удержание до закрытия (n). Нога B: смена на +sign(G) при закрытии (n), удержание до закрытия сессии 2 следующего месяца. В остальное время позиция отсутствует — это около 86% доли всех сессий. Размер — 95% капитала, в целых акциях.
Результаты верификации
Для бумажной торговли подавай при смене позиции один нетто-ордер размером 2x (или используй логику целевой позиции). Для бэктеста изменений не требуется.
Смена ноги A на ногу B выполняется внутри should_exit(): вызов _submit_exit(), за которым на том же баре следует _submit_entry(). В бэктесте обе заявки исполняются на закрытии (n) и записываются как отдельные сделки; я проверил это в журнале. Однако при бумажной торговле или торговле на реальном счёте NETTING закрытие reduce-only и вход в противоположную сторону одновременно находятся в обработке. Если закрытие отклонят или исполнят частично, вход зачтётся против него.
При необходимости вычисляй сессии месяца из src.data.market_calendar, если этот модуль можно импортировать в ALLOWED_IMPORT_ROOTS.
Стратегия содержит собственный календарь праздников XNYS вместо использования src/data/market_calendar.py, который проект считает единственным источником достоверных данных о торговых сессиях. Я проверил правила переноса выходных праздничных дней, Страстную пятницу, Джунтинс (2022), Картер 2025-01-09, Буш 2018-12-05 и Сэнди 2012. Они верны, а даты исполнения 2020-2026 в движке точно приходятся на сессии n-1 и n, а также на сессию 2 месяца m+1, включая 2023-07-05 после июльского праздника 4. Однако любое неуказанное специальное закрытие сдвинет n для этого месяца.
Допустимо как предварительно зарегистрированное условие. В полном бэктесте аналитику следует сопоставить максимальный убыток по ноге и просадку с гипотезой 18.4% DD.
Стопа нет, размер позиции составляет 95% капитала на ногу (плечо 1.0, целые акции, без динамического коэффициента). Максимальный валовой объём — 0.95 x капитала, ниже лимита Reg-T 2x. Позиции удерживаются 1-2 сессий, примерно 85% времени портфель не имеет позиций, поэтому это не модель непрерывной позиции со сложным процентом, как у L148. Тем не менее максимальный убыток на сделку равен движению SPY за один-два дня: около 9% капитала в день типа марта-2020 (2020-03/05 ног по -1.5% и -2.4%). Это превышает рекомендацию ограничивать риск на сделку величиной 1-2%.
Проверка движком модели влияния/ёмкости USEQ для SPY. Для экономики каждой сделки используй журнал полного бэктеста.
Журнал песочницы из краткого описания внутренне противоречив: avg_trade_return_pct равен +0.024%, тогда как avg_trade_pnl_usd равен -6.57, а total_return — -1.02%. Также указаны impact_cost_pct 148% и capacity_usd $45.6k для SPY, самого ликвидного ETF во вселенной. Ни одно из этих чисел нельзя воспроизвести текущим кодом (повторный запуск: +0.334% на сделку, +$58k). Вероятно, это артефакт движка или метрик либо устаревший запуск, а не дефект стратегии.
Метрики тестовой среды Layer-3 в брифе (total_return -1.02%, avg_trade 0.024%, PF 0.98) не соответствуют представленному коду. Я повторно запустил этот код и конфигурацию без изменений через BacktestRunner на USEQ за период с 2020-01-01 по 2026-09-26. Результат: 158 сделок, среднее +0.334% на сделку (этап A +0.314%, этап B +0.354%), чистый PnL около +$58 тыс. Это совпадает с моей самостоятельной репликацией на каталожных данных варианта T-3 (2020 и далее: A +0.29%, B +0.32%; весь период 2002-2026: A +0.211% t=3.72, B +0.204% t=2.21). Значение из тестовой среды, вероятно, устарело (код итерации -1) или получено на другом интервале. Аналитик должен судить по полному бэктесту, а не по брифу. Оставшиеся сомнения: 2020 дает нулевой или отрицательный результат (-0.04% на сделку по 22 сделкам), а результат основан примерно на 290 ежемесячных наблюдениях, то есть 2 этапов x 289 концов месяца.
Обзор бэктеста
Шарп
0,19
Общая доходность
91,42%
Максимальная просадка
20,32%
Всего сделок
514
Доля прибыльных
55,8%
Профит-фактор
1,27
Выборка достаточна: 514 сделок с 2002-08 по 2023-12 (257 длинных, 257 коротких — ожидаемый баланс для двухногого портфеля -sign(G)/+sign(G)). В отложенной выборке будет около 100 сделок.
Сделки соответствуют гипотезе. Я выборочно проверил декабрь-2018/январь-2019 и ноябрь/декабрь-2023: нога A удерживается 1 сессии до закрытия в конце месяца, на последнем закрытии меняет направление на ногу B, которая удерживается 1-2 сессий в начале следующего месяца; в середине месяца позиции нет. Среднее по 217 однодневным сделкам ноги A составляет +0.15% на сделку.
Экономика проходит порог USEQ. avg_trade_return_pct составляет 0.162% (0.138% по фактическому журналу сделок) при пороге 0.05% и предпочтительном уровне 0.10%. PF составляет 1.27, доля прибыльных сделок — 0.56. Комиссия равна нулю в силу устройства площадки; влияние забирает 17.7% валовой прибыли.
Фактический журнал сделок воспроизводит предварительно зарегистрированное исследование. t-статистика на сделку равна 2.37, а коэффициент Шарпа месячной доходности, рассчитанной по сделкам, — около 0.55, против заявленных гипотезой 0.58. Положительный результат показали 14 из 22 лет (64%, выше порога 60%). Повторный запуск QA (2020-2026, +0.33% на сделку) согласуется с этим.
Проверка беты L170: условие benchmark_meaningful ложно, портфель чередует длинные и короткие позиции, время на рынке составляет 15.6%, а максимальная DD 20% намного ниже показателя DD стратегии «купить и держать» для SPY (~55% в 2008). Это не бета.
SUSPECTED ENGINE ARTIFACT в кривой капитала MTM (механизм не подтверждён). Каждый месяц на соседних сессиях в середине месяца наблюдается парное колебание -X%, затем +X%, хотя портфель не имеет позиций. Примеры: 2019-01-18 -7.29% / 2019-01-22 +7.86%, 2020-03-02 -13.6% / 2020-03-03 +14.0%. В эти даты открытых сделок нет — я проверил журнал сделок. Также на 2023-12-29 есть значение -10.5% на последнем баре. Каждая пара даёт в сумме около 0, а амплитуда постоянно растёт (0.07% в 2002 до примерно 10% в 2023). Поэтому показатели annualized_volatility (30%), max_drawdown (20.3%), заявленный коэффициент Шарпа (0.19, с CI, пересекающим 0) и PSR (0.67) загрязнены. Портфель с экспозицией 14% SPY должен иметь волатильность около 6%. Такой же симптом отмечен в запуске недельного селектора SPY. Требуется проверка движка: учёт MTM/влияния для USEQ с дополнительной ногой только для сигнала (TLT).
Окно бэктеста заканчивается 2023-12-29. Предварительное исследование гипотезы и повторный запуск QA охватывают период до 2026-08/09; именно этот отрезок гипотеза называет самым сильным (коэффициент Шарпа 1.02 за последние 20%). Поэтому отложенная выборка составит примерно 2019-06–2023-12 и включает слабый период 2018-2020 (-4.8%, -6.5%, -4.9%).
Опасение QA частично подтвердилось: 2018-2020 — это три убыточных года подряд, а преимущество невелико на единицу риска. Подтвердилось сомнение QA в том, что цифры из тестовой среды в брифе отражают этот код: данный полный запуск совпадает с повторным запуском QA, а не с устаревшим результатом тестовой среды.
скорректированный с учётом эффекта множественного тестирования; месячный коэффициент Шарпа по журналу сделок ~0.55
Анализ
Механизм реализован правильно. Записи сделок показывают, что односеансовая нога A (-sign(G)) исполняется на закрытии (n-1) и удерживается до закрытия (n), после чего позиция меняется на ногу B, удерживаемую 2 сессий. Направления сбалансированы (257 длинных / 257 коротких), что соответствует гипотезе.
Журнал сделок без артефактов за весь период 2002-2023: 514 сделок, среднее 0.136%/сделку, t=2.34, коэффициент Шарпа по месячной агрегации около 0.54. Это повторяет предварительное исследование руководителя исследования (около 0.58), поэтому эффект на обучающей выборке реален.
Доходность 0.14-0.16% на сделку превышает минимальный уровень USEQ, равный 0.05%. PBO составляет 0.18. Нет резких ухудшений результата при изменении параметров.
Сбои HARD (не подлежат отмене): walk-forward-анализ помечен как переобученный, а коэффициент Шарпа CPCV OOS равен 0.26, что ниже порога достоверности 0.5.
На отложенном периоде результат не сохраняется. Среднее по сделкам, закрытым в отложенном периоде (2017-10-23–2023-12-29, n=150), составляет -0.014% на сделку, t=-0.13; это означает отсутствие преимущества при достаточной выборке. 2018, 2019 и 2020 дают убыток (-4.8%, -6.6%, -4.9% суммарной доходности сделок). До отложенного периода (n=364) среднее составляет +0.198%, t=2.88. Эффект сосредоточен в 2003-2011 (2007-2009 отдельно дают около +41% из примерно +70% суммарно). Заявленный гипотезой коэффициент Шарпа 1.02 за последние -20% зависит от данных 2024-2026, находящихся за закрытым хранилищем. В доступном срезе 2017-2023 этого результата не видно.
SUSPECTED ENGINE ARTIFACT, механизм не подтверждён: в дневном ряду MTM наблюдаются крупные парные колебания -X%/+X% в даты, когда открытых сделок нет. Например, 2023-01-26 на уровне -15.75% и 2023-01-27 на уровне +18.70% (согласно журналу сделок, между закрытием 01-04 и входом 01-30 позиции не было); такие пары появляются примерно раз в месяц на всём протяжении периода. Кроме того, на последнем баре есть значение -16.2% при фиктивной короткой позиции с нулевой прибылью/убытком, открытой и закрытой на 2023-12-29.……Показать большеСвернуть
SUSPECTED ENGINE ARTIFACT, механизм не подтверждён: в дневном ряду MTM наблюдаются крупные парные колебания -X%/+X% в даты, когда открытых сделок нет. Например, 2023-01-26 на уровне -15.75% и 2023-01-27 на уровне +18.70% (согласно журналу сделок, между закрытием 01-04 и входом 01-30 позиции не было); такие пары появляются примерно раз в месяц на всём протяжении периода. Кроме того, на последнем баре есть значение -16.2% при фиктивной короткой позиции с нулевой прибылью/убытком, открытой и закрытой на 2023-12-29. Это тот же признак, что и у предыдущего запуска селектора большинства/меньшинства SPY: парные колебания MTM при отсутствии позиции и убыток на последнем баре без позиции. Эти фиктивные дни завышают годовую волатильность до 47% и искажают коэффициент Шарпа, OOS, отложенную выборку, DSR, просадку (30.3%) и коэффициент Кальмара. Рост коэффициента Шарпа вместе с equity_fraction (0.16 до 0.24), чего реальное преимущество не даёт, согласуется с шумом примерно фиксированного денежного размера. Мой вердикт NOT основан на этих загрязнённых числах. Он основан на фактическом журнале сделок выше, где в перспективном периоде результат нулевой.
Анализ чувствительности вырожден. signal_offset, leg_b_sessions и min_abs_gap не варьировались (все 5 варианта идентичны), поэтому единственным фактически свободным параметром был equity_fraction — параметр размера позиции, а не сигнала. Оптимизатор «улучшил» коэффициент Шарпа, только увеличив плечо до 1.42x.
Предварительно зарегистрированные прогнозы: не выполнено 3 из 6 (min_oos_sharpe 0.55 против 0.26, max_dd 22% против 30.3%, PF 1.25 против 1.24). Отклонения по PF и просадке могут быть вызваны артефактами. Среднее по сделкам за перспективный период около 0 — нет.
При применении метода Бенджамини—Хохберга с q=0.10 к 338 кандидатам программы сохраняется 8. Кандидат, не прошедший эту проверку, нельзя отличить от шума самой программы, какими бы хорошими ни выглядели его отдельные статистические показатели.
История итераций
Проверка не пройдена (уровень 4 — проверка QA) [класс=code_defect]: - [edge_concern] После исправления времени преимущество на этом каталоге выглядит реальным. Независимое воспроизведение правила на каталоге SPY/TLT с барами 1-DAY точно повторяет результат до исследования: нога A +0.236%/сделку (t=4.19), нога B +0.216% (t=2.35) за 289 концов месяцев. Вариант T-3, необходимый для исправления, даёт A +0.211% (t=3.72) и B +0.204% (t=2.21). Обе величины превышают порог спреда и влияния на цену USEQ (~0.05%). В……Показать большеСвернуть
Проверка не пройдена (уровень 4 — проверка QA) [класс=code_defect]:
- [edge_concern] После исправления времени преимущество на этом каталоге выглядит реальным. Независимое воспроизведение правила на каталоге SPY/TLT с барами 1-DAY точно повторяет результат до исследования: нога A +0.236%/сделку (t=4.19), нога B +0.216% (t=2.35) за 289 концов месяцев. Вариант T-3, необходимый для исправления, даёт A +0.211% (t=3.72) и B +0.204% (t=2.21). Обе величины превышают порог спреда и влияния на цену USEQ (~0.05%). В недавнем периоде нога B слабее (t~1.5-1.9 с 2020), поэтому проверьте её вклад отдельно в полном бэктесте. Максимальный убыток по одной ноге велик при номинале 95% и отсутствии стопа (песочница: -$6.0 тыс., около 6% капитала, на переходе месяца в марте-2020).
- [критично] Код торгует каждую ногу на одну сессию позже, поэтому измеряет окно удержания, отличное от указанного в гипотезе. USEQ запускается с latency_ms=100 (venue_configs.py:392, runner.py:501-512). Поэтому рыночный ордер, отправленный при обработке дневного бара с отметкой времени закрытия, исполняется по цене закрытия дневного бара NEXT, а не сигнального бара. Я повторно запустил конфигурацию песочницы (2020-01–2026-09); смещение прямо видно в журнале сделок. Февраль 2020: G рассчитывается на 02-27 (T-2), и нога A должна работать от закрытия 02-27 до закрытия 02-28, но движок открывает позицию LONG на 02-28 по цене 296.26 и закрывает её на 03-02. Нога B, которая должна работать от 02-28 до 03-03, записана как сделка SHORT с 03-02 по 03-04. Такая картина повторяется каждый месяц. Таким образом, фактический период ноги A — от закрытия последней сессии месяца до закрытия 1-й сессии месяца +1, то есть ровно день перехода месяца, когда SPY растёт вне зависимости от G. Нога B приходится на сессии 1–3. Я проверил это независимо на данных каталога за все 289 концов месяцев. При смещённом расписании нога A даёт -0.133%/сделку (t=-1.73), нога B — +0.061% (t=0.67). По задуманному расписанию A даёт +0.236% (t=4.19), B — +0.216% (t=2.35). Смещение объясняет результат песочницы PF из 0.76, доходность -17% и низкую долю прибыльных коротких сделок 0.38. Это не результат выбора параметров или торгового преимущества: окна гипотезы просто никогда не торгуются. (строка 186) — исправление: Принимайте каждое решение на одну сессию раньше, чтобы с учётом исполнения на следующем баре ордера исполнялись в даты, указанные в гипотезе. (1) Рассчитывайте G и отправляйте ордер на вход в ногу A при k = n-2, то есть на закрытии T-3. Это собственный вариант проверки устойчивости гипотезы («сигнальный день T-3, t=3.08»); на данных каталога он даёт A +0.211% (t=3.72) и B +0.204% (t=2.21). (2) Отправляйте ордер на смену направления при k = n-1, чтобы нога A исполнилась по цене закрытия (n-1) и удерживалась до закрытия (n), а нога B исполнилась по цене закрытия (n). (3) Отправляйте ордер на выход из ноги B в сессию leg_b_sessions-1 месяца +1, чтобы стандартное исполнение происходило по цене закрытия сессии 2. Обрабатывайте leg_b_sessions=1 посредством ex
- [предупреждение] Ордер на переход от ноги A к ноге B отправляется внутри should_exit(): сначала close_position(), а затем на том же баре — новый рыночный ордер на вход. В бэктесте оба исполняются в одном событии (в журнале они записаны как отдельные сделки, что правильно). Однако при реальной торговле или бумажной торговле на счёте NETTING закрытие с ограничением только на уменьшение позиции и встречный ордер на вход находятся в обработке одновременно. Если закрытие отклонено или исполнено частично, ордер на вход уменьшит позицию вместо открытия новой. Базовая защита _close_pending не распространяется на ордер на вход. (строка 203) — исправление: Для бэктеста это допустимо. При бумажной торговле рассмотрите отправку одного ордера размером |old| + |new| в направлении смены позиции либо дождитесь подтверждения принятия ордера на закрытие перед входом.
- [предупреждение] Размер каждой ноги составляет 95% капитала при плече 1x, число акций — целое. Динамического множителя нет, одновременно открыта не более чем одна позиция, поэтому максимальный валовой объём равен 0.95x капитала и значительно ниже лимита Reg-T 2x (требование L156 соблюдено). Стопа на сделку нет, как и предусмотрено гипотезой (удержание 1-2 сессий). Поэтому максимальный убыток по одной ноге — неограниченный убыток при гэпе, около 5-10% капитала (крупнейший убыток в песочнице: -$6.0 тыс. на переходе месяца в марте-2020). Это не постоянно инвестированная структура L148 с эффектом сложного процента, поскольку примерно 84% времени портфель не имеет открытых позиций. (строка 232) — исправление: Гипотеза не требует изменений. Аналитик должен сопоставить максимальный убыток по ноге и просадку с зарегистрированным заранее 18.4%.
Сводка по итогам
Эффект ребалансировки в конце месяца проявился на обучающей выборке, главным образом в 2003-2011, но простое календарное правило для одного SPY с дневной частотой не работает с 2017; новая попытка требует иной формы, например MOC, исполнения на внутридневном закрытии, фьючерсов или панели активов.
Аналитик отказался от стратегии, присвоив ей код отказа no_edge. Не пройдены два не подлежащих отмене контрольных критерия: скользящая проверка помечена как переобученная, а коэффициент Шарпа OOS CPCV — 0.26, ниже порога 0.5. Преимущество в форвардном периоде также было нулевым, а 2018, 2019 и 2020 принесли убыток.
Торгуй SPY по дневным барам (TLT используется только как сигнал) против потока ребалансировки сбалансированных фондов в конце месяца: открывай короткую позицию по SPY перед последней сессией месяца, если с начала месяца SPY опережал TLT (длинную, если отставал), а затем занимай противоположную сторону в течение первых 2 сессий следующего месяца.
Первоначальный бэктест (1993-2023, 514 сделок) показал результат 91.4% при средней доходности сделки 0.162%, факторе прибыли 1.27 и коэффициенте Шарпа MTM 0.19. После оптимизации коэффициент Шарпа CPCV OOS составил 0.26, а коэффициент Шарпа на отложенной выборке — 0.12. Согласно журналу фактически исполненных сделок, средняя доходность сделок в периоде отложенной выборки (2017-10–2023-12, n=150) составила -0.014% (t=-0.13) по сравнению с +0.198% (t=2.88) до этого периода.
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.