Entry-path unification (step 3): selectable fill model on the auto path

The last real divergence between the two entry paths was the fill model. Make it
a flag (TRADING_ENTRY_FILL_MODEL), default 'resting' (zero behaviour change):
- resting    — rest a buy-limit AT the breakout level (today's behaviour; fills
               only on a pullback, misses runners that gap up and never return).
- marketable — limit a hair above the trigger (entry * (1+trigger_slippage_pct)),
               fills as price breaks UP through the level (the fast path's
               runner-catching behaviour). The limit caps the fill, so a
               halt-resume gap-through can't be chased. R is still measured from
               the level, not the limit.

Operator chose ship-both-default-resting: flip to 'marketable' to A/B with eyes
on the first session. Boot log shows "fill=<model>".

With gates already unified (steps 1-2: anti-chase, liquidity) the two paths now
run the same gate set and the fill model is selectable — the substantive
unification is done. The remaining single-_place_entry structural merge is
cosmetic (gates are shared) and deliberately not forced through.

Tests: resting rests at the level, marketable lifts above the trigger. 69 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
momentum devandClaude Opus 4.8 committed 2026-06-24 07:08:07 -04:00
1 parent bb7674a708
commit 7e602b8b30
3 files changed
+37 -1

No files matched your search

+1
View File
@@ -807,6 +807,7 @@ def main(argv: list[str] | None = None) -> int:
print(
f"[boot] entry gates: VWAP {'ENFORCED' if _es.require_above_vwap else 'shadow-only'}"
f", anti-chase {'ON (auto path)' if _es.unified_entry else 'fast-path only'}"
f", fill={_es.entry_fill_model}"
f", daily-cap {_es.max_fresh_entries_per_day or 'off'}"
f", risk-cap ${_es.max_risk_dollars:.0f}"
)