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

Calculating standard deviation of last N elements of in a pine series

尝试计算系列最后 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+)数据点的标准差,我尝试了多种方法..

  1. 创建数组,然后将数据点一个一个压入

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

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

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

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

你试过built-instdev功能了吗?

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

但是结果我不能从plus系列的数据点 可能在运行时的早期阶段,数据尚不存在,例如,在第一个柱上,没有 plus 系列的过去值。您可以使用 nz 函数安全地访问系列历史数据 - nz(plus[5]).

tradingview 用户 alexgrover 共享的自定义标准开发函数:

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)