You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现TradingView SMMA(平滑移动平均线)结果不符,求错误排查

问题排查与修复方案

核心错误原因

你代码的问题出在SMMA计算的时间顺序完全颠倒:

  • 正确逻辑:用序列最早的length个数据计算初始SMA,再顺着时间从旧到新迭代后续所有数据计算SMMA
  • 你的逻辑:用序列末尾的length个数据计算初始SMA,再重复用末尾的后续数据迭代,等于已经计入初始SMA的数值被重复代入公式计算,结果自然和TradingView不一致。

修正后的代码

import pandas as pd
import logging as log

def smma(src, length):
    data_length = len(src)
    if data_length < length:
        raise ValueError("数据源长度不能小于计算周期")
    
    # 取最早的length个数据计算初始SMA,对应第一个有效SMMA值
    initial_sma = pd.Series(src[:length]).mean()
    current_smma = initial_smma
    log.info(f"First smma value = {current_smma}")

    # 从初始SMA之后的第一个新数据开始迭代计算
    for i in range(length, data_length):
        current_smma = (current_smma * (length - 1) + float(src[i])) / length
        log.info(f"索引 = {i} src[i] = {src[i]} smma = {current_smma}")
    
    return current_smma

额外注意事项

请确认你的src列表排序和TradingView一致:索引越小对应时间越早的K线数据,索引越大对应时间越新的K线数据,如果排序颠倒也会导致计算结果偏差。
如果需要返回所有历史SMMA值而非仅最新值,迭代时把每个current_smma存入列表返回即可。

内容的提问来源于stack exchange,提问作者Greggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:15:04