[2026-05-21] 일일 리포트 — 17건 승8패9 -147,137원 / 재진입 쿨다운 30분 신규 적용

This commit is contained in:
2026-05-21 15:34:15 +09:00
parent adf755624a
commit bec4eb71b7
3 changed files with 105 additions and 6 deletions
+17 -6
View File
@@ -12,7 +12,7 @@ from app.config import (
ENTRY_START, ENTRY_END,
AI_CONTEXT_PATH, AI_MIN_SCORE,
AI_BOOST_MULTI, MIN_TRADE_AMOUNT,
KOSPI_MIN_CHG
KOSPI_MIN_CHG, TICKER_REENTRY_COOLDOWN_MIN
)
logger = logging.getLogger(__name__)
@@ -40,10 +40,11 @@ class VolatilityBreakout:
"""
def __init__(self):
self.context = DEFAULT_CONTEXT.copy()
self.prev_data = {} # ticker → {high, low, amount} 전일 데이터
self.today_open = {} # ticker → 당일 시가
self.targets = {} # ticker → 목표가
self.context = DEFAULT_CONTEXT.copy()
self.prev_data = {} # ticker → {high, low, amount} 전일 데이터
self.today_open = {} # ticker → 당일 시가
self.targets = {} # ticker → 목표가
self._entry_times: dict = {} # ticker → 마지막 진입 datetime (쿨다운 추적)
# ── AI 컨텍스트 로드 ──
@@ -122,11 +123,20 @@ class VolatilityBreakout:
result = {"signal": False, "reason": "", "boosted": False, "multiplier": 1.0}
# 시간 체크
now = datetime.now().strftime("%H:%M")
now_dt = datetime.now()
now = now_dt.strftime("%H:%M")
if not (ENTRY_START <= now <= ENTRY_END):
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
if elapsed < TICKER_REENTRY_COOLDOWN_MIN:
result["reason"] = f"재진입 쿨다운 ({elapsed:.0f}분 / {TICKER_REENTRY_COOLDOWN_MIN}분)"
return result
# 목표가 확인
target = self.targets.get(ticker, 0)
if target <= 0:
@@ -163,6 +173,7 @@ class VolatilityBreakout:
if boosted:
multiplier = min(multiplier * AI_BOOST_MULTI, 1.5)
self._entry_times[ticker] = now_dt # 진입 시간 기록
result.update({
"signal" : True,
"reason" : f"목표가 돌파 ({current_price:,} >= {target:,.0f})",