fix: Refactor imports and remove unused ATR calculation

Changes:
- Updated import paths for `compute_atr_series` and `is_strategy_eod_bar` to reflect new module structure.
- Removed the unused `compute_atr_series` function from `tail_engine.py`, streamlining the codebase.

Impact:
- These changes enhance code organization and maintainability by ensuring that only necessary components are imported and utilized, while also eliminating redundant code.
This commit is contained in:
2026-07-06 20:27:39 +09:00
parent 844d32f39c
commit ad0ad308d1
7 changed files with 181 additions and 154 deletions

View File

@@ -0,0 +1,37 @@
#!/usr/bin/env python3
"""
kis_trader/engine/atr_series.py — ATR 시리즈 (엔진·전략 공통, 순환 import 방지)
"""
from __future__ import annotations
from typing import Dict, List, Optional
def compute_atr_series(candles: List[Dict], period: int = 14) -> List[Optional[float]]:
"""
ATR(Average True Range) 변동성 지표 계산기 (엔진 내부용).
■ RMA(Wilder's Smoothing) 방식 — TradingView 기본과 동일 (2026-06 SMA→RMA 전환).
ATR_t = (ATR_{t-1} × (period-1) + TR_t) / period
· 첫 ATR(인덱스 period)은 SMA(TR[1..period])로 시드.
· SMA 대비: 급락(큰 TR)이 14봉 지나도 '계단식 급락' 없이 완만히 감쇠 →
급변장에서 손절/목표가가 덜 출렁임.
"""
atr_list: List[Optional[float]] = [None] * len(candles)
if len(candles) < period + 1:
return atr_list
trs = [0.0] * len(candles)
for i in range(1, len(candles)):
hi = float(candles[i]["high"])
lo = float(candles[i]["low"])
prev_cl = float(candles[i - 1]["close"])
trs[i] = max(hi - lo, abs(hi - prev_cl), abs(lo - prev_cl))
# 첫 ATR(인덱스 period): TR[1..period] 단순 평균으로 시드 (Wilder 초기값)
prev_atr = sum(trs[1:period + 1]) / period
atr_list[period] = prev_atr
# 이후: Wilder RMA 누적 감쇠 (이전 ATR×(n-1) + 오늘 TR) / n
for i in range(period + 1, len(candles)):
prev_atr = (prev_atr * (period - 1) + trs[i]) / period
atr_list[i] = prev_atr
return atr_list