auto-sync: 2026-04-17 20:24:28
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user