fix: marketable entries price from live last + time-of-day rvol arms fast path

Day-22 forensic (BIYA session): 6 entry submissions, 0 fills — IREX missed
+1.7R, IRE +1.65R by one cent. Two root causes fixed:

1. Slow-path limit rested AT the trigger while price ran 2% past it, and
   retries reused the same stale price. Marketable model now prices from
   max(trigger, live last) via price_provider; the anti-chase extension
   gate gets the live ref too (was an entry_ref==trigger no-op on this
   path). TRADING_ENTRY_FILL_MODEL flipped to marketable.

2. Fast trigger path armed nothing all day: legacy rvol (cum-so-far /
   full-day MEAN) is ~0.1-0.3 minutes after the open for a normal heavy
   name and its mean is poisoned by reverse-split/prior-squeeze days
   (BIYA legacy 1.27 vs real activity 481x median). New rvol_tod =
   cum / (MEDIAN(20d) * elapsed-session fraction) drives arm eligibility
   and the scanner keep-filter; legacy rvol untouched for validated
   boundaries (gap-squeeze rvol>=5).

Also: stagnation time-stop (TRADING_EXIT_STAGNATION_MIN/_R, default OFF)
in simulate_exit + manage_live with sweep_exits.py variants for
validation before any live enable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
momentum devandClaude Fable 5 committed 2026-07-20 15:40:15 -05:00
1 parent f10a8033a1
commit 5597250ff1
11 files changed
+894 -8

No files matched your search

+5
View File
@@ -80,6 +80,11 @@ def variants() -> dict[str, ExitConfig]:
profit_lock_tiers=[(.12, .05), (.25, .16), (.40, .30)])
v["lock_only_mid"] = ExitConfig(target_r=10.0,
profit_lock_tiers=[(.08, .03), (.15, .09), (.25, .18), (.40, .30)])
# --- STAGNATION time-stop layered on the live trail: exit if high-water
# never reached +min_r within N minutes (dead-money reclaim) ---
for mins, min_r in ((15, 0.25), (30, 0.25), (45, 0.25), (60, 0.25), (30, 0.5)):
v[f"stag{mins}_r{int(min_r*100)}"] = ExitConfig(
**_trail, stagnation_minutes=mins, stagnation_min_r=min_r)
return v