举个例子,在5分钟K周期中,当最高价高于门限X时,将这个最高价存入数组M[],然后对数组M求3周期EMA。
例如,K线从第1根到第10根的最高价分别为 1,8,6,5,7,9,2,3,3,8,门限是6,那么M数组的情况应该是这样的
第1根K结束,M为空;求EMA应该为0;
第2根K结束,M为{8},求EMA(M,3)应该为8;
第3根K结束,M为{8},求EMA(M,3)应该与第2根K的值一样;
第4根K结束,M为{8},求EMA(M,3)应该与第2根K的值一样;
第5根K结束,M为{8,7},求EMA(M,3),应该和第4根K的值不一样;
第6根K结束,M为{8,7,9},求EMA(M,3),应该和第5根K的值不一样;
第7~9根K结束,M依然为{8,7,9},求EMA(M,3),应该和第6根K的值一样;
第10根K结束,M变为{8,7,9,8},求EMA(M,3),应该和第6根K的值不一样;
现在的问题是,在代码中求出来的EMA(M,3),每根K都不一样,比如第2~4根K,数组M没变化过,求出来的值应该相同,第7~9根K,数组M也没变化过,求出来的值也应该相同。但实际运行结果是都不同的。
如果是求MA,结果就对了,但是求EMA就是不对。
我理解是不是因为EMA用了递归算法,导致每求一次,权重都在变化,因此导致结果变化。
有没有什么办法,可以达到数组M不变的情况下,求出来的EMA值不变化?
EMA(X,N),求X的N日指数平滑移动平均。算法:若Y=EMA(X,N)
则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。
这个是ema的算法,带入你的y:=ema(m,3)就是:
y:=(2*m+y')/3;
算法决定了只有n等于1的情况下,也就是ema(m,1),你讲的情况才会出现
y:=ema(m,3);
if 数组m发生变化 then yy:=y;
if里面算ema就是这样算
你的要求对于ema函数而言本来就实现不了,上面的折中算法还不行的话,那也没办法了