[2026-05-29] 재진입 쿨다운 기준 수정
This commit is contained in:
@@ -45,6 +45,8 @@ class VolatilityBreakout:
|
||||
self.today_open = {} # ticker → 당일 시가
|
||||
self.targets = {} # ticker → 목표가
|
||||
self._entry_times: dict = {} # ticker → 마지막 진입 datetime (쿨다운 추적)
|
||||
self._exit_times: dict = {} # ticker -> 마지막 최종 청산 datetime (쿨다운 추적)
|
||||
self._tp_closed_tickers: set[str] = set() # TP로 전량 청산된 당일 재진입 차단
|
||||
|
||||
# ── AI 컨텍스트 로드 ──
|
||||
|
||||
@@ -119,6 +121,14 @@ class VolatilityBreakout:
|
||||
def get_target(self, ticker: str) -> float:
|
||||
return self.targets.get(ticker, 0.0)
|
||||
|
||||
def mark_final_exit(self, ticker: str, reason: str, exit_time: datetime | None = None):
|
||||
"""최종 청산 중 당일 재진입 제한에 필요한 상태를 기록한다."""
|
||||
exit_time = exit_time or datetime.now()
|
||||
if reason in ("TIME", "FORCE"):
|
||||
self._exit_times[ticker] = exit_time
|
||||
elif reason in ("TP1", "TP2"):
|
||||
self._tp_closed_tickers.add(ticker)
|
||||
|
||||
# ── 진입 신호 판단 ──
|
||||
|
||||
def check_entry(self, ticker: str, name: str,
|
||||
@@ -136,10 +146,15 @@ class VolatilityBreakout:
|
||||
result["reason"] = f"진입 시간 외 ({now})"
|
||||
return result
|
||||
|
||||
# 동일 종목 재진입 쿨다운 체크
|
||||
last_entry = self._entry_times.get(ticker)
|
||||
if last_entry is not None:
|
||||
elapsed = (now_dt - last_entry).total_seconds() / 60
|
||||
# TP로 전량 청산된 종목은 당일 재진입하지 않는다.
|
||||
if ticker in self._tp_closed_tickers:
|
||||
result["reason"] = "TP 당일 재진입 차단"
|
||||
return result
|
||||
|
||||
# TIME/FORCE 청산 후 쿨다운은 진입 시각이 아니라 청산 시각 기준이다.
|
||||
last_exit = self._exit_times.get(ticker)
|
||||
if last_exit is not None:
|
||||
elapsed = (now_dt - last_exit).total_seconds() / 60
|
||||
if elapsed < TICKER_REENTRY_COOLDOWN_MIN:
|
||||
result["reason"] = f"재진입 쿨다운 ({elapsed:.0f}분 / {TICKER_REENTRY_COOLDOWN_MIN}분)"
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user