- GET /orb/sessions now returns ran_today boolean (true if daily_state.phase
is set, meaning engine ran ORB detection for today)
- POST /orb/sessions/{id}/run_today: fires ORB detection in background and
injects remaining today-events (breakout, stop, EOD) into the live schedule
- ORBAutoScheduler.run_session_now(): coroutine that runs detection then
splices session's future events into self._today_schedule
- Session card shows a cyan "지금 시작 (현재 가격 기준)" button when
ran_today === false; hides it once detection has run
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Breakout check interval: change from every-1-min to every sim_bar_minutes,
matching the backtest bar aggregation frequency; align timeout base to
market open (consistent with orb_simulator.py)
- Rejected/cancelled orders: add order_rejected flag so cancelled orders no
longer fall through to position creation (phantom positions)
- Stop/EOD exit fill price: poll broker fill price after close_position()
instead of recording at current_stop, capturing gap-through losses
- Stop/EOD close_position: pass qty=int(pos.shares) so multi-session
same-ticker scenarios only close the current session's share count
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>