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

@@ -67,7 +67,8 @@ from kis_trader.engine.tail_tick_replay import (
tail_timeframe_min,
try_limit_fill_on_bar_with_ticks,
)
from kis_trader.strategies.base import is_strategy_eod_bar
from kis_trader.engine.atr_series import compute_atr_series
from kis_trader.engine.strategy_eod import is_strategy_eod_bar
from kis_trader.engine.tail_env_keys import (
tail_env_bool,
tail_env_float,
@@ -374,36 +375,6 @@ def compute_sma_series(closes: List[float], period: int = 20) -> List[Optional[f
return sma_list
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
def _t2dt(t: str) -> datetime:
"""candle_time 문자열 → datetime."""
return datetime.strptime(t, "%Y%m%d%H%M")