欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 金字塔公式系统与飞狐在控制语句上的差异(原发作者:weiwei)

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有14043人关注过本帖树形打印复制链接

主题:金字塔公式系统与飞狐在控制语句上的差异(原发作者:weiwei)

帅哥哟,离线,有人找我吗?
寒松
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:70 积分:712 威望:0 精华:1 注册:2009/8/18 22:39:37
金字塔公式系统与飞狐在控制语句上的差异(原发作者:weiwei)  发帖心情 Post By:2009/9/10 18:37:29    Post IP:58.246.57.26[只看该作者]

金字塔公式系统与飞狐公式系统保持99%的兼容性,控制语句保持100%的兼容性,飞狐的语法公式可以直接在金字塔上运行.
金字塔的控制语句除了完全兼容飞狐语法外,还自己增加了例如无条件跳转GOTO语句和循环REPEAT语句.
金字塔的控制语句在序列模式和逐周期模式均支持变量运行,序列模式下对于序列变量仅最后一个数据对控制语句有效, 这比飞狐的只能常量运行增加的强大的灵活性,例如下面的飞狐公式:
 
INPUT:N(5,2,500);      //参数申明

VARIABLE:I=0,S=0,VAR1:=C;//变量申明

FOR J=1 TO DATACOUNT DO BEGIN
 S:=S+VAR1[J];
 IF J>=N THEN BEGIN
  IF J>N THEN
    S:=S-VAR1[J-N];
  MA1[J]:S/N;        //实现MA(C,N)
  I:=0;
 END;
END;
 
使用序列模式运行,这段公式直接贴在金字塔上照样可以正常工作。但是如果在逐周期模式下运行上述公式就会变得异常缓慢,由于金字塔逐周期模式在每个周期上都要执行一遍这样的循环,效率自然就变得非常低了。鉴于金字塔的特点,如果将上述公式改进一下,则可以高效的在序列和逐周期模式同时高效运行,公式如下:

 
INPUT:N(5,2,500);      //参数申明
VARIABLE:I=0,S=0;     //全局变量申明

VAR1:=C; //金字塔下放在这里的变量为序列赋值

 

//为了加快运算速度,只有最后一个周期时才循环计算
IF NOT(ISLASTBAR) THEN EXIT;
FOR J=1 TO DATACOUNT DO BEGIN
 S:=S+VAR1[J];
 IF J>=N THEN BEGIN
  IF J>N THEN
    S:=S-VAR1[J-N];
  MA1[J]:S/N;        //实现MA(C,N)
  I:=0;
 END;
END; 

 

上述公式中增加了 IF NOT(ISLASTBAR) 判断是否最后一个周期的指令,在逐周期模式下,由于是判断到最后一个周期才执行的下面循环,故效率是非常高的。对于序列模式,由于同样使用了ISLASTBAR控制,故符合控制语句取最后一个数据的特点,所以该公式同时可以在两种模式下得到正确执行。
 
为了更能说明逐周期的运行特点,计算移动平均线的公式还可以这样写
 
INPUT:N(5,2,500);      //参数申明

RUNMODE:0;            //工作于逐周期模式
IF BARPOS <= N THEN //从计算周期开始计算
 EXIT;
 
MA1:C;
FOR J=1 TO N-1 DO
 MA1:=MA1+CLOSE[BARPOS-J];
MA1:=MA1/N;


这样的公式即保证了效率,也可以使编写公式的复杂程度大大降低,提高了公式的可读性。

 

[此贴子已经被admin于2010-9-16 15:15:32编辑过]

[本帖被加为精华]
 回到顶部