Несоответствие стандартного отклонения при вычислении с нуля - PullRequest
0 голосов
/ 22 февраля 2020

Что не так с кодом ниже для расчета стандартного отклонения с использованием математических функций, предоставляемых Pine Script (я не получаю тот же результат, что и при использовании stdev):

mid = sma(close, period)
sigma = sqrt(sum(pow(close - mid, 2), period)/period)

* 1005 Вот что я не понимаю. Приведенные ниже уравнения показывают, что и sigma1, и sigma2 должны отображать один и тот же график, но это не так. Чем это объясняется:
sigma1 = sqrt(sum(pow(close - mid, 2), period)/period)
sigma2 = sqrt(sma(close*close, period) - pow(sma(close, period), 2))

enter image description here

enter image description here

1 Ответ

1 голос
/ 22 февраля 2020

Методы 2 и 3 дают те же результаты, что и наивный al go, используемый в Pine.

С методом 3, использующим функции alexgrover здесь , вы можете использовать длину серии:

//@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)

Вы здесь, в фуксии:

enter image description here


[РЕДАКТИРОВАНИЕ: 2020.02.22 21:29 - LucF]

Чтобы сделать это по-своему, потребуется for l oop:

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)
...