我有一段代码统计今天的高点和低点:
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?
if date()<d or ISLASTBAR then exit;
这句放最后看看
我就是用他来加快效率的阿,我程序的代码和上面的不同,不知道是不是这个的关系,明天再测下:
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,但今高和今低就会了
王锋,我用:
MSGOUT(barpos=DATACOUNT-1,'NN:' & numtostr(NN,2));
这样输出来看的,倒数第2根K线计算时的值
测试代码:
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
.......
按我的代码,不管如何,A和B的输出都应该是预期一样的(他们都应该和barpos一致)。
但实际输出就有不同了。发现原因了:
GLOBALVARIABLE最好也保证每根K线都能执行到(尽管按理解他应该是刚加载的时候才有用的),GLOBALVARIABLE如果放在if then 或exit后面,有可能会被重新初始化。
我测了很久,不动他暂时没什么问题,但如果编辑下代码(仅加个空行),保存,有意思的是在exit前的GLOBALVARIABLE变量不会被重新初始化,而我代码exit后的GLOBALVARIABLE变量就会被初始化了。
也许exit导致GLOBALVARIABLE出现意外,不过应该提醒下,GLOBALVARIABLE最好放在最前面,确保每次调用程序都会执行到。