auto-sync: 2026-04-17 20:24:28

This commit is contained in:
cfdaily
2026-04-17 20:24:28 +08:00
parent 2db9434b2c
commit 9ec297401a
@@ -214,6 +214,10 @@ class ATRIndicator:
Returns: Returns:
新的ATR值 新的ATR值
""" """
if self.method == 'sma':
# SMA不适合增量更新,这里简化处理,用户应该重新计算完整序列
raise ValueError("SMA方法不支持增量更新,请重新计算完整序列")
# 计算当前TR # 计算当前TR
tr1 = abs(high - low) tr1 = abs(high - low)
tr2 = abs(high - prev_close) tr2 = abs(high - prev_close)
@@ -221,18 +225,15 @@ class ATRIndicator:
tr = max(tr1, tr2, tr3) tr = max(tr1, tr2, tr3)
if self._last_atr is None: if self._last_atr is None:
# 还没有足够数据,直接返回TR # 还没有足够数据,初始化ATR为TR
self._last_atr = tr
return tr return tr
if self.method == 'sma': # EMA支持增量更新
# SMA不适合增量更新,这里简化处理,用户应该重新计算完整序列 alpha = 1.0 / self.period
raise ValueError("SMA方法不支持增量更新,请重新计算完整序列") new_atr = self._last_atr * (1 - alpha) + tr * alpha
else: self._last_atr = new_atr
# EMA支持增量更新 return new_atr
alpha = 1.0 / self.period
new_atr = self._last_atr * (1 - alpha) + tr * alpha
self._last_atr = new_atr
return new_atr
def calculate_atr( def calculate_atr(