R语言中关于SMA,EMA,DEMA,WMA函数的理解
2014-05-15 23:32阅读:
最近在用R进行数据处理,用到了TTR包中SMA和EMA,WMA,以及DEMA函数,找了很多资料加上自己的理解,终于弄懂了一些东西。
首先:看Rstudio中的有关SMA,EMA,WMA,DEMA函数的文档,SMA顾名思义就是简单移动平均,其主要是用来进行简单的求平均值,移动平均方法是收集一组观察值,计算这组观察值的均值,利用这一均值作为下一期的预测值。
SMA:
R中函数为SMA(x,n=10,……..),第一个参数是一组数据,或者时间序列数据,N是间隔,默认(default)是10,SMA的公式为:
由移动平均法计算公式可以看出,每一新预测值是对前一移动平均预测值的修正,N越大,效果越好。
EMA:
文档里面是指
Exponential
moving
average.(指数移动平均)也可以称作一次指数平滑法:公式为:
其函数为EMA(x, n = 10, wilder = FALSE, ratio =
NULL,
...),着重介绍下Wilder=FALSE的情况用的是指数平滑率(exponential
smoothing
ratio)为K=2/(n+2),而Wilder=TRUE的时候,就要用到
Welles
Wilder指数平滑率为K=1/(n+1)(Welles
Wilder's exponential smoothing ratio of
1/n.)。
一次指数平滑法比较简单,但也有问题。问题之一便是力图找到最佳的
K值,以使均方差最小,然后利用公式可以预测出下一期的值:
EMA(
t)
=K*input(
t-1)
+(
1-K)
EMA(
t-1)得到我们所需要的预测值数据。
如下例子:

最后一行是所对应的的预测值,但是鉴于
K=0.7的时候数据
MSE比较小,所以预测值为
253.68.
DEMA:
DEMA:Double-exponential moving
average.

St1=EMA(input)=K*input+(1-K)*input;
St2=EMA(EMA(input)=K*St1+(1-K)*St1;
DEMA=2*St1-St2;
St1为一次指数平滑值,St2为二次指数平滑值;
DEMA函数的形式为:
DEMA(x, n = 10, v = 1, wilder =
FALSE, ratio = NULL)
V
默认值为1,相对应的就是上述公式,当V值为0的时候DEMA=EMA;
WMA:
Weighted moving
average.顾名思义就是加权移动平均,其函数形式为:
WMA(x, n = 10, wts = 1:n, ...)
文档所给的公式如下所示:
函数意义有两种结果:一种是指:自然加权法:
函数的形式参数wts默认为1:n,这个就是默认的自然指数加权法,得到的结果就是WMA=(price*n+price[-1]+….price[n-1]*1)/(n+1)n/2.所以上述文档所给公式感觉是有错误的,笔者进行了几次试验得到也是利用我写的这个公式计算得到的,所以上述符合自然加权法。第二种是指:饱和加权法:
就是说wts是一组(0,1)之间的值,可以
用一个向量包括,但是这几个值之和为1.
此时:WMA=price*v1+price[-1]*v2+……+price[-(n-1)]*vn
学习了那么久感觉这几个函数不能进行预测,不能够进行简单的直接给出预测值,需要根据函数得到的数据进行一些运算然后得到相应的值,这个肯定不是我们的初衷,所以希望接下来会有大牛把这个给实现了。