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:
37
kis_trader/engine/atr_series.py
Normal file
37
kis_trader/engine/atr_series.py
Normal 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
|
||||
Reference in New Issue
Block a user