以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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
begin
 今高:=HIGH;//a;//今高
 今低:=low;//b;//今低
end
else begin
 if high>今高 then 今高:=high;
 if low<今低 then 今低:=low;
end;

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
begin
 今高:=HIGH;//a;//今高
 今低:=low;//b;//今低
end
else begin
 if high>今高 then 今高:=high;
 if low<今低 then 今低:=low;
end;

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;
GLOBALVARIABLE:d=0,t=0;
GLOBALVARIABLE:A=0;
MSGOUT(barpos=DATACOUNT-1,\'d:\' & numtostr(d,0));
MSGOUT(barpos=DATACOUNT-1,\'t:\' & numtostr(t,0));
MSGOUT(barpos=DATACOUNT-1,\'A:\' & numtostr(A,0));

if date()<d or (date()=d and time()<=t) or ISLASTBAR then exit;

GLOBALVARIABLE:B=0;
MSGOUT(barpos=DATACOUNT-1,\'B:\' & numtostr(B,0));
A:=A+1;
B:=B+1;

d:=date();
t:=time();

 

 

输出是:

2013/05/07 17:16:48  d:1130507
2013/05/07 17:16:48  t:121500
2013/05/07 17:16:48  A:4998
2013/05/07 17:16:48  B:4998
2013/05/07 17:17:02  d:1130507
2013/05/07 17:17:02  t:121600
2013/05/07 17:17:02  A:4999
2013/05/07 17:17:02  B:4999
2013/05/07 17:17:45  d:1130507
2013/05/07 17:17:45  t:121700
2013/05/07 17:17:45  A:5000
2013/05/07 17:17:46  d:1130507
2013/05/07 17:17:46  t:121700
2013/05/07 17:17:46  A:5000
2013/05/07 17:18:00  d:1130507
2013/05/07 17:18:00  t:121700
2013/05/07 17:18:00  A:5000
2013/05/07 17:18:00  B:0
2013/05/07 17:19:00  d:1130507
2013/05/07 17:19:00  t:121800
2013/05/07 17:19:00  A:5001
2013/05/07 17:19:00  B:1
2013/05/07 17:20:00  d:1130507
2013/05/07 17:20:00  t:121900
2013/05/07 17:20:00  A:5002
2013/05/07 17:20:00  B:2
2013/05/07 17:21:00  d:1130507
2013/05/07 17:21:00  t:122000
2013/05/07 17:21:00  A:5003
2013/05/07 17:21:00  B:3
2013/05/07 17:22:02  d:1130507
2013/05/07 17:22:02  t:122100
2013/05/07 17:22:02  A:5004
2013/05/07 17:22:02  B:4
.......


--  作者: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
--  
如果你把正在运行的公式重新编辑保存,会导致重新初始化的