Pine script 从头开始计算时的标准偏差不匹配

Pine script 从头开始计算时的标准偏差不匹配,pine-script,Pine Script,下面的代码使用Pine脚本提供的数学函数计算标准偏差有什么错(我没有得到与使用stdev时相同的结果): 这是我不明白的。下面的方程式表明,sigma1和sigma2应生成相同的绘图,但实际情况并非如此。对此有何解释: sigma1 = sqrt(sum(pow(close - mid, 2), period)/period) sigma2 = sqrt(sma(close*close, period) - pow(sma(close, period), 2)) 方法2和3产生的结果与Pi

下面的代码使用Pine脚本提供的数学函数计算标准偏差有什么错(我没有得到与使用
stdev
时相同的结果):


这是我不明白的。下面的方程式表明,
sigma1
sigma2
应生成相同的绘图,但实际情况并非如此。对此有何解释:

sigma1 = sqrt(sum(pow(close - mid, 2), period)/period)
sigma2 = sqrt(sma(close*close, period) - pow(sma(close, period), 2))


方法2和3产生的结果与Pine中使用的朴素算法相同

使用alexgrover函数的方法3,可以使用序列长度:

//@version=4
study("StDev")
period = input(20)

// ————— 1
mid = sma(close, period)
sigma = sqrt(sum(pow(close - mid, 2), period)/period)
// ————— 2
f_stdev(src,p) => p == 1 ? 0 : sqrt(sma(src*src,p) - pow(sma(src,p),2))
// ————— 3
Sma(src,p) => a = cum(src), (a - a[max(p,0)])/max(p,0)
Stdev(src,p) => p == 1 ? 0 : sqrt(Sma(src*src,p) - pow(Sma(src,p),2))

plot(sigma, "1", color.fuchsia)
plot(f_stdev(close, period), "2", color.blue, 16, transp = 80)
plot(Stdev(close, period), "3", color.blue, 8, transp = 60)
plot(stdev(close, period), "4", color.gray, 2, transp = 0)
你的在这里是紫红色的:


[编辑:2020.02.22 21:29-LucF] 按照您的方式进行操作需要一个
for
循环:

mean = sma(close, period)
sum = 0.0
for i=0 to period-1
    sum := sum + pow(nz(close[i]) - mean, 2)
sigma = sqrt(sum / period)

谢谢@PineCoders LucF-我已经为我的问题添加了更多信息。请看方程式;它显示
sigma1
(蓝色)和
sigma2
(红色)应该相同。发生了什么事?很有趣。为什么在这种情况下,
sum
函数不起作用,而需要for循环?我想更好地理解松树脚本。
mean = sma(close, period)
sum = 0.0
for i=0 to period-1
    sum := sum + pow(nz(close[i]) - mean, 2)
sigma = sqrt(sum / period)