feat: 전일 미청산 데이트레이딩 포지션 즉시 청산 안전장치
15:20 EOD 강제청산이 누락/실패하면 포지션이 하룻밤 갭 리스크에 노출된 채 다음 날 일반 청산 로직을 탄다(2026-09-22 LG씨엔에스 7주 → 익일 09:30 분할매도). - exit_service.close_stale_positions(): 진입일이 오늘이 아닌 포지션을 장중 시장가 전량 청산, 현재가 조회 실패 시 진입가 폴백, 실패 시 다음 30초 사이클에서 재시도 - 청산 사이클(check_and_exit_positions) 및 스케줄러 기동 직후 양쪽에서 호출 - 테스트 5건, CLAUDE.md §7.3 반영 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -67,6 +67,14 @@ async def daytrading_scheduler() -> None:
|
||||
restored = await day_trading_state.restore_from_db(db)
|
||||
if restored:
|
||||
logger.info(f"[DayTrading] 시작 시 {restored}개 포지션 복원됨")
|
||||
# 전일 미청산 포지션은 기동 직후(장중이면) 즉시 청산 — EOD 누락 안전장치
|
||||
try:
|
||||
from app.services.daytrading.exit_service import close_stale_positions
|
||||
stale = await close_stale_positions()
|
||||
if stale:
|
||||
logger.warning(f"[DayTrading] 기동 시 전일 포지션 {len(stale)}건 청산")
|
||||
except Exception as e:
|
||||
logger.error(f"[DayTrading] 기동 시 전일 포지션 청산 실패: {e}", exc_info=True)
|
||||
except Exception as e:
|
||||
logger.error(f"[DayTrading] 시작 시 포지션 복원 실패: {e}", exc_info=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user