定时器问题,请看评论

//------------------------------------------------------------------------

// 简称: 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);

}

}

请看评论
请教定时器问题
定时器
重新启开--定时器
关于定时器回调的问题
定时器 CreateTimer(6000),如何获取定时器过了多少时间
定时器/onbar和ontimer
定时器应用
一个策略能否使用多个定时器?
定时器

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

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

ReStart(False); 显然要在后续的特定分支下执行,至少应该所有的定时器干完活吧,

在里面stoptimer是干什么呢

已经改好了,谢谢了

不是让你去掉STOP?🙄

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

👍

。。。

去掉StopTimer

if  id1>0 && id2>0 restart(F)


id1&id2 收盘时候重置

前提是放在登录域


否则自己用全局记录是否restart过

或者id1先重置 id2收盘再重置


反正就这么简单的事情

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

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

现在我的想法是想在每天晚上开盘之前,根据不同的交易所,分别分别加一分钟重启工作区。目前我写的是在登录账户的时候创建定时器ID1(这里为了测试放在onbar里面的,实际在账户登录的域里面),在If(id2>0)之前都是正常的(创建id2后直接就重启了,没有分别等几分钟才重启),

请指出错误,万分感激,

现在有两个问题

1.后面应该怎么写才能实现我的想法呢(隐隐感觉If(id2>0)这里这么判断是不对的)。

2.或者还有没有更好的办法在开盘之前分不同的交易所分别加一分钟重启工作区呢?