Skip to content

View translation

PreFomcAnnouncementDriftOverlaySpyQqqUseq

Hypotheses

Pre-FOMC Announcement Drift Overlay on US Index ETFs (SPY + QQQ, USEQ Daily Bars, Long the 24h Before Each Scheduled FOMC Decision, Flat Otherwise, Commission-Free, 2-Parameter)

Hypotheses

A LOW-FREQUENCY, EVENT-GATED, LONG-ONLY overlay on the two most liquid US index ETFs (SPY primary, QQQ secondary) on the commission-free USEQ venue, daily bars. The strategy is FLAT ~96% of the time and only holds equity risk in the roughly 24-hour window immediately preceding each SCHEDULED FOMC policy announcement. The mechanism is the pre-FOMC announcement drift (Lucca & Moench 2015): a large, statistically robust fraction of the entire US equity risk premium is earned in the 24h ahead of scheduled FOMC decisions (~+40-49bps average SPX return 1994-2011, positive in ~70-80% of events), as investors are compensated for bearing pre-announcement policy uncertainty that resolves at 2pm ET on the decision day. This is deliberately NOT a momentum clone (L94/L95), NOT a crypto pairs/cointegration spread (L96), NOT a short-vol/VRP harvest (options graveyard: no_edge/risk_reject), and NOT a fee-fragile sub-fee microstructure fade (the 484-death fee graveyard). The FOMC meeting calendar is public, fixed, and known-history, so the entry trigger is fully deterministic and 100% backtestable on decades of daily data. The developer embeds the list of scheduled FOMC announcement dates (8/year; the Fed publishes them years in advance). The strategy is intentionally 2-parameter (entry lead in trading days, per-instrument gross exposure) to resist the 380-death overfit graveyard. Instruments: ["SPY.USEQ", "QQQ.USEQ"].

Hypotheses

Iteration 4 fixes exactly the reported failure: the semantic auditor found the pre-registered primary leg SPY.USEQ absent from both config and code (iteration 3 was QQQ-only). SPY is now the primary instrument/bar_type and QQQ is carried in extra_instruments/extra_bar_types, driven by the identical calendar gate through _submit_entry_instrument / _submit_exit_position (helpers taken verbatim from the earlier two-leg version of this strategy that already cleared Layers 1-3), with equal per-leg sizing. Everything that already passed is untouched: the same imports and class structure (Layer 1), the same continuous calendar signal (Layer 2), and the iteration-3 window shift that puts the exposure in the PRE-announcement session (T-1 open to T open) rather than across the statement. Parameter renamed gross_exposure -> gross_exposure_per_leg because it now sizes one of two sleeves; clamps are declared in _param_bounds. One honest note: measured per-event drift since 2020 was near zero on SPY and positive on QQQ, so the SPY sleeve may dilute per-trade net return - but the hypothesis pre-registers both instruments, so both are implemented.

Hypotheses

Magnitude problem, not a fee or optimizer-overfit problem. Every hard gate passes, but the full-history result is Sharpe 0.105 / CAGR 0.70% with a bootstrap CI straddling zero and a point estimate below the best-of-N noise bar (expected_max 0.2255), which is why DSR is 0.243 and programme FDR rejects it — the DSR failure restates a Sharpe under the noise floor rather than being a lone soft floor over-read. Trade-level measurement shows the pre-FOMC drift is front-loaded: +0.409%/event (t=2.47) in 1999-2009 vs +0.098%/event (t=1.04) over the 266 events of 2010-2026. Iteration is impossible (one discrete knob, already enumerated; exposure is pure scaling with invariant Sharpe) and incubation cannot resolve it (8 events/yr, ~0.8%/yr of return — decades to separate 0.1 Sharpe from zero). Not revise_hypothesis: SPY/QQQ already ARE the canonical vehicles.

Implementation

Event-gated, long-only pre-FOMC announcement drift overlay on the two most liquid US index ETFs, SPY (primary) and QQQ (secondary), on daily USEQ session bars. An embedded table of every SCHEDULED FOMC policy-announcement date (1999-2027, published years in advance by the Fed) drives a continuous proximity signal 1/sessions_to_announcement, which is -1.0 on the announcement day itself. Both sleeves are bought equal-weight (gross_exposure_per_leg of equity each, whole shares) when the signal enters [1/(entry_lead_days+1), 1.0) so that the next-open fill lands at the open of a PRE-announcement session, and both are flattened when the signal reaches 1.0 (the last session before the decision) so the sells fill at the announcement day's open - before the 14:00 ET statement. The book is flat roughly 96% of the calendar and never holds the announcement reaction. Two free parameters only.

Verification Results

Optionally count sessions using the market_calendar (XNYS) session grid rather than raw weekdays so holiday-adjacent FOMC events enter exactly one session before the decision; or leave as-is and rely on entry_lead_days=2-3 to absorb the drift.

Verification Results

Sessions-to-announcement is counted in raw Mon-Fri weekdays (_weekdays_after), not against the USEQ session calendar, so an exchange holiday wedged into the pre-announcement window will shift the actual fill by one session (the weekday count treats the holiday as a session that has no bar). This is rare (a handful of times per decade) and the developer acknowledges it, offering entry_lead_days widening as mitigation. Non-critical: it slightly perturbs entry timing on a few events, it does not introduce look-ahead or break the strategy.

Verification Results

Developer's own honest note: measured per-event SPY drift since 2020 is near-zero (positive on QQQ), so the SPY sleeve may dilute per-trade net return. Sandbox avg_trade_return_pct is 0.090% — above the USEQ ~0.02-0.05% spread+impact floor but thin, with Sharpe 0.057 and CI [-0.73, 0.88] straddling zero over a truncated window. The pre-FOMC drift is a well-documented anomaly (Lucca-Moench) but has visibly decayed in the last ~5 years; the analyst should check per-event drift on the full 1999-2026 history and specifically whether the SPY leg still carries positive expectancy or should be dropped/down-weighted vs QQQ. Advisory only — the code is a faithful implementation and both legs are pre-registered.

Backtest Review

Trades MATCH the hypothesis: 220 long-only entries (0 shorts), exposure_pct 4.41% => flat ~96% of the calendar, one entry per scheduled FOMC decision. The pre-FOMC overlay is implemented as described, not a coding artifact.

Backtest Review

Numerically viable on USEQ: avg_trade_return_pct 0.1926% clears the USEQ spread+impact floor (>0.05%, prefer >0.10%); profit_factor 1.37 (>1.2); low max_drawdown 7.26%; 440 trades is a reliable, statistically meaningful sample (metrics_reliable=true).

Backtest Review

This is a well-documented, non-fee-fragile anomaly (Lucca-Moench pre-FOMC drift) on the most liquid ETFs, capacity ~$5.4M, impact only 13.6% of gross. Not a momentum/pairs/short-vol clone from the failure graveyards.

Backtest Review

Edge has visibly decayed: recent calendar years are negative (2024 -1.0%, 2025 -0.1%, 2026 -3.2%) and rolling Sharpe has turned negative. The full-period MTM Sharpe (0.116) is low and its CI [-0.21, 0.46] straddles zero.

Backtest Review

SPY sleeve is a likely dead/diluting leg (QA note: SPY per-event drift ~0 since 2020 vs QQQ still positive), but the symmetric gross_exposure_per_leg parameter cannot down-weight it.

Backtest Review

The last-20% holdout coincides with the decayed regime, so holdout is where this will be decided.

Analysis

Implementation is clean and the trades match the hypothesis exactly: 220 scheduled FOMC events x 2 legs = 440 long-only trades, 0 shorts, 2-4 day holds, exposure_pct 11.1% (flat ~89% of the calendar), no look-ahead.

Analysis

No cliffs (cliff_count 0), walk-forward NOT overfit (IS 0.428 vs OOS 0.580, PBO 0.485), holdout (2015-10 -> 2021-06, 90 trades) positive at Sharpe 0.185 and consistent with WF-OOS (z -0.932). All HARD validity gates pass.

Analysis

Not a fee problem: avg_trade_return_pct 0.244% is ~5x the USEQ floor, zero commissions, impact only 9.8% of gross, drawdown 5.5% inside the pre-registered 12% cap.

Analysis

The mechanism is genuinely present full-sample: +0.244%/event (SPY +0.318%, t=+2.9; QQQ +0.125%, t=+0.93).

Analysis

Economically immaterial and statistically indistinguishable from zero on the longest sample that will ever exist: CAGR 0.70%/yr, +21.1% over 23.2 traded years, vol 5.88%, Sharpe 0.105 with 95% CI [-0.225, +0.450], PSR 0.594.

Analysis

Selected Sharpe 0.105 is BELOW the best-of-N luck bar (expected_max 0.2255) -> DSR 0.243 (raw 0.056), programme FDR rejects (p 0.757). Calmar 0.127 is ~4x below floor.

Analysis

Measured post-publication decay: +0.409%/event (t=+2.47) in 1999-2009 vs +0.098%/event (t=+1.04) across the 266 events of 2010-2026; both legs noise post-2020 (t<0.7); only 4 of the last 11 calendar years positive.

Analysis

No tuning path: min_notional has exactly zero effect, gross_exposure_per_leg is a pure scale multiplier (halving it halves return and vol, Sharpe stays ~0.11), and entry_lead_days in {1,2,3} was fully enumerated by the 225 trials.

Analysis

max_drawdown_duration 2549 days, information_ratio -0.456, alpha +0.27%/yr. Pre-registered OOS Sharpe (0.9 vs 0.580) and PF (1.4 vs 1.385) both missed. A near-identical sibling (similarity 0.786) already died.

Analysis

Code↔hypothesis misalignment found by the semantic auditor — the code does NOT implement the hypothesis. Re-code the strategy to implement the hypothesis EXACTLY (instrument, timeframe, direction, the named edge/mechanic, sizing). Concrete issues: Hypothesis declares a two-instrument overlay (SPY primary, QQQ secondary; Instruments: ["SPY.USEQ", "QQQ.USEQ"]), but config.instrument_id is QQQ.USEQ with extra_instruments=[] and QQQ-only bar_type, and PreFomcAnnouncementDriftOverlayQqqUseq contains no SPY.USEQ instrument or order logic (only docstring prose) — the declared primary leg is absent from both config and code, a deviation from the pre-registered instrument set that Layer 1.5 does not catch.

Analysis

Benjamini-Hochberg at q=0.10 over 286 programme candidates keeps 4. A candidate that does not survive here is not distinguishable from the programme's own noise, however good its individual statistics look.

Outcome Summary

PreFomcAnnouncementDriftOverlaySpyQq-1659f94b71

Outcome Summary

PreFomcAnnouncementDriftOverlaySpyQqqUseq traded the pre-FOMC announcement drift, going long SPY and QQQ only into the session ahead of each of the 220 scheduled Fed decisions from 1993 to 2026 and staying flat the rest of the time. It reached optimization after four coding iterations (the last of which restored the missing SPY leg and shifted the holding window to sit entirely before the 14:00 ET statement), and the initial backtest earned an 'optimize' verdict on clean hypothesis-matching trades and a viable 0.19% per-trade return. Optimization confirmed the implementation was sound — no parameter cliffs, no overfitting, a positive holdout — but delivered only 0.70% CAGR and a Sharpe of 0.105 whose confidence interval straddled zero and whose deflated Sharpe (0.243) and programme-level FDR test both rejected it. The analyst abandoned it as a magnitude problem rather than a fee or overfitting problem: the drift is measurably front-loaded in 1999-2009, the two parameters offered no tuning path, and at eight events a year incubation would take decades to distinguish the edge from noise.

Outcome Summary

A correctly implemented, well-documented academic anomaly can still fail on magnitude alone — when the only knobs are a pure scale multiplier and one already-enumerated discrete parameter, there is no iteration path and a post-publication-decayed edge cannot be rescued by tuning.

Outcome Summary

The analyst abandoned it after optimization: every hard validity gate passed, but the selected Sharpe of 0.105 sat below the best-of-N luck bar (expected_max 0.2255), giving a deflated Sharpe of 0.243 and a programme-FDR rejection (p 0.757), with trade-level attribution showing the drift decayed from +0.409%/event (t=2.47) in 1999-2009 to +0.098%/event (t=1.04) across the 266 events of 2010-2026.

Outcome Summary

A long-only, event-gated overlay on SPY and QQQ (USEQ daily bars) that held equity risk only in the session before each scheduled FOMC announcement, harvesting the Lucca-Moench pre-FOMC announcement drift with just two free parameters.

Outcome Summary

The optimized backtest over 1993-2026 produced 440 long-only trades across 220 scheduled FOMC events with a total return of 21.1%, CAGR 0.70%, Sharpe 0.105 (95% CI -0.225 to +0.450), profit factor 1.38, max drawdown 5.5%, and avg trade return 0.244% of notional. Walk-forward was not overfit (IS 0.428 vs OOS 0.580, PBO 0.485) and the holdout passed at Sharpe 0.185 with 90 trades.

Iteration History

PreFomcAnnouncementDriftOverlayQqqUseq
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.