计算松树系列中最后N个元素的标准偏差

Posted

技术标签:

【中文标题】计算松树系列中最后N个元素的标准偏差【英文标题】:Calculating standard deviation of last N elements of in a pine series 【发布时间】:2021-01-16 19:51:55 【问题描述】:

尝试计算一个系列的最后 5 个元素的标准差 下面是我从 TradingView 官方的 ADX 实现中复制的实现

//@version=4
study(title="DMI movement out of 2SD in last 10 points", shorttitle="StrategyX", format=format.price, precision=4, resolution="")
lensig = input(14, title="ADX Smoothing", minval=1, maxval=50)
len = input(14, minval=1, title="DI Length")

up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / trur)
minus = fixnan(100 * rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)

我试图做的是获得最新的 5+ (DMI+) 数据点的标准偏差,我尝试了多种方法..

    创建一个数组,然后将数据点一个一个推入

但结果我无法从plus 系列中获取数据点。它应该返回一个变量(倒数第五个元素)而不是另一个系列(根据官方文档:https://www.tradingview.com/pine-script-reference/v4/#op_[])

plus[5] // do not understand why it is still a series but not a float
    将系列转换为数组,然后执行reverseslice

再次失败,因为无法将系列转换为数组

任何帮助将不胜感激:祈祷谢谢

【问题讨论】:

【参考方案1】:

你试过内置的stdev函数吗?

plus2StDev = 2 * stdev(plus, 5)
plot(plus2StDev)

但事实证明我无法从 plus 系列中获取数据 可能是在运行的早期阶段,数据还不存在,例如在第一个栏上没有 plus 系列的过去值。您可以使用nz 函数安全地访问系列历史数据 - nz(plus[5])

由 tradingview 用户 alexgrover 共享的自定义 stdev 函数:

f_stdev(src, length) => length == 1 ? 0 : sqrt(sma(pow(src, 2), length) - pow(sma(src, length), 2)) 
plus2StDev = 2 * f_stdev(plus, 5)
plot(plus2StDev)

【讨论】:

谢谢。是的,我知道,松语言中有一个stdev func。但问题主要是无法获得系列的子数组/切片。我期待plus[5] 是一个变量,而不是另一个系列。根据文档:tradingview.com/pine-script-reference/v4/#op_[] 根据文档,它将返回一个系列。据我了解松树 - 每个变量在运行时都变成一个系列。即使您尝试使用 'var' 关键字一次性初始化创建一个常量,您仍然可以使用历史引用运算符 '[]' 对其进行索引。 TV 用户 alexgrover 分享了一个用 pine 编写的自定义 stdev 函数。不确定,但这可能有助于实现您的目标(更新答案)

以上是关于计算松树系列中最后N个元素的标准偏差的主要内容,如果未能解决你的问题,请参考以下文章

hihocoder-1732-1-偏差排列

保存最后N个元素

2个数据集的标准偏差(每个都有标准偏差)

03:计算矩阵边缘元素之和

有重复元素的排列问题

问题 C: 计算矩阵边缘元素之和