Skip to content

View original

EthMacroEventPostReleaseMomentumLS

Hypotheses

ETH Scheduled-Macro-Event Post-Release Momentum Continuation, Long-Short (ETHUSDT.BINANCE USD-M, 1H bars) — trade the directional follow-through after US CPI / FOMC / NFP releases, event-calendar gated, volatility-confirmed, 3-parameter

Hypotheses

Implements the hypothesis exactly: event-calendar gating + volatility confirmation + post-release momentum continuation, with three tuned core parameters (impulse_z, hold_hours, vol_lookback). The factory has no economic-calendar feed, so the release schedule is computed from the calendar RULES the agencies publish years in advance (no look-ahead: every timestamp is a pure function of the bar's own date, not of price). NFP's first-Friday rule is exact; the CPI day and the FOMC Wednesday are not derivable from a rule, so those are candidate days (weekdays 10-15 at 08:30 ET; Wednesdays of the 8 FOMC months at 14:00 ET) and the volatility confirmation is what selects the hours where a release actually moved the market - I note this as the one approximation in the implementation. Futures venue is required (the strategy takes shorts on hawkish/negative surprises and uses 2x leverage, which is wired into position_size via self.config.leverage). Bracket orders are used because the hypothesis needs a fixed-% stop that fires intra-bar - a bar-close stop on a post-release hour would ride the whole spike. A dry run of the exact signal/entry/exit logic over the full 2019-2026 ETH 1H catalog (58,560 bars) gives ~39 trades/yr and ~+0.17% average per trade NET of a 0.10% round-trip fee, positive across the whole impulse_z x hold_hours x vol_lookback x stop/TP grid I checked, and 73 trades inside a sandbox-sized 833-day window - so trade frequency and the fee floor are both cleared before submission. Layers 1 and 2 were run locally: static analysis passes (warnings only) and all synthetic scenarios pass.

Hypotheses

Overfit / no-generalization death (NOT fee-edge — optimized per-trade return 0.443% clears the floor). Three unwaivable HARD gates fail: walk-forward is_overfitted=true (avg IS Sharpe 1.879 -> avg OOS -0.339, windows +0.16 / +1.11 / -2.30), out-of-sample Sharpe -0.339 <= 0, and the holdout carries only 7 trades < 10. Robustness confirms the selected Sharpe is best-of-N noise: deflated_sharpe 0.0017 << 0.95, is_significant=false, Sharpe CI [-0.462, 1.054] straddles zero, and it does not survive programme-level FDR (candidate_p 0.998, keeps 4 of 247 over 225 trials). Sensitivity flags 7 cliff parameters and a flat ~0.3-Sharpe surface with no robust region to tune toward — optimization curve-fit a few clean event windows, collapsing 256 default trades into 39 by pushing impulse_z to 2.82. Per the overfit-vs-dead-premise rule, high-IS/negative-OOS is ABANDON not revise: the same ETH scheduled-macro-event impulse-continuation mechanism already died once (fee_edge, similarity 0.80), and re-pointing an event-gated post-release momentum recipe just overfits again. The strategy is also structurally too slow to validate — oos_vault flagged UNDERPOWERED (~48 expected trades vs 100 needed); the report notes no history slice is both short enough to leave training data and long enough to validate a strategy this infrequent, so the thin holdout is inherent to the mechanism, not a fixable tuning artifact. There is no concrete parameter change that lifts a negative-generalization, DSR-0.002 signal past the hard gates. Failure pattern: overfit / no-generalization (event-gated single-name momentum).

Implementation

ETHUSDT.BINANCE USD-M perp, 1H bars, long+short at 2x leverage. Trades the directional follow-through after scheduled US macro releases (CPI / NFP / FOMC). Release timestamps are derived from published US scheduling rules in US/Eastern with DST handling: NFP = first Friday 08:30 ET (exact), CPI = 08:30 ET on weekdays in the BLS release window (day 10-15), FOMC = 14:00 ET Wednesdays of the eight FOMC months. calculate_signal returns a continuous z-score every bar: inside a release window it is the move since the pre-release bar normalised by realised hourly volatility (sigma * sqrt(bars since release)); outside a window it degrades to the 1-bar return z-score, so the signal always varies. Entry (flat, release window only, one per event): |z| >= impulse_z (1.25) -> BUY if z > 0 else SELL. Exit: venue-managed bracket (2% stop / 4.5% take-profit, fires intra-bar), an 8-hour calendar-time hold stop measured from the position's ts_opened, or a momentum reversal (|z| >= impulse_z against the position). Sizing is capital-relative: notional = equity * position_frac(0.5) * leverage(2.0) = ~1x equity, so a stop costs ~2% of equity.

Verification Results

If a real economic-calendar feed becomes available, replace the rule-derived superset with exact release timestamps to sharpen the event gate and isolate the true post-release continuation edge.

Verification Results

CPI and FOMC release days are approximated as candidate-day supersets (CPI: any weekday 10-15 at 08:30 ET; FOMC: any Wednesday of 8 months at 14:00 ET) because the factory has no economic-calendar feed. This is faithful to the hypothesis's stated approach and the developer is explicit about it, but it means a meaningful fraction of gated hours contain no actual macro release. The volatility gate is what must reject those; treat measured edge accordingly.

Verification Results

Confirm the base FactoryStrategy honours the overridden min_bars_required for warmup gating (it does in this template); no change required if warmup is respected.

Verification Results

min_bars_required(self) overrides a framework method (static-analysis base_shadow warning). Developer flags it as deliberate to enforce the vol_lookback+2 warmup; behaviour appears intended and safe.

Verification Results

Two advisory doubts for the analyst. (1) The macro-event gate is a rule-derived SUPERSET, not a true release calendar: NFP's first-Friday rule is exact, but CPI is every weekday in day 10-15 at 08:30 ET and FOMC is every Wednesday of 8 months at 14:00 ET. The strategy therefore fires on many calendar days with NO actual release, so the mechanism collapses toward a plain 'volatility-breakout on certain morning/afternoon hours' rather than a genuine post-release edge — the vol-confirmation is the only thing separating real event hours from noise. Whether the true post-release continuation edge survives this dilution is exactly what the full backtest must decide. (2) Sandbox regime attribution shows the strategy LOSES in the calm tercile (-1.37%, Sharpe -0.04) AND the stressed tercile (-1.51%, Sharpe -0.06), earning its entire return in the normal tercile (+12.2%, Sharpe 1.04) with only_one_regime=true — a concentrated, regime-fragile profile. Sharpe CI [-1.22, 1.55] straddles zero on this smoke-test window. Not a blocker (Layer-3 is unoptimized/truncated), but the analyst should confirm the edge is not a single-regime artifact.

Backtest Review

Numerically viable for the review stage: 256 trades on a reliable 6.7-year sample, avg_trade_return_pct 0.237% clears the 0.15% Binance USD-M floor, PF 1.072 >= 1.05, Sharpe 0.073 > 0, max_drawdown 28.9% < 60%.

Backtest Review

Low trade count / 2.12% exposure is EXPECTED and correct for a scheduled-event-gated strategy — not a broken/frozen signal. Entry diag confirms the mechanism fires (256 signaled = 256 submitted, no drops), balanced 142 long / 114 short as a long-short design should be.

Backtest Review

There is a concrete optimizable lever: impact_cost_pct 43.68% is driven by position_frac=0.5 being oversized for a single event-hour entry; position_frac is a tunable sweep parameter [0.2, 0.8], so impact drag can be cut materially.

Backtest Review

Genuinely marginal edge: PF 1.072 sits in the fee-drag band and Sharpe 0.073 is essentially noise with CI [-0.72, 0.89] straddling zero. This profile has a high probability of dying in the 3-phase deflation/holdout.

Backtest Review

impact_cost_pct 43.68% + commission 10.22% of gross = ~54% of gross edge consumed by costs; capacity only ~$524k means the edge is real only at toy scale unless size is cut.

Backtest Review

QA concern (1) is material: the macro calendar is a rule-derived SUPERSET (CPI fires every weekday day 10-15, FOMC every Wednesday of 8 months), so the gate collapses toward a plain vol-breakout on certain morning/afternoon hours rather than a true post-release continuation edge. No real economic-calendar feed exists to fix this, so it cannot be tightened in code.

Backtest Review

QA concern (2) regime fragility (smoke test earned everything in the normal tercile) — full history is less extreme (calm -17.6%, normal +9.2%, stressed +15.3%, only_one_regime=false) but the strategy still loses in the calm tercile, i.e. edge is regime-dependent.

Analysis

Not a fee-edge death: optimized avg_trade_return_pct 0.443% clears the 0.15% Binance USD-M floor comfortably, PF 1.43, max_drawdown only 6.7%.

Analysis

Calendar derivation is look-ahead-free (release times are a pure function of the published scheduling rules), so the mechanism is methodologically clean.

Analysis

3 of 5 pre-registered predictions met (DD, PF, per-trade return).

Analysis

Walk-forward is OVERFITTED (is_overfitted=true): avg IS Sharpe 1.879 collapses to avg OOS -0.339, with the third window at -2.295. In-sample fit does not generalize.

Analysis

OOS Sharpe -0.339 <= 0 (HARD gate) and holdout carries only 7 trades < 10 (HARD gate) — both unwaivable; promote is impossible.

Analysis

Robustness confirms best-of-N noise: deflated_sharpe 0.0017 << 0.95, is_significant=false, Sharpe CI [-0.462, 1.054] straddles zero, does not survive programme-level FDR (candidate_p 0.998, keeps 4 of 247).

Analysis

Sensitivity flags 7 cliff parameters (impulse_z, cpi_day_hi, cpi_day_lo, hold_hours, vol_lookback, stop_loss_pct, take_profit_pct) — the whole surface tops out near ~0.3 Sharpe and shifts sign on tiny moves; there is no robust region to tune toward.

Analysis

Structurally too slow to validate: 39 trades after optimization, oos_vault flagged UNDERPOWERED (~48 expected trades vs 100 needed). The report itself states no slice of history is both short enough to leave training data and long enough to validate a strategy this infrequent — the thin holdout is a consequence of the mechanism, not a tuning miss.

Analysis

Optimization made it WORSE, not better: pushing impulse_z to 2.82 collapsed 256 default-param trades into 39, curve-fitting a handful of clean event windows.

Analysis

Sibling ETH macro-event impulse-continuation strategy already died (fee_edge, similarity 0.80); this variant dies overfit.

Analysis

Benjamini-Hochberg at q=0.10 over 247 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

EthMacroEventPostReleaseMomentumLS-0b8d3dbf50

Outcome Summary

EthMacroEventPostReleaseMomentumLS bet that ETH's directional impulse during scheduled US macro releases (CPI/NFP/FOMC) continues for a few hours, using a look-ahead-free rule-derived calendar and a volatility z-score to confirm entries. The initial 256-trade backtest was numerically viable (avg_trade_return_pct 0.237%, PF 1.072) but marginal, so the analyst approved it for optimization; optimization pushed impulse_z to 2.82 and curve-fit a handful of clean event windows, collapsing to 39 trades. Walk-forward exposed the fit as non-generalizing (avg IS Sharpe 1.879 -> avg OOS -0.339, third window -2.30), and with OOS Sharpe below zero, only 7 holdout trades, deflated Sharpe of 0.0017, and a sibling ETH macro-event strategy having already died, it failed three hard gates and was abandoned after one iteration. The mechanism is inherently too infrequent to validate on available history, making the thin holdout a property of the design rather than a fixable tuning miss.

Outcome Summary

An event-gated single-name momentum strategy that fires this rarely is structurally too slow to validate (the OOS vault was flagged underpowered at ~48 vs 100 needed trades), so strong in-sample Sharpe that inverts out-of-sample should be treated as overfit and abandoned rather than re-tuned.

Outcome Summary

The analyst abandoned it at the post-optimization ANALYZING stage on three unwaivable HARD gates: walk-forward is_overfitted=true (avg IS Sharpe 1.879 -> avg OOS -0.339), OOS Sharpe -0.339 <= 0, and the holdout carried only 7 trades (< 10), with deflated_sharpe 0.0017 and failure to survive programme-level FDR confirming best-of-N noise.

Outcome Summary

It traded ETHUSDT (BINANCE USD-M, 1H) long/short for the directional follow-through in the hours after scheduled US macro releases (CPI/NFP/FOMC), gating entries to a rule-derived release calendar and confirming with a volatility z-score of the release-hour move.

Outcome Summary

The default-parameter backtest over 6.7 years produced 256 trades with Sharpe 0.073 (CI [-0.72, 0.89]), profit factor 1.072, avg_trade_return_pct 0.237% and 28.9% max drawdown; after optimization the surviving config had only 39 trades, Sharpe 0.287, PF 1.43 and avg_trade_return_pct 0.443% but collapsed out-of-sample.
Strategy report

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