[2026-05-21] 일일 리포트 — 17건 승8패9 -147,137원 / 재진입 쿨다운 30분 신규 적용
This commit is contained in:
@@ -12,6 +12,7 @@ TP1_PCT = 0.02 # 1차 익절 +2% → 50% 매도
|
||||
TP2_PCT = 0.03 # 2차 익절 +3% → 전량
|
||||
SL_PCT = 0.015 # 손절 -1.5%
|
||||
MAX_HOLD_MIN = 120
|
||||
TICKER_REENTRY_COOLDOWN_MIN = 30 # 동일 종목 재진입 금지 시간(분)
|
||||
|
||||
# ── 리스크 ──
|
||||
POS_SIZE_PCT = 0.20
|
||||
|
||||
@@ -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})",
|
||||
|
||||
Reference in New Issue
Block a user