【问题标题】:Standard deviation mismatch when computing from scratch从头计算时的标准偏差不匹配
【发布时间】:2020-06-06 16:47:41
【问题描述】:

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

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

这是我不明白的。下面的等式表明sigma1 和sigma2 应该产生相同的图,但事实并非如此。对此有何解释:

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

【问题讨论】:

    标签: pine-script


    【解决方案1】:

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

    使用 alexgrover 的函数 here 的方法 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 循环?我想更好地理解 Pine Script。
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多