请教这几种均线的分别表达方式???TALIB不全


(189) #1

几种不同均线的比较 (2012-05-10 07:36:58)
转载

标签: 财经 权重 平均值 系数 k线 分类: 技术分析

MA(X,N)简单算术平均
求X的N日移动平均值,不分轻重,平均算。算法是:
(X1+X2+X3+……+Xn)/N
例如:MA(C,5)表示5日的平均收盘价,C表示CLOSE,MA(C,5)=(C1+C2+C3+C4+C5)/5。
例如:BIAS
BIAS:(CLOSE-MA(CLOSE,6))/MA(CLOSE,6)*100;

EMA(X,N)指数平滑移动平均
求X的N日指数平滑移动平均,它真正的指标表达是:当日指数平均值=平滑系数*(当日指数值-昨日指数平均值)+昨日指数平均值;平滑系数=2/(周期单位+1);由以上指标推导开,得到:EMA(C,N)=2*C/(N+1)+(N-1)/(N+1)昨天的指数收盘平均值;
算法是:若Y=EMA(X,N),则Y=[2
X+(N-1)*Y’]/(N+1),其中Y’表示上一周期的Y值。
EMA引用函数在计算机上使用递归算法很容易实现,但不容易理解。例举分析说明EMA函数。

X是变量,每天的X值都不同,从远到近地标记,它们分别记为X1,X2,X3,….,Xn
如果N=1,则EMA(X,1)=[2X1+(1-1)Y’]/(1+1)=X1 (可见:N可以取到1,不过输出就没有加权的效果了。)
如果N=2,则EMA(X,2)=[2
X2+(2-1)Y’]/(2+1)=(2/3)X2+(1/3)X1
如果N=3,则EMA(X,3)=[2
X3+(3-1)Y’]/(3+1)=[2X3+2
((2/3)X2+(1/3)X1)]/4=(1/2)X3+(1/3)X2+(1/6)X1
如果N=4,则EMA(X,4)=[2
X4+(4-1)Y’]/(4+1)=2/5X4+3/5
((1/2)X3+(1/3)X2+(1/6)X1)=2/5X4+3/10X3+1/5X2+1/10
X1
如果N=5,则EMA(X,5)=2/(5+1)X5+(5-1)/(5+1)(2/5X4+3/10
X3+3/15
X2+3/30
X1)=(1/3)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1
…………循环

X1
(2/3)*X2+(1/3)X1
(3/6)*X3+(2/6)*X2+(1/6)*X1
(4/10)*X4+(3/10)*X3+(2/10)*X2+(1/10)*X1
(5/15)*X5+(4/15)*X4+(3/15)*X3+(2/15)*X2+(1/15)*X1

把算法写成这个样子:Y=2*X/(N+1)+(N-1)/(N+1)*Y’,就可以看出,当前周期数组值所占的权重是2/(N+1),而上一周期Y值所占的权重是(N-1)/(N+1)。
注意,这两个权重相加,2/(N+1)+(N-1)/(N+1)=1,结果为1。也就是说:任何时候系数之和恒为1。

如果X是常量,每天的X值都不变,则EMA(X,N)=MA(X,N).(废话,X为常量,怎么平均它都还是X。)

从以上的例举分析中,我们可以看到时间周期越近的X值它的权重越大,说明EMA函数对近期的X值加强了权重比,更能及时反映近期X值的波动情况。

实际应用中就是:
EMA(C,1)=C1
EMA(C,2)=2/3C+1/3REF(C,1)
EMA(C,3)=3/6C+2/6REF(C,2)+1/6REF(C,1)
EMA(C,4)=4/10
C+3/10REF(C,3)+2/10REF(C,2)+1/10REF(C,1)
EMA(C,5)=5/15
C+4/15REF(C,4)+3/15REF(C,3)+2/15REF(C,2)+1/15REF(C,1)

可见:EMA在计算平均值时,考虑了前一日的平均值,平滑系数是定的,它是利用今日的值与前一日的平均值的差,再考虑平滑系数,计算出来的平均值,所以也有叫异同平均的。
MA与EMA这两个平均算法的不同,主要是对数组中的数据的权重侧重不同。

理解了MA,EMA的含义后,就可以理解其用途了,简单的说,当要比较数值与均价的关系时,用MA就可以了,而要比较均价的趋势快慢时,用EMA更稳定;有时,在均价值不重要时,也用EMA来平滑和美观曲线。

实际应用中EMA比MA更具参考价值的地方是,EMA不容易出现死叉和金叉,所以一旦出现要立即作出反映!对周线处理,EMA就更加稳定了。

MACD指标用的就是EMA,所以其金叉和死叉的意义就比较大:
DIFF : EMA(CLOSE,12) - EMA(CLOSE,26);
DEA : EMA(DIFF,9);
MACD : 2*(DIFF-DEA), COLORSTICK

SMA(C,N,M)移动平均
理解了MA和EMA的含义和用途后,后面几个函数就好理解了;因为EMA的平滑系数是定的,=2/(周期+1);如果要改变平滑系数咋办?这就用到了 SMA。
SMA(C,N,M)与EMA(C,N)的区别就是增加了权重参数M,也就是用M代替EMA平滑系数中的2,这样我们可以根据需要调整当日数值在均价中的权重=M/N。(要求N>M)
参数:X为数组,N为计算周期,M为权重。若Y=SMA(X,N,M) 则 Y=[MX+(N-M)Y’]/N, 其中Y’表示上一周期Y值,N必须大于M。
把算法写成这个样子:Y=M/N
X+(N-M)/N
Y’,就可以看出,当前周期数组值所占的权重是M/N,而上一周期Y值所占的权重是(N-M)/N。注意,这两个权重相加,结果为1:M/N+(N-M)/N=1。
看出来了吧?SMA(X,N+1,2)=EMA(X,N)。

例如:KDJ
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))100;
K:SMA(RSV,3,1);
D:SMA(K,3,1);
J:3
K-2*D;

例如:RSI
RSI14:SMA(MAX(CLOSE-REF(CLOSE,1),0),14,1)/SMA(ABS(CLOSE-REF(CLOSE,1)),14,1)*100;

实际上,由于KDJ和RSI变化太快,用SMA适当逐步调低了最近日的权重,使得曲线变缓了一些。

DMA(C,A)动态移动平均
注意,权重系数在EMA与SMA中都是用数值与周期计算出来的小数,假设有一个小数可以直接代表权重,如何办?这就有了DMA。
DMA(C,A) 中A为权重值,指标如下:Y=DMA(C,A)=AX+(1-A)Y’,其中Y’表示上一周期Y值,A必须小于1,可以发现,DMA与SMA原理是一至的,只是用一个小数直接代替了M/N。
比较:Y=M/N
X+(N-M)/N
Y’和Y=A*X+(1-A)Y’;前者说N必须大于M,后者说A必须小于1。然后两者就一样了:A=M/N。说“A为计算周期”似乎不妥,A要取小数才行。DMA在第一根K线就开始起算,SMA要到第二根K线开始起算。
如果把算式改为:Y=Y’+A
(X-Y’),这也就是说DMA的含义是“昨天的DMA”+一个X与“昨天的DMA”距离的几分之几(几分之几用A表示,因为A小于1),动态的意思就更加一目了然了。
在实用中,这个小数最有价值的就是换手率=V/CAPITAL。DMA(C,V/CAPITAL)的直接含义是用换手率作为权重系数,利用当日收盘价在均价中的比重计算均价,直观理解就是换手率越大,当日收盘价在均价中的作用越大!

TMA(X,N,M)递归移动平均
用法:TMA(X,N,M),求X的递归移动平均,N、M为权重。算法:若Y=TMA(X,N,M) 则 Y=(NY’+MX), 其中Y’表示上一周期Y值。初值为M*X。
例如:TMA(CLOSE,0.9,0.1)表示求收盘价的递归移动平均。

WMA(X,A)加权移动平均
用法:WMA(X,A),求X的加权移动平均。算法:若Y=WMA(X,A),则Y=(n*X0+(n-1)*X1+(n-2)X2)+…+1Xn)/(n+(n-1)+(n-2)+…+1)X0表示本周期值,X1表示上一周期值。

例如:多空线
A:=(3C+L+O+H)/6;
B:20
A+19REF(A,1)+18REF(A,2)+17REF(A,3)+16REF(A,4)+15REF(A,5)+14REF(A,6)+13REF(A,7)+12REF(A,8)+11REF(A,9)+10REF(A,10)+9REF(A,11)+8REF(A,12)+7REF(A,13)+6REF(A,14)+5REF(A,15)+4REF(A,16)+3REF(A,17)+2REF(A,18)+REF(A,20))/210;
D:MA(B,M)
实际上 B:WMA(A,20); 就等于了上面很长的式子了。

均值指标在众多指标指标中都有使用,透彻理解上述各种均值算法含义,是合理应用各种指标指标的前提。

几种均线的变化快慢比较:
动态移平均:DMA(C,0.5) {最快,系数调为0.2就比较接近其他均线了,系数把握是个问题}
加权移平均:WMA(C,10); {第二快}
指数平滑移平均:EMA(C,10); {第三快}
简单移平均:MA(C,10); {第四快}
移动平均:SMA(C,10,1); {次慢}
递归移平均:TMA(C,0.9,0.1); {最慢}
动态移平均2:DMA(CLOSE,VOL/CAPITAL); {超级慢}

网上有更进一步的探讨:
DMA(C,0.2) = (1-0.2)DMA(REF(C,1),0.2) + 0.2C;
SMA(C,3,1)= 2/3SMA(REF(C,1),3,1) + 1/3C;
EMA(C,3) = 1/3EMA(REF(C,1),3) + 2/3C;
MA(C,3) = (C+REF(C,1)+REF(C,2))/3;
其实它们的用法差异绝对不仅仅在于上面的表象,也就是计算方法的差异。如果从程序的角度来看,分析软件里面提供的公式都是一种伪代码,它屏蔽了编程的难度,可以实现大众使用平台下的某些自定义化功能,最终它还是要解释为某种语言的代码来调用动态链接库(仅仅是猜想)。
所以从上面来看,MA是唯一一个不需要迭代的均值函数,其他几种都需要迭代计算,需要全部的K线数据和多次运算,也就是在某些预警之类公式的时候要避免使用。
如果有空的话可以对均线金叉的两种方式进行性能比较。1. C>MA(C,5); 2.C>EMA(C,5);看看哪个最先弹出预警。
由于EMA,SMA和DMA会有迭代运算,所以在一些变量传入的时候计算也会不同。这样说不容易理解,看例子:
LMA:MA(C,200);
LEMA:EMA(C,200);
MA的计算方法要求必须有199以上个周期才能计算,而EMA则可以从第一个周期就能有初始化数据,并且默认为迭代中的上个周期,所以它的数据是一直有的。

有人这么说:均线对于新手来说还是有用的,最起码能看清趋势。K线的形态是改变不了的,均线怎么改都行,有点自我安慰的味道。会分析量能与价格的关系才是高手。


(iQuant) #2

参考:https://www.cnblogs.com/hhh5460/p/5602357.html


(达达) #3

您好~可以参考用DMA实现CYC指标,AI可视化模板策略的流程细化


(wfzcy1) #4

同请考虑增加SMA(X, M, N) 函数,参考用DMA实现CYC指标是可以实现某一 X 的SMA,但如果经常尝试变换 X 的值,就需要每一个单独实现,而一些因子需要SMA的实现,如国泰君安191因子中就有非ta_wma能解决的,要是每一个单独自定义实现就太繁琐了,编程时间+抽取、回测时间太长了