Pine Script stdev函数转Python代码出错:问题排查与SUM函数疑问
Python代码的错误点
- 循环范围错误:Pine Script中
for i = 0 to length - 1会执行length次循环,而Python里range(length - 1)只执行length-1次,漏掉了最后一次循环。应改为range(length)。 - 平均值引用错误:Pine Script里的
avg是当前bar的移动平均值(循环中所有迭代使用同一个值),但Python代码中用avg.iloc[i]取了第i个位置的平均值,这会导致每次循环使用不同的平均值,和原逻辑不符。正确的做法是针对每个计算位置,使用该位置对应的平均值(比如计算第n个bar的标准差时,用avg.iloc[n],循环中保持这个值不变)。 - 标准差计算错误:Pine Script中是对
sumOfSquareDeviations / length开平方,而Python代码里写成了平方操作(sumOfSquareDeviations / length)*(sumOfSquareDeviations / length),完全颠倒了逻辑。需要改成math.sqrt(sumOfSquareDeviations / length),同时要导入math模块。 - SUM函数逻辑错误:Pine Script中当结果接近0(≤1e-10)时直接赋值为
0,但Python代码里res += 0等于没有修改,应改为res = 0。
Pine Script中SUM函数返回15的原因
这是原脚本作者添加的自定义硬编码逻辑:当fst + snd的结果绝对值处于1e-10到1e-4之间时(既不是足够接近0到可以忽略,又不是大到正常数值),强制返回15。这种写法非常不常规,大概率是作者为了处理特定场景下的极小非零值(避免这类值对后续标准差计算产生异常影响)而设置的特殊规则,不属于标准的求和逻辑。
内容的提问来源于stack exchange,提问作者Denzel
相关产品推荐
相关产品推荐

