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

Python中如何实现与TradingView一致的跨周期RSI计算

TradingView RSI跨周期复刻结果偏差排查及修正方案

核心错误点定位

  • 计算基准完全不符合原生RSI规则:TradingView默认RSI的变动值计算统一采用相邻K线的收盘价差值,规则为当期变动 = 当期收盘价 - 上期收盘价,向上变动值取max(当期变动, 0),向下变动值取abs(min(当期变动, 0))。你当前代码根据全局变量l_a切换high/low价格作为计算基准,涨跌幅计算分别取高价、低价序列,分子分母数据源不统一,直接导致数值偏差和涨跌序列错位。
  • 硬编码索引步长和起点导致样本取错:递归终止分支中硬编码索引起点i=8、遍历步长i+=8无逻辑依据。跨周期计算时,大小周期的K线对应数量是动态值(如1小时K线对应12根5分钟K线、8根30分钟K线),固定写死步长和起点会直接取错参与初始均值计算的K线样本,初始简单平均值错误后,后续Wilder平滑结果会持续偏移。
  • 递归步进逻辑错位:递推平滑均值时索引进位固定为m+1,未按小周期K线的实际索引步进,会导致参与平滑计算的变动值顺序错乱,进一步放大误差。
  • 全局变量引入不确定风险:RSI计算逻辑依赖全局变量l_a切换计算规则,一旦全局变量在计算过程中被修改,同一时间点的RSI计算逻辑会不一致,直接出现涨跌序列和TradingView反向的问题。

修正步骤

  1. 先对齐单周期RSI计算逻辑,再做跨周期适配
    先完成同周期RSI的逻辑对齐,保证和TradingView同周期结果误差在0.1%以内,再叠加跨周期逻辑。标准Wilder平滑RSI核心实现参考:
    def standard_rsi(close_prices: list[float], period: int) -> list[float]:
        # 计算相邻K线收盘价变动
        changes = [close_prices[i] - close_prices[i-1] for i in range(1, len(close_prices))]
        # 前period个变动值计算初始简单平均
        init_up = [max(c, 0) for c in changes[:period]]
        init_down = [abs(min(c, 0)) for c in changes[:period]]
        avg_up = sum(init_up) / period
        avg_down = sum(init_down) / period
    
        rsi_result = [None] * (period + 1)
        # 后续按Wilder平滑公式递推
        for i in range(period, len(changes)):
            curr_change = changes[i]
            curr_up = max(curr_change, 0)
            curr_down = abs(min(curr_change, 0))
            # Wilder平滑公式
            avg_up = (avg_up * (period - 1) + curr_up) / period
            avg_down = (avg_down * (period - 1) + curr_down) / period
    
            if avg_down == 0:
                curr_rsi = 100.0
            elif avg_up == 0:
                curr_rsi = 0.0
            else:
                rs = avg_up / avg_down
                curr_rsi = 100 - 100 / (1 + rs)
            rsi_result.append(curr_rsi)
        return rsi_result
    
  2. 修正跨周期适配逻辑
    • 删除所有硬编码的索引步长、起点值,根据加载的大小周期时间粒度动态计算K线对应比例:比如大周期为4小时、小周期为30分钟时,每根大周期K线对应8根小周期K线,比例值随周期选择动态计算。
    • 计算大周期某根K线对应的小周期RSI时,截取截止到该大周期K线收盘时间点的全部小周期K线收盘价序列,传入标准RSI函数计算,删除所有和高低价、买卖方向相关的分支判断——RSI本身是基于收盘价的动量指标,不需要结合高低点或交易信号调整计算规则。
    • 逐根校验小周期K线的时间戳、收盘价和TradingView完全一致,K线缺失、时间戳偏移会直接导致计算结果偏差。

你之前复刻MACD、布林带能够得到可接受的结果,核心原因是这两个指标的计算中使用了正确的价格序列,而RSI实现中额外加入了高低点切换、硬编码步长的自定义逻辑,才导致结果大幅偏离。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:03:23