From 9ec297401aff124611698d86a213ff77f211391d Mon Sep 17 00:00:00 2001 From: cfdaily Date: Fri, 17 Apr 2026 20:24:28 +0800 Subject: [PATCH] auto-sync: 2026-04-17 20:24:28 --- .../atr_indicator.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/zhangfei-technical/research/task-20260417-atr-indicator/atr_indicator.py b/zhangfei-technical/research/task-20260417-atr-indicator/atr_indicator.py index a0ab14c29..a7c413c50 100644 --- a/zhangfei-technical/research/task-20260417-atr-indicator/atr_indicator.py +++ b/zhangfei-technical/research/task-20260417-atr-indicator/atr_indicator.py @@ -214,6 +214,10 @@ class ATRIndicator: Returns: 新的ATR值 """ + if self.method == 'sma': + # SMA不适合增量更新,这里简化处理,用户应该重新计算完整序列 + raise ValueError("SMA方法不支持增量更新,请重新计算完整序列") + # 计算当前TR tr1 = abs(high - low) tr2 = abs(high - prev_close) @@ -221,18 +225,15 @@ class ATRIndicator: tr = max(tr1, tr2, tr3) if self._last_atr is None: - # 还没有足够数据,直接返回TR + # 还没有足够数据,初始化ATR为TR + self._last_atr = tr return tr - if self.method == 'sma': - # SMA不适合增量更新,这里简化处理,用户应该重新计算完整序列 - raise ValueError("SMA方法不支持增量更新,请重新计算完整序列") - else: - # EMA支持增量更新 - alpha = 1.0 / self.period - new_atr = self._last_atr * (1 - alpha) + tr * alpha - self._last_atr = new_atr - return new_atr + # EMA支持增量更新 + 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(