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

为何CCI指标计算公式出错?TradingView结果与本地计算不符

问题原因及解决方法

你的Pine Script代码和Excel/自研程序的sum结果不一致,主要是以下几个原因:

1. SMA的提前计算逻辑差异

TradingView的sma()函数在图表bar数量不足设定的length时,会自动计算已有bar的平均值。比如设置length=10,当图表只有5个bar时,ma会是这5个bar的src平均值;而你的Excel或自研程序可能只在bar数达到10个后才开始计算完整的10期SMA,前期bar不生成有效值,这直接导致了sum结果在前期bar的差异。

2. 数据范围与索引对齐问题

  • 确认TradingView和本地计算使用的K线数据完全一致:包括周期(1分钟/1小时等)、起始时间、是否包含未闭合的当前bar(TradingView实时图表会显示未闭合bar,而Excel通常只用已闭合数据)。
  • Pine Script中src[0]是当前bar的数值,src[1]是前一个bar,循环i=0 to length-1取的是**最近length个bar(含当前)**的数值。如果你的本地计算是取前length个已闭合bar(不含当前),sum的计算对象就会不同,结果自然不一致。

3. 精度差异

TradingView的价格数据精度(如小数点后位数)可能和本地数据源不同,累加后误差被放大,也会导致sum结果出现细微差异。


修正后的CCI代码(完全匹配官方公式)

//@version=4
study(title="Commodity Channel Index", shorttitle="CCI", format=format.price, precision=2, resolution="")
length = input(10, minval=1)
src = input(hlc3, title="Source") // 对应公式中的TP=(High+Low+Close)/3

// 计算n期TP的简单移动平均,仅当bar数足够时生效
ma = bar_index >= length - 1 ? sma(src, length) : na

// 计算MDn对应的绝对值总和
sum_abs = 0.0
if bar_index >= length - 1
    for i = 0 to length - 1
        sum_abs := sum_abs + abs(src[i] - ma)

// 计算MDn和最终CCI
md = sum_abs / length
cci = (src - ma) / (0.015 * md)

plot(cci, "CCI", color=#996A15)
plot(sum_abs, "Sum of Abs Differences", color=#FF0000) // 用于对比sum结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:54:14