[2026-05-19] 세션 분리 + L3→B안 전환 + /midday 장중 분석 추가
- L3 하드 중단 제거 → B안(연속 손절별 포지션 축소) 적용 0회×1.0 / 1회×0.7 / 2회×0.5 / 3+회×0.3, 익절 시 한 단계 회복 - 아침·점심 세션 분리: 11:00 이후 midday_context.json 감지 시 점심 세션 자동 시작 (12:00 고정 시작 제거 → 이벤트 기반) - app/ai/midday.py: 장중 데이터 수집 스크립트 신규 작성 - .claude/commands/midday.md: /midday 슬래시 커맨드 신규 작성 - scripts/run_midday.ps1: 11:20 스케줄러 스크립트 신규 작성 - setup_scheduler.ps1: StockBot_Midday 태스크 추가 - CLAUDE.md: 전체 문서 업데이트 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+11
-6
@@ -36,6 +36,14 @@ class RiskManager:
|
||||
|
||||
# ── 손실 기록 ──
|
||||
|
||||
# B안: 연속 손절 수 → 포지션 크기 배율
|
||||
_CONSEC_MULT = {0: 1.0, 1: 0.7, 2: 0.5}
|
||||
_CONSEC_MIN = 0.3 # 3회 이상 최소값
|
||||
|
||||
def get_consec_multiplier(self) -> float:
|
||||
"""연속 손절 수에 따른 포지션 크기 배율 (B안)"""
|
||||
return self._CONSEC_MULT.get(self.consec_loss, self._CONSEC_MIN)
|
||||
|
||||
def record_trade(self, pnl: float):
|
||||
"""매매 결과 기록 및 손실 한도 체크"""
|
||||
self.daily_pnl += pnl
|
||||
@@ -45,20 +53,17 @@ class RiskManager:
|
||||
if pnl < 0:
|
||||
self.consec_loss += 1
|
||||
else:
|
||||
self.consec_loss = 0
|
||||
# 익절 시 한 단계만 회복 (0으로 리셋 아님)
|
||||
self.consec_loss = max(0, self.consec_loss - 1)
|
||||
|
||||
self._check_limits()
|
||||
|
||||
def _check_limits(self):
|
||||
"""L1~L5 손실 한도 체크"""
|
||||
"""L2/L4/L5 손실 한도 체크 (L3는 B안 포지션 축소로 대체)"""
|
||||
# L2: 일일 누적 손실 -3%
|
||||
if self.daily_pnl / self.init_cash < -DAILY_SL_PCT:
|
||||
self._stop("L2", f"일일 손실 {self.daily_pnl/self.init_cash*100:.1f}% 도달")
|
||||
|
||||
# L3: 연속 손절 3회
|
||||
if self.consec_loss >= CONSEC_LOSS:
|
||||
self._stop("L3", f"{CONSEC_LOSS}연속 손절 발생")
|
||||
|
||||
# L4: 주간 누적 -7%
|
||||
if self.weekly_pnl / self.init_cash < -0.07:
|
||||
self._stop("L4", f"주간 손실 {self.weekly_pnl/self.init_cash*100:.1f}%")
|
||||
|
||||
Reference in New Issue
Block a user