[求助]MACD混合周期指标函数写法
目标在1分钟K线上记录 “5分钟周期”的每1分钟时候的 MACD值,做历史回归用;
直接调用跨周期的方法没有用,因为的 5分钟周期的指标最终由其最后的第5分钟最后确定,期间的1到4分钟的值没有体现出来;
MACD 的基本算法
DIFF : EMA(C,12) - EMA(C,26);
DEA :EMA(DIFF,9);
MACD : 2*(DIFF-DEA), COLORSTICK;
算法实现的原理上 把第1个C数据用本 分钟的,后面的数据 是5分钟周期的历史数据;
算法不难,但是在金字塔里面如何实现?
求助 版主和各位高手 给个 函数 ,VBA的也行;
if MINUTE%5=0 then
begin
i:=STKINDI('','macd.diff' ,0 ,1 ,-1 );//5分钟的第一分钟,使用一分钟周期的MACD.diff的数据
//也可写成,同样也是本周期--1分钟周期的数据 i:="macd.diff";
end
else
begin
j:=STKINDI('','macd.diff' ,0 ,2 ,-1 );//后面4分钟,引用5分钟周期的历史数据
end
看你写的貌似是要引用本周期之后的四个周期的数据 对么?
你可以看看REFX这个函数
但是你这相当于引用了未来的数据,请注意规避风险!
回复FLY:
还是没有解决问题,因为 5分钟周期 引用的历史数据是 和 1分钟周期引用的历史数据是不同的
例如: DIFF : EMA(C,12) - EMA(C,26) 中 的 EMA(C,12)
对于 1分钟周期,C数据 引用的是 C(1,1),C(1,2) ,C(1,3) ..... C(1,12) ;
对于 5分钟周期,C数据 引用的是 C(5,1),C(5,2) ,C(5,3) ..... C(5,12) ;
其中 第5分钟末 C(5,1)=C(1,5);
现在: 在1分钟中 引用 5分钟 ,
第1分钟 是 C(1,1), C(5,2) ,C(5,3) ..... C(5,12) ; 因为 C(5,1)还没有形成 用C(1,1)代替
第2分钟 是 C(1,2), C(5,2) ,C(5,3) ..... C(5,12) ; 因为 C(5,1)还没有形成 用C(1,2)代替
第3分钟 是 C(1,3), C(5,2) ,C(5,3) ..... C(5,12) ; 因为 C(5,1)还没有形成 用C(1,3)代替
第4分钟 是 C(1,4), C(5,2) ,C(5,3) ..... C(5,12) ; 因为 C(5,1)还没有形成 用C(1,4)代替
第5分钟 是 C(5,1), C(5,2) ,C(5,3) ..... C(5,12) ; 此时 C(5,1)=C(1,5)
现在直接引用,在当时的每1分钟,5分钟的每个数据都是确定的,但是前 4分钟无法记录,历史的图上根本看不到,无法用于历史回归;
要把原来的macd稍微修改一下,加入ema12:ema(c,12); ema26:ema(c,26);用于被引用,这样就可以了
完整代码如下:
ema1:=stkindi(stklabel,'macd.ema12',0,2,-1);
ema2:=stkindi(stklabel,'macd.ema26',0,2,-1);
ema12:=ema1*11/13+c*2/13;
ema26:=ema2*25/27+c*2/27;
diff:ema12-ema26;
dea1:=stkindi(stklabel,'macd.dea',0,2,-1);
dea:dea1*4/5+diff/5;
macd:2*(DIFF-DEA), COLORSTICK;
谢谢 上面各位,已经可以用了