以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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语句在轮询中为何会反复执行?
![]() ![]() ![]() ![]() |
-- 作者: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值就可以了。谢谢。 |