M1 │ 스캐너 최소 거래량 100만→10만주 │ kosdaq_scanner.py │
├─────┼─────────────────────────────────────────────────────┼────────────────────────────────┤ │ M2 │ ADX 히스테리시스 18/22 (플리핑 방지) │ mean_reversion_strategy.py │ ├─────┼─────────────────────────────────────────────────────┼────────────────────────────────┤ │ M3 │ 분할매도 최소 수익 1.0%→0.5% │ mean_reversion_strategy.py │ ├─────┼─────────────────────────────────────────────────────┼────────────────────────────────┤ │ M4 │ ORB 갭 필터 4% + 레인지 폭 0.3% 최소 │ day_trading_strategy.py │ ├─────┼─────────────────────────────────────────────────────┼────────────────────────────────┤ │ M5 │ 쿨다운 스트릭 부분매도 시 미변경 │ daytrading/position_manager.py │ ├─────┼─────────────────────────────────────────────────────┼────────────────────────────────┤ │ M6 │ MDD 강제매도 loss_tracker 기록 제거 (허위 ban 방지) │ mdd_manager.py │ ├─────┼─────────────────────────────────────────────────────┼────────────────────────────────┤ │ M7 │ RSI Wilder 스무딩으로 통일 │ mean_reversion_strategy.py
This commit is contained in:
@@ -18,8 +18,9 @@ logger = logging.getLogger(__name__)
|
||||
# 가격 필터 (CLAUDE.md 섹션 6.4)
|
||||
MIN_PRICE_KRW = 5_000
|
||||
|
||||
# 전일 거래량 최솟값: 100만주 미만 종목 제외 (유동성 부족)
|
||||
MIN_DAILY_VOLUME = 1_000_000
|
||||
# 전일 거래량 최솟값: 10만주 미만 종목 제외 (유동성 부족)
|
||||
# market_analyzer.py와 동일 수준. LIQUIDITY_PERCENTILE=0.80 이 추가 필터 역할.
|
||||
MIN_DAILY_VOLUME = 100_000
|
||||
|
||||
# 거래대금 상위 20% 임계값 (하위 80% 제외)
|
||||
LIQUIDITY_PERCENTILE = 0.80
|
||||
@@ -155,8 +156,13 @@ class KosdaqScanner:
|
||||
pct_vs_lower = (td.close - bb_lower) / bb_lower * 100
|
||||
volume_ratio = td.volume / volume_ma20
|
||||
|
||||
rsi_score = max(0.0, (25.0 - rsi14) / 25.0)
|
||||
bb_score = min(max(0.0, (0.0 - pct_vs_lower) / 3.0), 1.0) # 상한 1.0 — 폭락 종목 점수 왜곡 방지
|
||||
# [S8] RSI 점수: config의 MEAN_REVERSION_RSI_THRESHOLD(46.0) 기준으로 정규화
|
||||
from app.core.config import settings as _settings
|
||||
_rsi_threshold = _settings.MEAN_REVERSION_RSI_THRESHOLD # 46.0
|
||||
rsi_score = max(0.0, (_rsi_threshold - rsi14) / _rsi_threshold)
|
||||
# [S8] BB 점수: CLAUDE.md 6.2 기준 -3%~+1.5% 구간 보상
|
||||
# pct_vs_lower <= -3%: 최대 점수 1.0, +1.5% 이상: 점수 0.0
|
||||
bb_score = min(max(0.0, (1.5 - pct_vs_lower) / 4.5), 1.0)
|
||||
volume_score = min(volume_ratio, 2.0)
|
||||
total_score = rsi_score * 0.5 + bb_score * 0.3 + volume_score * 0.2
|
||||
|
||||
@@ -169,8 +175,8 @@ class KosdaqScanner:
|
||||
rsi_turning = rsi_prev is not None and rsi14 > rsi_prev
|
||||
|
||||
reason_parts = []
|
||||
if rsi14 <= 25:
|
||||
reason_parts.append(f"RSI({rsi14:.1f})≤25")
|
||||
if rsi14 <= _rsi_threshold:
|
||||
reason_parts.append(f"RSI({rsi14:.1f})≤{_rsi_threshold:.0f}")
|
||||
if pct_vs_lower <= 0:
|
||||
reason_parts.append(f"BB하단({pct_vs_lower:.1f}%)")
|
||||
if volume_ratio >= 1.5:
|
||||
|
||||
Reference in New Issue
Block a user