新浪博客

R语言中关于SMA,EMA,DEMA,WMA函数的理解

2014-05-15 23:32阅读:
最近在用R进行数据处理,用到了TTR包中SMA和EMAWMA,以及DEMA函数,找了很多资料加上自己的理解,终于弄懂了一些东西。
首先:看Rstudio中的有关SMA,EMAWMA,DEMA函数的文档,SMA顾名思义就是简单移动平均,其主要是用来进行简单的求平均值,移动平均方法是收集一组观察值,计算这组观察值的均值,利用这一均值作为下一期的预测值。
SMA
R中函数为SMA(x,n=10,……..),第一个参数是一组数据,或者时间序列数据,N是间隔,默认(default)是10SMA的公式为: R语言中关于SMA,EMA,DEMA,WMA函数的理解

由移动平均法计算公式可以看出,每一新预测值是对前一移动平均预测值的修正,N越大,效果越好。
EMA:
文档里面是指Exponential moving average.(指数移动平均)也可以称作一次指数平滑法:公式为:
http://www.fmlabs.com/reference/ExpMA.gif
其函数为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值,以使均方差最小,然后利用公式可以预测出下一期的值:
EMAt=K*inputt-1+1-KEMAt-1)得到我们所需要的预测值数据。
如下例子:
R语言中关于SMA,EMA,DEMA,WMA函数的理解
最后一行是所对应的的预测值,但是鉴于K=0.7的时候数据MSE比较小,所以预测值为253.68.
DEMA
DEMADouble-exponential moving average.
R语言中关于SMA,EMA,DEMA,WMA函数的理解

St1=EMAinput=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, ...)

文档所给的公式如下所示:
R语言中关于SMA,EMA,DEMA,WMA函数的理解
函数意义有两种结果:一种是指:自然加权法:
函数的形式参数wts默认为1n,这个就是默认的自然指数加权法,得到的结果就是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
学习了那么久感觉这几个函数不能进行预测,不能够进行简单的直接给出预测值,需要根据函数得到的数据进行一些运算然后得到相应的值,这个肯定不是我们的初衷,所以希望接下来会有大牛把这个给实现了。

我的更多文章

下载客户端阅读体验更佳

APP专享