The live loop fills resting-limit brackets via position-snapshot diffing and emits NO order_filled (verified: 0 all-time in prod), so reconstruct_fires skipped every fire and the ENTIRE harness replayed nothing (0 run rows). Reconstruction now falls back to the order_submitted timestamp for entry timing and reads entry/stop/exit from position_closed — restores the whole flagship (0 -> 324 run rows on prod; pm1's overdue FAIL verdict now posts). Adds the volume_fade intervention (exit to lock the gain when a bar's volume drops below fade_frac x the entry-burst average, once in profit; original stop still caps downside; adverse-tick fills on entry AND exit) + volume_fade_exit_v1 (pre-registered bars/futility/fidelity). Interim n=15 read: -0.68R vs baseline (INCONCLUSIVE, min_n=100) — the harness answers 'does volume-fade help?' from data before any live change. +6 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
10 lines
691 B
JSON
10 lines
691 B
JSON
{
|
|
"id": "volume_fade_exit_v1",
|
|
"hypothesis": "Exiting to lock the live gain when the momentum volume dies (a bar's volume drops below 40% of the entry-burst average, once in profit) beats scratching at breakeven — it captures peaks the fixed breakeven ratchet gives back.",
|
|
"population": {"min_entry_gap_pct": 0.10, "min_day_volume": 300000, "price_min": 2.0, "price_max": 20.0},
|
|
"intervention": {"kind": "volume_fade", "fade_frac": 0.4, "baseline_bars": 5, "min_hold_bars": 3, "require_profit": true},
|
|
"bars": {"expR_delta_min": 0.05, "min_n": 100},
|
|
"futility": {"min_n": 150, "expR_delta_max": -0.05},
|
|
"fidelity": {"atr_frac": 0.25, "spread_mult": 3, "adverse_ticks": 1}
|
|
}
|