Switched entry orders from LIMIT to MARKET
Compiled Truth. On 2026-04-30 mid-market, after three consecutive LMT
entries (signals #118, #123, #126) failed to fully fill - including one
(signal #126) that partial-filled 20 contracts and orphaned them at IBKR
with no software supervision (GH #52) - we flipped entry_order_type from
LIMIT to MARKET in config.json:171. Speed > entry-price perfection
is the right tradeoff for fast 0DTE momentum signals. The ones we most
want to catch are exactly the ones LMT @ entry-reference can’t catch.
State
- Changed:
config.jsonposition_manager.entry_order_type:"LIMIT"→"MARKET". Documented inline with reference to GH #52. - Kept:
entry_fill_timeout_sec: 60as safety net for any legacy LIMIT path (scale-ins, etc.). MARKET fills should hit instantly on 0DTE SPY so this won’t fire under normal conditions. - Kept:
emergency_exit_order_type: "MARKET"(was already MARKET). - Commit:
e94e9e0(feat(positions): switch entry orders from LIMIT to MARKET).
Why this matters
Three live entry-fill misses in one session, all on signals where “early and right” was the right call:
- #118 (08:45 BULL CALL): LMT @ $2.35, never filled, 60s timeout cancelled cleanly. Full miss. Trade #87 stuck OPEN until manually cleared.
- #123 (09:46 BULL CALL): LMT @ $2.09, never filled, same pattern. Trade #92 stuck OPEN.
- #126 (09:54 BULL CALL): LMT @ $1.95, partial-filled 20/100,
60s timeout fired and cancelled the remaining 80. The 20 owned
contracts ended up at IBKR with
position_state.state='CLOSED'and no TP/SL/monitor. Manually closed viascripts/force_close_233.pyat +$640 (lucky exit; could have been a full $3,900 wipeout).
Pattern: LMT @ entry-reference is too passive for momentum. By the time the order reaches the book, the option’s ask has lifted past LMT, and the order rests at a stale price for 60s before being cancelled.
MARKET orders pay the spread but eliminate the missed-entry tax. For a project mandated to win at 80% across 8/10 trades, missing valid signals is a much worse failure mode than slightly worse fills.
Open Threads
- The partial-fill orphan path (
_cancel_entryracing against broker partial fills) still needs defensive logic for any future LMT scale-in or re-entry path. Tracked in GH #52, fix in flight via Codex (Task #28 alongside #24 and cancel-entry visibility). - We should observe slippage on MARKET entries over the next few sessions to validate the tradeoff. If average slippage > 5% of signal premium, revisit (could go to marketable LMT @ ask + cap).
See Also
writing/2026-04-30-cooldowns-removed.md- same-day strategy change- GH #52 - partial-fill orphan
- (memory)
project_pm_ibkr_exit_invariant.md- PM exit intent must match broker reality
2026-04-30 | mid-market user directive | After GH #52 incident manual-close. Switched entry order type with one-line config change, brain note, and trader awareness that we’re paying spread for fill certainty.