以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  交易策略发布专区  (http://weistock.com/bbs/list.asp?boardid=10)
----  金字塔中有关全局变量数据库函数 EXTGBDATA;EXTGBDATASET等函数的使用说明及注意事项  (http://weistock.com/bbs/dispbbs.asp?boardid=10&id=48570)

--  作者:王锋
--  发布时间:2013/2/12 19:41:47
--  金字塔中有关全局变量数据库函数 EXTGBDATA;EXTGBDATASET等函数的使用说明及注意事项

在我们日常编程中,不可避免的需要记录一些我们程序中的一些变量,一些变量所需要保存的时间较长,我们对这类需要对整个策略均有效的这类变量称之为“全局变量”,金字塔中,全局变量主要有2种表现方式。

 

1、使用 VARIABLE 及 GLOBALVARIABLE 声明的全局变量。

    使用该方式的全局变量的最大优势在于,策略之间的变量相互独立工作,不会相互干扰,但是当用户关闭软件或者关闭图表上执行的策略后,变量自行消失不会进行保存。

 

2、使用EXTGBDATA;EXTGBDATASET等数据库方式的全局变量。

    使用该方式的全局变量可以在策略执行后将数据保存在内部数据库中,即便软件关闭后也能保存用来下次启动后调用。这种全局变量的作用范围是整个金字塔软件本身,即策略A所保存的变量内容也可以被策略B所读取到。这样的运行机制为实现不同策略之间的协同工作和通过外部参数控制公式运行提供了可能,但是如果使用不当,也容易出现问题,最常见的问题就是不同的策略之间由于共同全局变量名而导致的冲突,目前我们发现大部分金字塔用户在使用全局变量数据库时主要出现的问题如下:

   a)用户在后台程序化运行时,为了监控方便,又在图表上打开同一个公式,由于公式中共用了一个全局变量数据名,而导致2个策略在运行时相互干扰,造成无法正常工作。

   b)用户由于不清楚全局变量数据库的运行机理,在图表上运行的多个策略中使用同一个全局变量名而导致策略运行紊乱。

   c)在使用含有全局变量数据库的公式使用多核优化。

 

   使用建议:综上所述,其实全局变量数据库相比GLOBALVARIABLE 超全局变量,只是多了个保存记忆功能,这不是所有策略所必须的,为了策略的编写安全用户应该尽可能的使用GLOBALVARIABLE 来代替全局变量数据库来防止策略中出现冲突和干扰的问题。

 

   从2.972版升级以后如果用户的公式代码中含有 EXTGBDATA;EXTGBDATASET 代码,金字塔会给予提示,如果用户不想看到此提醒,在公式的最前面加入如下编译控制符即可:

   WARNING_DISABLE:4;


--  作者:bbking
--  发布时间:2013/3/14 13:28:36
--  

谢谢提醒


--  作者:klc
--  发布时间:2013/4/15 11:16:40
--  

VARIABLE是每次计算(不是每个K线)都会被重新初始化

GLOBALVARIABLE不管公式被计算多少次只要不重新加载都不会被初始化。

 

但本人感觉GLOBALVARIABLE有个bug,就是勾选了“仅刷最后一根K线”时,每次有行情数据进来时,就被初始化了


--  作者:fly
--  发布时间:2013/4/15 16:11:16
--  

本地跟踪,没发现被初始化.

不知道楼上代码是怎么写的.


--  作者:klc
--  发布时间:2013/4/28 16:16:10
--  

fly,是会的,你测试下:

 

GLOBALVARIABLE:a=0;
VARIABLE:b=0;

if islastbar then

begin

  a:=a+1;

  b:=b+1;

  msgout(1,\'a=\' & numtostr(a,0) & \' b=\' & numtostr(b,0));

end;

 

逐K模式下,你勾选和不勾选“仅刷最后一根K线”时,结果应该不同


--  作者:木鱼石传说
--  发布时间:2013/6/27 10:06:55
--  
我是新手,对这个全局变量一直模糊,不理解其中的含义,请老师指点,为什么要搞个全局变量?它有什么作用?