集合竞价结束,alert重复运行

昨天又遇到了同样的问题,alert同一根bar上一下发送了很多条,如下图:然后今早我写了个代码测试了一下,复现了。代码如下:Params //此处添加参数 Vars //此处添加变量 Series<Integer> bar_in_day;//日内k线计数 Global Integer gAlert(0); // 跨所有图层共享 Defs //此处添加策略函数 Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次 OnInit() { SubscribeBar(Data0.Symbol,"1d",data0.BeginDatetime,Data0.EndDateTime);//订阅多周期的数据源 } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { If(TrueDate(0)<>TrueDate(1)) { bar_in_day = 0; } bar_in_day = bar_in_day + 1; //自己计数 //当日开盘直接开 if(bar_in_day == 1) { if(BarStatus == 2) { Buy(1,Open); Alert("公式" + FormulaName + ":" + "警报测试"); //警报 gAlert = gAlert + 1; FileAppend("C:\\tbfile\\模板.tbf", TimeToString(date+Time)); FileAppend("C:\\tbfile\\模板.tbf", text(gAlert)); } } }alert重复了4次:我总结出一个结论:集合竞价完成后,也就是早盘08:59,策略里面有几个图层,alert就会重复几次。上面实盘上我一共加载了16个图层,所以重复了16次,测试代码我一共加载了4个图层,所以重复了4次。但只要过了08:59这个点,第一根bar以后,不管有几个图层,alert就只出现一次,不会重复。请问老师造成这种情况的原因是什么?我的alert和buy、sell等写在一起的,这种情况会不会对交易造成影响?以我的测试代码为例,怎么改alert就不会重复了?

最新一根bar出信号,多图层range、for控制下

回复:不是很懂。我这个代码,只是写了Alert("公式" + FormulaName + ":" + "警报测试"); //警报没有加前缀data1.alert,也没有用range遍历图层,那么它不应该只在第一个图层data0上警报一次么?为什么有个图层,会重复几次?

回复:满足周期的所有标的合约都会走一次onbar代码,只不过都执行到data0上去了,data0.alert(),也会一直预警,订阅的有10s一次,每隔10s也会预警一次,都是日线周期的,几个品种,会重复几次

回复:感谢老师,明白了👍