以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://www.weistock.com/bbs/list.asp?boardid=4) ---- [求助]variable全局变量的用法。 (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=11990) |
-- 作者:zk7777777 -- 发布时间:2012/5/28 17:09:54 -- [求助]variable全局变量的用法。 variable全局变量的用法。 最好举例说明一下 谢谢 |
-- 作者:jinzhe -- 发布时间:2012/5/28 17:16:47 -- variable:a=0; if h>a then a:=h; 记录最高价,把当前h和a对比,如果h比a大,就把h赋值给a |
-- 作者:zk7777777 -- 发布时间:2012/5/29 0:13:54 -- variable:a=0; if h>a then a:=h; 有了上边的代码,意思就是a永远是最高值是吗???? [此贴子已经被作者于2012-5-29 0:14:22编辑过]
|
-- 作者:just -- 发布时间:2012/5/29 8:59:42 -- 如何设置固定止盈测试 关于全局变量: (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。 |