Phase 2 — Edge Audit
Scope: Economic edge vs costs, regime stability, multiple-testing discipline.
Runs performed this audit: Read backtest_results/mvg_v1/ only; did not re-run full make backtest (time-box).
Honest limit: Without fresh batch backtests, most Sharpe/PBO numbers are from April 2026 quarantine comments and gap ledger — not revalidated today.
Validation infrastructure (code-verified)
| Capability |
Location |
Status |
| Walk-forward |
qgtm_backtest, constants WALK_FORWARD_* |
Implemented |
| PBO |
Backtest validation path |
Implemented; not run for 51/52 PM |
| Deflated Sharpe |
DSR_ACCEPT_CONFIDENCE=0.95 |
Implemented |
| Cost model |
DEFAULT_COMMISSION_BPS=5, SLIPPAGE_BPS=5 |
Default 10 bps round-trip — may understate GC/SI futures |
| Regime labels |
MarketRegimeDetector, aggregator |
Used for sizing, not per-strategy kill |
Quarantine cohort (documented OOS, 2015–2025 backtest era)
| strategy_id |
Sharpe (claimed) |
PBO (claimed) |
Economic story |
Verdict |
| gold_silver_ratio |
-0.46 |
0.88 |
Classic ratio MR on GLD/SLV |
Kill unless new spec + OOS |
| gold_platinum |
-1.57 |
1.00 |
Pt/Au ratio |
Kill |
| miners_vs_metal |
-0.16 |
0.63 |
GDX vs GLD beta trade |
Freeze |
| seasonality_pm |
-1.74 |
1.00 |
Calendar |
Kill (duplicate seasonal) |
| overnight_gold |
-0.24 |
0.88 |
Session drift |
Revise (long-only, costs) |
| gold_etf_flow |
n/a |
broken |
Flow without SO data |
Kill |
| mvg_v1 |
-1.34 |
0.625 (artifact) |
Intraday momentum velocity |
Kill (artifact confirms) |
Active PM sleeves — qualitative edge audit
Grouped by edge type and correlation risk (not duplicate backtest tables).
Macro / rates (11)
| ID |
Story |
Cost survival |
Regime |
Multi-test risk |
| real_rate_gold, gold_real_rate_residual, breakeven_inflation_gold |
Real yields → gold |
Yes on GLD |
Works in hiking/easing shifts |
High — 3 correlated |
| dxy_gold |
USD strength |
Yes |
Risk-on/off |
Medium |
| central_bank_gold |
Official demand |
Slow; low turnover |
Structural |
Low frequency |
| vix_haven, gold_vix_haven |
Stress bid |
VIXY costs |
Overlap ~0.7+ |
Consolidate |
| gold_bitcoin_regime |
Cross-asset |
IBIT spread filter |
Regime shift 2024+ |
New data limited history |
Momentum cluster (8 active)
| ID |
Story |
Risk |
| tsmom, gold_tsmom, carver_trend, gold_multi_ma_trend |
Trend |
4× correlated gold beta in trends |
| xsmom |
Cross-section |
Crowding |
| carver_carry |
Carry |
Blocked without futures curve |
| gold_day_of_week |
Calendar |
Weak edge; low capacity concern |
Mean reversion (6 active)
| ID |
Story |
Risk |
| kalman_pairs, pairs_mr |
Stat arb |
Execution on GLD/SLV |
| gold_royalty_divergence, gold_miner_aisc_margin, gold_phys_premium |
Relative value |
AISC staleness |
| hedging_pressure vs cot_precious |
COT |
Likely net-cancel |
Vol / options proxy (8 active)
| ID |
Story |
Risk |
| vol_risk_premium_pm, skew_trades, gold_options_skew |
IV rich/cheap |
ETF proxy ≠ options P&L |
| vol_term_structure_pm, gold_vol_term_structure |
Term structure |
Proxy direction |
| gamma_scalp_pm, tail_hedge_pm |
Gamma / tail |
Carry drag on tail |
Flow / microstructure (9 active)
| ID |
Story |
Risk |
| cot_precious, sge_withdrawals, gold_comex_squeeze, silver_comex_squeeze |
Positioning / physical |
Lag, sparse triggers |
| gold_lbma_fix_anomaly, gold_mint_sales, gold_sge_premium |
Anomalies |
Data quality |
| etf_flow_pm |
ETF flow |
Needs real SO — verify fix separate from gold_etf_flow |
Carry / curve (3 active)
| ID |
Story |
Risk |
| gc_term_structure, cross_carry, backwardation_stress |
Futures curve |
Often data-blocked (Apr 2026) |
Structural (3 active)
| levered_etf_decay, event_drift_pm, gold_seasonal_demand | Decay / events / festivals | event_drift needs calendar |
Intraday
| ID |
Artifact |
Verdict |
| gold_silver_ratio_intraday |
None checked in |
Paper only; compliance now wired |
| vwap_reversion_intraday |
None |
Needs intraday TCA study |
| gold_gamma_scalp |
None |
Duplicate class with PM |
| mvg_v1 |
Negative Sharpe |
Do not enable |
Cost stress (theoretical)
At 10 bps default, GLD/SLV sleeves likely survive if Sharpe > 0.3 gross.
At 25 bps (spread filter constant MAX_TRADEABLE_SPREAD_BPS), many rebalance rejects — good gate, reduces turnover.
Futures (GC/SI/MGC/SIL): Not primary execution path in code reviewed — ETF proxy dominates. Capacity for \(5M–\)25M in GLD/SLV is fine; $100M+ needs futures + TCA proof.
Walk-forward / DSR (2026-05-17)
| Run |
Result |
Full scripts/backtest_all.py 2015–2025 |
Skipped (time-box) |
| Checked-in artifacts |
mvg_v1 only |
| GAP-002 |
Open in verification/gap_ledger.md |
Required next step: Trigger .github/workflows/run-backtest.yml on qgtm-do, commit backtest_results/<id>/ for all non-quarantined PM strategies, gate promotion on PBO < 0.5 and DSR pass.
Per-strategy tearsheets
Only mvg_v1 has machine-readable tearsheet in-repo. Others: N/A until backtest batch completes.
See: backtest_results/mvg_v1/result.json, validation.json (if present).