以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  请帮忙看下这段代码有什么问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=77204)

--  作者:monarch
--  发布时间:2015/4/2 14:53:42
--  请帮忙看下这段代码有什么问题
这是随便写的一个测试全局变量的代码
属于交易系统,逐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);

--  作者:monarch
--  发布时间:2015/4/2 14:57:41
--  
这个附件是日志,可以从时间time
图片点击可在新窗口打开查看此主题相关图片如下:ttlog.png
图片点击可在新窗口打开查看
上看出来这几条是在最新k线上,由于tick变化而变化的,dayloged这个变量就这样周而复始的从0变1,又从1变0.
从0变1是代码写的,可以理解。
但是从1变0是从哪里发生的?

--  作者:jinzhe
--  发布时间:2015/4/2 15:06:24
--  
请问用在哪个周期上?
--  作者:monarch
--  发布时间:2015/4/2 15:08:23
--  
我是在1分钟周期下测试的
--  作者:jinzhe
--  发布时间:2015/4/2 15:21:25
--  

因为DEBUGFILE2(\'D:\\ttlog.txt\',\'+++++dayloged:%.0f\',dayloged,1); 这第一段的 调试代码,反映出了整段代码的计算顺序。

这根k线没有走完,这段代码会每来一个tick计算一次,每一次计算,你的变量就会回到上跟k线的值,也就是0,

所以你看到的结果是:

tick来了,变量变回上k线的值:0,然后计算之后变成1;再来tick,再变回0,然后再计算成1

 

 


--  作者:monarch
--  发布时间:2015/4/2 15:29:33
--  
居然是这个流程,bar内信息看来还要想其他办法来保存