如何使用包TTR的带权重的SMA函数?

How to use package TTR’s SMA function with weights?

我不明白 TTR SMA 函数是如何处理权重的。首先,wts和w有什么区别?然后,就有了我意想不到的结果。

我想在 SMA 计算的每个位置使用一组线性权重,以便正在计算的当前值应用最高权重,第 n 个最远的值应用最低权重。这是一个应该返回权重的示例,如果它们按照我假设的方式工作(我的示例提供了线性滤波器的脉冲函数):

t <- replicate(0, n = 12)
t[5] <- 1
weights <- c(0.25, 0.5, 0.75, 1.0)
SMA(t, n = 4, wts = weights)

但这给出了: 不适用 不适用 不适用 0.00 0.25 0.25 0.25 0.25 0.00 0.00 0.00 0.00

这与使用一组权重 c(1,1,1,1) 得到的结果相同。我希望将项目 5-8 视为 1.0、0.75、0.5、0.25。我无法在 Internet 上找到有关 SMA 如何计算加权 SMA 函数的任何解释。

TTR 的 SMA 不使用权重(w 或 wts)。您可以将 w 或 wts 添加到 SMA 函数,但它不会被使用,正如您在下面的检查中看到的那样。

identical(SMA(t, n = 4), SMA(t, n = 4, wts = weights))
[1] TRUE

wts 用于与 WMA 一起使用。 w 是要与 VMA 一起使用的。

我同意文档在这一点上应该更清楚一些。 investopedia 的 This pageWMA 的描述更清楚一些。

而 VMA 更像是一种自适应移动平均线,并且正在向 EMA 公式添加一种权重,如下所示。

# parts from c code from TTR package
d_ratio =  2/(n+1)
EMA[i] = d_x[i] * d_ratio + d_result[i-1] * (1-d_ratio);
VMA[i] = d_x[i] * d_w[i] * d_ratio + d_result[i-1] * (1-d_ratio*d_w[i]);

看你描述的你想要什么,应该用WMA功能