这是随便写的一个测试全局变量的代码属于交易系统,逐k计算,仅刷新最后一根k线。我发现全局变量dayloged这个值的变化跟我预期的不同。
在最新的k线没有走完时,仅刷新最后一根k线,此时,dayloged这个变量在 第二个if完成后,值为1.但是下一个tick来的时候,这个值就变成了0,又重新进入了这个if。在k线走完前就一直重复变成0,又变成1的循环。 而我的本意是他应该等于1的,没有理由变成0(只有每天第一根k线才变0)
代码如下,请各位高手刚忙看看:
variable:dayloged:=-1;
DEBUGFILE2('D:\ttlog.txt','+++++dayloged:%.0f',dayloged,1);
if date<>ref(date,1) then
begin
dayloged:=0;
DEBUGFILE2('D:\ttlog.txt','newday:%.0f',4,1);
end
if islastbar and dayloged=0 then
begin
dayloged:=1;
DEBUGFILE2('D:\ttlog.txt','+++++changeddata:%.0f',dayloged,1);
DEBUGFILE2('D:\ttlog.txt','+++++changedtime:%.0f',time,1);
end
DEBUGFILE2('D:\ttlog.txt','-----dayloged:%.0f',dayloged,1);
DEBUGFILE2('D:\ttlog.txt','-----time:%.0f',time,1);
这个附件是日志,可以从时间time

此主题相关图片如下:ttlog.png

上看出来这几条是在最新k线上,由于tick变化而变化的,dayloged这个变量就这样周而复始的从0变1,又从1变0.
从0变1是代码写的,可以理解。
但是从1变0是从哪里发生的?
因为DEBUGFILE2('D:\ttlog.txt','+++++dayloged:%.0f',dayloged,1); 这第一段的 调试代码,反映出了整段代码的计算顺序。
这根k线没有走完,这段代码会每来一个tick计算一次,每一次计算,你的变量就会回到上跟k线的值,也就是0,
所以你看到的结果是:
tick来了,变量变回上k线的值:0,然后计算之后变成1;再来tick,再变回0,然后再计算成1
居然是这个流程,bar内信息看来还要想其他办法来保存