Strategies
Pre-FOMC Announcement Drift on SPY: Long Into Scheduled FOMC Statements, Flat Otherwise (USEQ 1-DAY, hard-coded 1994-2026 scheduled FOMC calendar, ~8 trades/yr, long-only, 2 tunables)
Outcome: Abandoned
PreFomcDriftSpyUseqDaily
Outcome Summary
PreFomcDriftSpyUseqDaily tested whether SPY's documented drift before scheduled FOMC statements could be traded on daily bars, holding for one session into each of about 8 events a year and staying flat otherwise. Over the full 1993-2026 history it cleared the cost floor (0.161% per trade over 262 trades, Sharpe 0.41, max drawdown 10.7%) with almost no market beta, and the backtest review sent it on to optimization. The same review found that nearly all of the edge came from before 2016: after 2015 the mean per-trade return was 0.051% with t=0.59, consistent with the attenuation reported in the literature. The analyst abandoned the strategy after one iteration, and it never reached risk review or paper trading.
Hypothesis
analyst_decision
Implementation
Long SPY.USEQ (daily bars) only around the 8 scheduled FOMC statement days per year (hard-coded 1994-2026 federalreserve.gov calendar, 264 events; unscheduled/emergency actions excluded), flat otherwise. A decision on daily bar N fills at the open of session N+1 (next_open_fill). Entry fills at the open of the session entry_sessions_before (1-3) trading days before the statement day. Exit fills at the open of the statement day (exit_mode=statement_open) or at the open of the session after it (post_statement_open). Events whose held sessions include a US half-day are skipped (skip_half_days). Size is whole shares = 0.95 x equity / price, unlevered.
Verification Results
Remove (2020, 3, 18) from _SCHEDULED_FOMC, since there was no scheduled statement on that day, or document it as a deliberate ex-ante-calendar choice.
2020-03-18 is kept as a 'scheduled' statement date. The 17-18 March 2020 meeting was cancelled and replaced by the 2020-03-15 emergency action, so no statement was released on 2020-03-18. With k=1 the entry decision is taken at the close of 2020-03-16, when the cancellation was already public. A trader could therefore not have treated 03-18 as a pending statement day. This affects one event (or up to three held sessions in the most volatile week of the sample) and does not change the strategy's structure.
Before 2027, add the 2027 schedule the Fed has published, or log a warning when the calendar is exhausted.
When the hard-coded calendar is exhausted (after 2026-12-09), the strategy returns -1 and stays flat for good. Live or paper trading in 2027 would silently stop trading.
The sandbox covers about 6.5 years (2020-2026, 52 events) and shows avg_trade_return_pct of 0.094%. That is above the ~0.03-0.05% USEQ round-trip cost but below the 0.15-0.30% the hypothesis expects. Modelled impact is 20% of gross. This fits the post-2015 attenuation reported by Kurov et al. The full 1994-2026 backtest should be split pre-2011, 2011-2015 and post-2015. If the whole edge sits in the Lucca-Moench sample period, it is an in-sample replication with no live edge.
Backtest Review
- Sharpe
- 0.41
- Total return
- 47.71%
- Max drawdown
- 10.74%
- Trades
- 262
- Win rate
- 60.3%
- Profit factor
- 1.62
The mechanism is implemented as written. There are 262 long-only trades over 1994-2026 (about 8 per year, matching the scheduled calendar). Each is a one-session open-to-open hold into the statement day, with no shorts and exposure of 2.2%. The hard-coded calendar excludes the unscheduled actions.
Economics clear the USEQ floor on full history. avg_trade_return_pct is 0.161% against the 0.05% floor (prefer above 0.10%). PF is 1.62, win rate 0.60, and per-trade t is about 2.4. Max drawdown is 10.7% against the 20% contract limit. Accounting reconciles and nothing is left unrealized at the end.
Beta is 0.047 and correlation to buy-and-hold is 0.26, so the result is not beta. Alpha should be read against 2% exposure, not against buy-and-hold return.
Both tunables have mechanical reasons. entry_sessions_before (1-3) sets how far ahead of the event to enter. exit_mode (statement_open vs post_statement_open) decides whether the window includes the announcement day itself, the closest daily-bar proxy for the literature's 14:00-to-14:00 window. That makes 6 combinations in total, so the search budget is small.
QA's concern is partly borne out. Per-trade mean by era: 1994-2011 is 0.192% (n=144, t=1.74); 2012-2015 is 0.321% (n=32, t=4.36); 2016-2026 is 0.051% (n=86, t=0.59). After 2015 the edge sits at the USEQ floor and cannot be told apart from zero, consistent with the attenuation Kurov et al. report. Most of the full-history edge comes from before 2016.
The full-history design reserves the holdout from the end of the data, roughly the last 6.5 years where the edge is weakest. Expect a thin or inconclusive holdout. That is the honest test of whether the drift survives today.
The executed-signal IC diagnostic is 0.029 (t=1.34). It is weak, but the forecast is a calendar indicator and the per-trade t-stat is the more relevant measure.
Sharpe is 0.41 at 2% exposure. Max drawdown lasted about 2,293 days.
Outcome Summary
An edge from the published literature can look strong over the full history because of its pre-publication years, so test the per-trade return on recent data (here post-2015) before spending effort on a long-sample calendar anomaly.
The backtest review approved optimization, but the analyst then abandoned the run (abandon_reason: analyst_decision) after one iteration. The input has no optimization report and no written analyst rationale. The decisive weakness on record is that the edge faded after 2015 to an estimate that cannot be told apart from zero, and that recent period is exactly the data the end-of-sample holdout would test.
Capture the Lucca & Moench pre-FOMC announcement drift: hold SPY (USEQ, daily bars, long-only) open-to-open only into the scheduled FOMC statement days in a hard-coded 1994-2026 calendar that leaves out unscheduled actions, and stay in cash the rest of the time.
Over 1993-2026 the initial backtest made 262 long trades with 2.2% exposure. It returned 47.7% in total with Sharpe 0.41, avg_trade_return_pct 0.161%, profit factor 1.62, win rate 60%, max drawdown 10.7% and beta 0.047. By the backtest reviewer's era split, the post-2015 per-trade mean was only 0.051% (t=0.59), against 0.192% for 1994-2011 and 0.321% for 2012-2015.
Backtest and paper results are hypothetical. Trading involves risk of loss.