以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  [求助]MACD混合周期指标函数写法  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=5353)

--  作者:webzhang
--  发布时间:2011/3/4 16:38:51
--  [求助]MACD混合周期指标函数写法

[求助]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的也行;

 


--  作者:fly
--  发布时间:2011/3/4 17:18:03
--  

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


--  作者:董小球
--  发布时间:2011/3/4 17:18:05
--  

看你写的貌似是要引用本周期之后的四个周期的数据 对么?

你可以看看REFX这个函数

但是你这相当于引用了未来的数据,请注意规避风险!


--  作者:webzhang
--  发布时间:2011/3/5 10:02:48
--  

回复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分钟无法记录,历史的图上根本看不到,无法用于历史回归;

 

 

 

 

 

 


   

 

 

[此贴子已经被作者于2011-3-5 10:09:46编辑过]

--  作者:阿火
--  发布时间:2011/3/5 10:11:27
--  

要把原来的macd稍微修改一下,加入ema12:ema(c,12); ema26:ema(c,26);用于被引用,这样就可以了

[此贴子已经被作者于2011-3-5 10:27:20编辑过]

--  作者:阿火
--  发布时间:2011/3/5 10:26:54
--  

完整代码如下:

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;


--  作者:webzhang
--  发布时间:2011/3/5 12:05:30
--  

谢谢  上面各位,已经可以用了