6

好奇有没有人用过。我对时间序列做了一个简单的 EMA 操作。但是没能很好的调和。

我读到更新常数的值 = 2/(N+1)。我定义x = 1:20了,并且做了EMA(x,5)。然后我使用递归计算进行了 EMA 计算。这两个结果并没有真正对齐

函数返回

EMA(x,5)
 [1] NA NA NA NA  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18

而我的小东西给了我,

EMA
 [1]  1.000000  1.333333  1.888889  2.592593  3.395062  4.263374  5.175583  6.117055  7.078037  8.052025  9.034683 10.023122 11.015415 12.010276 13.006851 14.004567
[17] 15.003045 16.002030 17.001353 18.000902
4

2 回答 2

7

要获得您正在寻找的答案,您需要编写

TTR::EMA(1:20, n=1,  ratio=2/(5+1))

 [1]  1.000000  1.333333  1.888889  2.592593  3.395062  4.263374  5.175583
 [8]  6.117055  7.078037  8.052025  9.034683 10.023122 11.015415 12.010276
[15] 13.006851 14.004567 15.003045 16.002030 17.001353 18.000902

如果你调用TTR::EMA(1:20, n=5)它就相当于调用

TTR::EMA(1:20, n=5, ratio=2/(5+1))

这会将 NA 放在前 4 位,然后第 5 位将是前 5 个条目的简单平均值。(即在这种情况下为 3)。然后 EMA 算法将启动。第 6 名将是 6 * 2 / 6 + 3 * 4 / 6 = 4。第 7 名将是 7 * 2 / 6 + 4 * 4 / 6 = 5。等等...

你可以在这里看到确切的算法

于 2012-09-24T04:31:12.990 回答
2

TTR::EMA计算第一个非缺失值作为第一个n变量的算术平均值,然后开始递归计算。n=1您可以通过设置和来匹配您的计算ratio=1/3

R> EMA(x,n=1,ratio=1/3)
 [1]  1.000000  1.333333  1.888889  2.592593  3.395062  4.263374  5.175583
 [8]  6.117055  7.078037  8.052025  9.034683 10.023122 11.015415 12.010276
[15] 13.006851 14.004567 15.003045 16.002030 17.001353 18.000902
于 2012-09-24T03:49:37.350 回答