定时器问题,请看评论

//------------------------------------------------------------------------// 简称: aaa// 名称: // 类别: 公式应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------Params Vars Global Numeric id1; Global Numeric id2; Global Array<String> str1;Events OnInit() { StringSplit(MainSymbol,".",str1);//获取交易所后面代码 } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { //Print(""+Text(DateTimeAdd(SystemDateTime, 1*60))); //Print(""+Text(currenttime+0.0006)); If(date+Time==20251223.0137) { id1 = CreateTimer(1, 0, 1); } } OnTimer(Integer id,Integer millsecs) { If(id1>0) { if(str1[1]=="SHFE") { id2= CreateTimer(60*1000*1,DateTimeAdd(SystemDateTime, 1*60),1); Print(""+Text(1)); } Else IF(str1[1]=="DCE") { id2= CreateTimer(60*1000*2,DateTimeAdd(SystemDateTime, 2*60), 1); Print(""+Text(2)); } Else IF(str1[1]=="CZCE") { id2= CreateTimer(60*1000*3,DateTimeAdd(SystemDateTime, 3*60), 1); Print(""+Text(3)); } Else IF(str1[1]=="CFFEX") { id2= CreateTimer(60*1000*4,DateTimeAdd(SystemDateTime, 4*60), 1); Print(""+Text(4)); } Else IF(str1[1]=="INE") { id2= CreateTimer(60*1000*5,DateTimeAdd(SystemDateTime, 5*60), 1); Print(""+Text(5)); } Else IF(str1[1]=="GFEX") { id2= CreateTimer(60*1000*6,DateTimeAdd(SystemDateTime, 6*60), 1); Print(""+Text(6)); } } If(id2>0) { FileAppend("C:\\1010\\"+SymbolName+Frequency()+".tbf",DateTimeToString(Date+Time) +","+"------------" +","+text(id2) ); StopTimer(id1); StopTimer(id2); ID1=0; ID2=0; ReStart(False); } }

ReStart(False); 就在ontimer第一层,那不是第一个timer就重启了?

回复:麻烦老师说一下这里应该怎么改呢,因为我看到第二个定时器也是第一时间就创建了(ReStart这个不是在id2下面吗,为啥说这个就是在ontimer第一层),因为定时器的例子太少了,没得地方借鉴,也不了解其中的逻辑,也没得教学视频说这些。就是现在卡在这里不晓得怎么改了。

回复:ReStart(False); 显然要在后续的特定分支下执行,至少应该所有的定时器干完活吧,在里面stoptimer是干什么呢

回复:已经改好了,谢谢了

回复:不是让你去掉STOP?🙄

回复:已经改好了,谢谢了,去掉了,然后 只在第一个定时器就判断是哪一个交易所就对了。不用两个定时器

回复:👍

。。。去掉StopTimerif id1>0 && id2>0 restart(F)id1&id2 收盘时候重置

回复:前提是放在登录域否则自己用全局记录是否restart过或者id1先重置 id2收盘再重置反正就这么简单的事情

回复:感谢,但是已经去掉了,还是同时重启。也就是上面我写在ontimer域里面的都要放在登录域里面吗?

回复:老哥,这样还是会同时重启。实在没办法了😂

现在我的想法是想在每天晚上开盘之前,根据不同的交易所,分别分别加一分钟重启工作区。目前我写的是在登录账户的时候创建定时器ID1(这里为了测试放在onbar里面的,实际在账户登录的域里面),在If(id2>0)之前都是正常的(创建id2后直接就重启了,没有分别等几分钟才重启),请指出错误,万分感激,现在有两个问题1.后面应该怎么写才能实现我的想法呢(隐隐感觉If(id2>0)这里这么判断是不对的)。2.或者还有没有更好的办法在开盘之前分不同的交易所分别加一分钟重启工作区呢?