以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  策略编写求助区  (http://222.73.7.161/bbs/list.asp?boardid=11)
----  1分钟周期引用3分钟周期的SMA,公式作不出来  (http://222.73.7.161/bbs/dispbbs.asp?boardid=11&id=31086)

--  作者:wsslei
--  发布时间:2012/12/3 12:47:58
--  1分钟周期引用3分钟周期的SMA,公式作不出来

当前平台:标准版
主要想法:逐周期运行;1分钟周期引用3分钟周期的SMA(Close,5,1),避免未来数据;完成后,将引用类似的 - 1分钟引用5分,15分。。。日,周SMA数据;

 

问题是现在测试1分钟周期引用3分钟周期时,避免未来数据,写了半天都有问题,发在公式问题区,尽管非常感谢Jinzhi兄的回复,但最终还没有可操作下去的结果。

 

我初步写了点代码,如下,但是有错,我想请教哪位老大能帮忙改下公式:

 

TVar1_LHL:close;

VARIABLE:S3[3]=TVar1_LHL;   //我这里想定义3个全局变量,存N,N+1,N+2的累计值,不过好像不太对,求教 

VAR1:=TVar1_LHL; //序列变量

IF NOT(ISLASTBAR)  THEN EXIT;

If barpos =1 then exit;

FOR J=2 TO DATACOUNT DO BEGIN

  IF Mod(J,3)=2 Then BEGIN

   S3[1]:=(S3[1]*4+ VAR1[J])/5; // 发现VAR1一直是最后一根BARPOS的值,不是Var1[J],请教怎么回事

   TVAR1[J]:3*S3[1],coloryellow;

  END

  IF Mod(J,3)=0 Then BEGIN

   S3[2]:=(S3[2]*4+ VAR1[J])/5;

   TVAR1[J]:3*S3[2],coloryellow;

  END

  IF Mod(J,3)=1 Then BEGIN

   S3[3]:=(S3[3]*4+ VAR1[J])/5;

   TVAR1[J]:3*S3[3],coloryellow; // TAR1无显示,为什么呀

  END

END


--  作者:fly
--  发布时间:2012/12/4 9:02:06
--  

SMA的原始推算公式为

SMA(C,N,M)= M*C/(N+1)+(N+1-M)*REF(C,1)/(N+1);

 

对应楼主的,可简化为

SMA(C,5,1)= C/6+5*REF(C,1)/6;

 

1分钟下取无未来数据的5分钟MA5均线算法实例http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=15388

参考该帖,原理雷同

 

自己本地尝试一下,有困难继续发帖求助

[此贴子已经被作者于2012-12-4 9:23:55编辑过]

--  作者:wsslei
--  发布时间:2012/12/4 10:09:30
--  

多谢FLY兄的回复。

 

小弟的问题是:那个1分钟引用5分钟的MA小弟研究,也按该思路想写SMA。基于该思路,如果是1分钟引用3分钟,所以3分钟周期下的Ref(close,1)是1分钟周期下的Ref(close,3). 因为SMA是要用全局变量计算累计值的,所以小弟的笨办法是定义3个全局变量分别累计1分钟周期下的N,N+1,N+2笔,这3笔对应3分钟下的1笔。

 

问题是,1分钟引用3分钟如果测试成功后,我还准备在1分钟下引用5分钟,15分钟,120分钟,日,周,这样的话,没办法直接定义若干个全局变量,所以我是想定义全局变量数组的,然后用For循环的。

 

但是我写的那堆代码一直调试得不对,设断点看循环里的数字都没有按我的想法计算。因为我刚练习金字塔,所以想还烦请老师帮忙看看具体代码怎么实现(可以参见原贴的代码),多谢!


--  作者:fly
--  发布时间:2012/12/4 13:42:52
--  

给的帖子中,不需要使用全局变量,就可实现.

 

VARIABLE需要用在逐周期下,你1楼的代码中,还有FOR循环,效率上会打折扣的,推荐放弃1楼使用全局变量的思路

 

 


--  作者:wsslei
--  发布时间:2012/12/6 16:21:28
--  

这个已经解决了,一直纠结于用全局变量累计,其实还是逐K算遍来得简单,多谢Fly兄指点,奉上金币,呵呵


--  作者:wsslei
--  发布时间:2012/12/9 21:12:02
--  

FLY大哥,再请教下:

我已经改了1分钟周期调用3分钟周期的无未来SMA,代码如下:

 

INPUT:N(5,2,500);

variable:S3[3]=0;
VAR1:=C; Index:=0;
XBarpos:Barpos,linethick0;

Index:=if(mod(barpos,3)=0,3,mod(barpos,3));

For J=Index to Barpos Do begin
  If J=Index then S3[Index]:=VAR1[Index];
  else S3[Index]:=(S3[Index]*4+VAR1[J])/5;
  J:=J+2;
End

TSMA1:S3[Index],coloryellow;

 

但是,策略关系,我用的是逐K模式,然后用如上代码,因为是For循环,所以效率不高,如果图表4000根以上有延迟。

看了半天那个1分钟引用5分钟MA的贴,我琢磨把代码优化下,但没想出办法,原来用全局变量,也是想减少计算量,似乎不行。老师能帮我看看如何优化吗?