以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  轮询中条件语句不起作用?  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=97353)

--  作者:a141027
--  发布时间:2016/5/12 16:31:43
--  轮询中条件语句不起作用?
我想控制轮询中某些语句的执行次数,试验中碰到条件语句在轮询中不起作用的奇怪现象。公式如下:

variable:exe=0;
tb:todaybar,nodraw,colorwhite;
aa:=numtostr(tb,0);
if islastbar and exe=0 then 
begin
msgout(1,aa);
exe:=1;
end;

check_exe:exe,nodraw,colorwhite;

设计意图是msgout只执行一次,下一次就不再执行了,但实际执行结果是回测正常,但实盘就不对,msgout不断执行。详见附件截图。请问msgout语句在轮询中为何会反复执行?
图片点击可在新窗口打开查看此主题相关图片如下:未命名图片1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:未命名图片2.png
图片点击可在新窗口打开查看

--  作者:yukizzc
--  发布时间:2016/5/12 16:37:10
--  

是的,盘中会一直输出;

variable:num=0;

 

a:num;

if i then num:=1;

b:num;

 

通过这个了解下ab的数值不同


--  作者:a141027
--  发布时间:2016/5/12 16:39:07
--  
你里面的i是什么?
--  作者:a141027
--  发布时间:2016/5/12 17:23:11
--  
我猜i是islastbar吧。我明白你意思,判断语句在赋值语句之前,那时exe值还是0,因此条件判断通过。但我不理解的也是这里,exe已被声明为全局变量,轮询第一次的时候exe应该已被赋值为1,那么第二次轮询的时候exe值为什么又变回0呢?
--  作者:yukizzc
--  发布时间:2016/5/12 17:25:43
--  

看我2楼的代码

variable的全局变量是不会在当根k里面累加,如果你能理解a和b在盘中不断计算后的输出结果,应该就能知道这个函数的全局的概念了

或者看下http://www.weistock.com/WeisoftHelp/zbgs003.htm

[此贴子已经被作者于2016-5-12 17:26:58编辑过]

--  作者:a141027
--  发布时间:2016/5/12 18:14:55
--  
嗯,现在明白了,换成globalvariable使刷新不会重置exe值就可以了。谢谢。