好奇,如果有人使用它。我在一个时间序列上做了一个简单的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
答案 0 :(得分: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.等等......
您可以看到确切的算法here
答案 1 :(得分: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