Pine script talib和pine脚本版本之间的stdev()差异

Pine script talib和pine脚本版本之间的stdev()差异,pine-script,ta-lib,Pine Script,Ta Lib,我正在尝试将一种策略从tradingview(pinescript)移植到我在nodejs中构建的框架中。 我的策略是突破布林乐队。在我的pine脚本中,我使用标准偏差实现了BBs(基本上复制了内置指标公式),如下所示: length = input(200, "BB Len", minval=1) mult = input(1.5, "BB STD", minval=0.001, maxval=50, type=input.float) basis

我正在尝试将一种策略从tradingview(pinescript)移植到我在nodejs中构建的框架中。 我的策略是突破布林乐队。在我的pine脚本中,我使用标准偏差实现了BBs(基本上复制了内置指标公式),如下所示:

length = input(200, "BB Len", minval=1)
mult = input(1.5, "BB STD", minval=0.001, maxval=50, type=input.float)


basis = sma(src, length)
dev = mult * stdev(src, length)

upper1 = basis + dev
lower1 = basis - dev
基于此,出现问题的原因有两个:

第一个原因

正如我在talib中对STDDEV函数的解释中所看到的,有三个参数,而不是pine脚本版本中的两个:

  • inReal:数据系列
  • optInNbDev:偏差,默认值为1
  • optInTimePeriod:时间段,默认值为5(pine脚本没有此值)
  • 第二个原因

    正如我在tradingview的pine脚本参考中所注意到的,它说stdev函数是“标准偏差的有偏估计”。我在talib的文档中找不到关于这个主题的任何具体内容,但我假设他们正在应用无偏见的公式,这是基于我在谷歌搜索到的一些评论


    基于此,您认为有没有一种方法可以使用ta lib精确复制tradingview行为?

    为了消除所有疑问,您可以编写自己的函数来计算标准偏差。我也有转移到另一个平台的经验,我需要一个计算标准偏差的公式。这是我的实验结果

    //@version=4
    study("Standard Deviation",shorttitle="Stdev")
    length = input(14)
    
    a = sma(pow(close,2),length)
    b = pow(sum(close,length),2)/pow(length,2)
    c = sqrt(a - b)
    
    plot(c,title="Stdev",color=color.red,transp=0,linewidth=5)
    
    plot(stdev(close,length),color=color.blue)
    

    内置函数的标准偏差值与独立计算的值相同。

    ta lib作为开放源代码的优势在于,您可以查看源代码并了解它的具体功能。stdev函数的源是,它引用了TA_VAR()函数,这些源是

    根据我的理解,TA Lib的STDEV是一个周期
    optInTimePeriod
    的滚动偏差STDEV,乘以
    OptinBDEV
    。因此,考虑到子数组的长度为
    optimePeriod
    ,该函数将为每个输入数组值生成一个stdev数组


    没有pine的stddev源可供比较,但看起来您应该使用
    length
    作为
    optimePeriod
    mult
    作为
    optInNbDev
    (或者保留为1,稍后再乘以值)。并且期望得到相同的结果。

    结果表明,ta库中的BB函数也有偏差,因此它与pine脚本中的对应函数非常相似,也就是说,我做了一些测试,两者之间的差异可以忽略不计,比如1-2个微点子。