以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://www.weistock.com/bbs/list.asp?boardid=2) ---- GLOBALVARIABLE经常被重置 (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=51758) |
-- 作者:klc -- 发布时间:2013/5/7 16:24:42 -- GLOBALVARIABLE经常被重置 我有一段代码统计今天的高点和低点:
GLOBALVARIABLE:d=0,今高=0,今低=0; if date()<d or ISLASTBAR then exit; if date()<>d then d:=date();
按照以上代码运行,今高、今低两个全局变量通常应该记录今天的高点和低点。 但在实盘中,有时候会突然今高、今低变成了0,我怎么看都不可能,难道是这个全局变量在某种情况下会变成0?但奇怪的是d又没变成0。还是high、low有时候会返回0? |
-- 作者:jinzhe -- 发布时间:2013/5/7 16:27:46 -- if date()<d or ISLASTBAR then exit;
这句放最后看看
|
-- 作者:klc -- 发布时间:2013/5/7 16:45:28 -- 我就是用他来加快效率的阿,我程序的代码和上面的不同,不知道是不是这个的关系,明天再测下:
GLOBALVARIABLE:d=0; if date()<d or ISLASTBAR then exit; GLOBALVARIABLE:今高=0,今低=0; if date()<>d then d:=date();
所以d不会变成0,但今高和今低就会了 |
-- 作者:王锋 -- 发布时间:2013/5/7 16:56:10 -- 代码里加入DEBUGFILE调试日志后看看运行记录情况 |
-- 作者:klc -- 发布时间:2013/5/7 17:03:27 -- 我现在把所有GLOBALVARIABLE变量声明都放在第一行了,明天测试看看,有可能是这个原因导致 |
-- 作者:klc -- 发布时间:2013/5/7 17:04:36 -- 对阿阿,我就用日志输出了,才发现一段时间正常,运行十多根K线后就不正常了 |
-- 作者:klc -- 发布时间:2013/5/7 17:08:42 -- 王锋,我用: MSGOUT(barpos=DATACOUNT-1,\'NN:\' & numtostr(NN,2));
这样输出来看的,倒数第2根K线计算时的值 |
-- 作者:klc -- 发布时间:2013/5/7 17:54:41 -- 测试代码:
cc:c,NODRAW; if date()<d or (date()=d and time()<=t) or ISLASTBAR then exit; GLOBALVARIABLE:B=0; d:=date();
输出是: 2013/05/07 17:16:48 d:1130507 |
-- 作者:klc -- 发布时间:2013/5/7 17:59:06 -- 按我的代码,不管如何,A和B的输出都应该是预期一样的(他们都应该和barpos一致)。 但实际输出就有不同了。发现原因了: GLOBALVARIABLE最好也保证每根K线都能执行到(尽管按理解他应该是刚加载的时候才有用的),GLOBALVARIABLE如果放在if then 或exit后面,有可能会被重新初始化。
我测了很久,不动他暂时没什么问题,但如果编辑下代码(仅加个空行),保存,有意思的是在exit前的GLOBALVARIABLE变量不会被重新初始化,而我代码exit后的GLOBALVARIABLE变量就会被初始化了。
也许exit导致GLOBALVARIABLE出现意外,不过应该提醒下,GLOBALVARIABLE最好放在最前面,确保每次调用程序都会执行到。 |
-- 作者:admin -- 发布时间:2013/5/7 20:58:48 -- 如果你把正在运行的公式重新编辑保存,会导致重新初始化的 |