@ -509,10 +509,17 @@ class ORBAutoScheduler:
self . _log ( f " 🔄 지금 시작: { session_name } — ORB 감지 실행 중 (현재 시세 기준)... " )
self . _log ( f " 🔄 지금 시작: { session_name } — ORB 감지 실행 중 (현재 시세 기준)... " )
# Run detection now (blocking in thread so we don't stall the event loop )
# Phase 1: Run ORB detection (fetches historical bars for ORB window )
await self . _run_trading ( " orb_detect " , [ session_name ] , date_str )
await self . _run_trading ( " orb_detect " , [ session_name ] , date_str )
# Inject remaining future events into the live schedule
# Phase 2: Immediately check for breakouts using current snapshot prices.
# This is the "지금 시작" core — regardless of whether scheduled breakout
# windows have already passed, we check current price right now.
self . _log ( f " 🔍 { session_name } : 현재 가격으로 브레이크아웃 즉시 체크... " )
await self . _run_trading ( " breakout " , [ session_name ] , date_str )
# Phase 3: Inject remaining future events (stop checks + EOD exit only).
# Skip all breakout events — we just ran the manual check above.
params = _load_session_params ( self . _db_path , session_name )
params = _load_session_params ( self . _db_path , session_name )
all_events = build_schedule ( today , * * params )
all_events = build_schedule ( today , * * params )
for ev in all_events :
for ev in all_events :
@ -522,15 +529,17 @@ class ORBAutoScheduler:
existing_names = { e [ " name " ] for e in self . _today_schedule }
existing_names = { e [ " name " ] for e in self . _today_schedule }
injected = 0
injected = 0
for ev in all_events :
for ev in all_events :
if ev [ " et_dt " ] < = now_et :
if ev [ " kind " ] == " breakout " :
# Past events: mark as completed so the loop skips them
# Already handled by the manual check above
self . _completed . add ( ev [ " name " ] )
elif ev [ " et_dt " ] < = now_et :
self . _completed . add ( ev [ " name " ] )
self . _completed . add ( ev [ " name " ] )
elif ev [ " name " ] not in existing_names :
elif ev [ " name " ] not in existing_names :
self . _today_schedule . append ( ev )
self . _today_schedule . append ( ev )
injected + = 1
injected + = 1
self . _today_schedule . sort ( key = lambda e : ( e [ " et_dt " ] , e . get ( " session " , " " ) ) )
self . _today_schedule . sort ( key = lambda e : ( e [ " et_dt " ] , e . get ( " session " , " " ) ) )
self . _log ( f " ✓ { session_name } : { injected } 이벤트 추가됨 ( 오늘 남은 일정 포함 )" )
self . _log ( f " ✓ { session_name } : { injected } 이벤트 추가됨 ( 스톱/EOD 일정 )" )
return { " session " : session_name , " injected " : injected }
return { " session " : session_name , " injected " : injected }