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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]variable全局变量的用法。

   

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


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

主题:[求助]variable全局变量的用法。

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


加好友 发短信
等级:新手上路 帖子:46 积分:655 威望:0 精华:0 注册:2012/5/15 20:57:57
[求助]variable全局变量的用法。  发帖心情 Post By:2012/5/28 17:09:54    Post IP:122.89.143.183[只看该作者]

variable全局变量的用法。

最好举例说明一下 谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
jinzhe
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:罗宾汉 帖子:46311 积分:50819 威望:0 精华:2 注册:2011/3/23 8:50:25
  发帖心情 Post By:2012/5/28 17:16:47    Post IP:58.246.57.26[只看该作者]

 variable:a=0;

if h>a then a:=h;

记录最高价,把当前h和a对比,如果h比a大,就把h赋值给a



金字塔—专业程序化交易量化投资平台

客户服务部

----------------------------------------------------------- 欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com

 回到顶部
帅哥哟,离线,有人找我吗?
zk7777777
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:46 积分:655 威望:0 精华:0 注册:2012/5/15 20:57:57
  发帖心情 Post By:2012/5/29 0:13:54    Post IP:122.89.143.183[只看该作者]

variable:a=0;

if h>a then a:=h;

有了上边的代码,意思就是a永远是最高值是吗????

[此贴子已经被作者于2012-5-29 0:14:22编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
just
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:金字塔养老院 帖子:1323 积分:6764 威望:0 精华:0 注册:2011/6/14 17:27:11
如何设置固定止盈测试  发帖心情 Post By:2012/5/29 8:59:42    Post IP:58.246.57.26[只看该作者]

关于全局变量:

(1)一种是在公式里的,每次执行都被初始化一次的,这里的每次执行指的是每次金字塔执行公式系统的运行,即从1周期到BARCOUNT的过程。

比如一个变量这样声明:

variable:maxprofit=0;

它只会在第一个周期被初始化赋值为0,其他周期均不会对此变量进行赋值,比如:

 

variable:maxprofit=0;

IF BARPOS = 2 THEN

  MAXPROFIT := 10;

IF BARPOS = 10 THEN

  MAXPROFIT := 30;

AA:MAXPROFIT;

通过AA的显示曲线,用户应该会明白全局变量的用法和赋值规律。

另外请注意:

对于最后一个周期(图表上看就是最新的那个周期)才起作用的函数,如果使用了全局变量进行控制,千万记得加上islastbar控制条件,比如下面例子:

variable:a=10;

debugout('a1=%.0f',a);

if a=10 then begin

debugout('a2=%.0f',a);

tbuy(1,1,mkt);

a:=6;

debugout('a3=%.0f',a);

end;

debugout('a4=%.0f',a);

上面这个例子将无法得到下单买入的目的,因为当程序运行后,在第一周期TBUY并不执行,因为不是最新的周期,而此时a即被赋值为6,那么当程序一遍遍扫描运行到最新周期后,IF语句检测到a=6就不执行买操作了,所以您永远都不会有下单触发。

   上述公式将无法正常工作,是因为variable声明的变量是在整个计算周期内的全局变量,对于tbuy和debugout函数,他们都是在公式的最后的一个周期(最新周期的数据才能用于下单或者输入调试结果)才执行的函数,所以将导致最后一个周期到来时a实际已经等于6而不会去正确执行开仓语句。

解决办法是:if a=10 and islastbar then begin 这样加上最后周期判断,以避免a被过早赋新值,或者去掉 variable 变量声明,让a变为一个周期之内的变量即可。

 

(2)金字塔的另一种全局变量,可以保存数据到全局变量数据库中,具体参考 “EXTGBDATASET”和“ EXTGBDATA ”函数的调用,例如:

 

IF ISLASTBAR THEN

BEGIN

IF CURRENTTIME=090100 THEN

BEGIN

 DATE1:=EXTGBDATA('THISOPEN');

 IF DATE1 <> DATE THEN

 BEGIN

  SENDMAIL(1,'ABC@SINA.COM;XYZ@WEISTOCK.COM','警报','开盘了');

  EXTGBDATASET('THISOPEN',DATE);

 END

END

IF CURRENTTIME=145000 THEN

BEGIN

 DATE2:=EXTGBDATA('THISCLOSE');

 IF DATE2 <> DATE THEN

 BEGIN

  SENDMAIL(1,'ABC@SINA.COM;XYZ@WEISTOCK.COM','警报','收盘了');

  EXTGBDATASET('THISCLOSE',DATE);

 END

END

END

 

本代码加全局变量数据库控制,出现警报后置今日的标志位,然后判断标志位控制当天在开盘和收盘时只发一次邮件预警。

 

如何手工设置EXTGBDATA全局变量初始化值

工具-》数据-》全局变量 ,然后手工设置数字初始值,另外,第一次使用的全局变量,系统会自动默认为0。



金字塔—专业程序化交易量化投资平台

客户服务部

-----------------------------------------------------------

欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com
 回到顶部