OnBarClose设置提前触发,有提前触发却没有发出委托
1小时周期,设置提前触发OnBarClose,基本抄的示范例子,只是排除了0.1014这个小节: OnReady() { Range[0:DataCount-1] { Array<Numeric> timePoint; Integer i; Print(\"GetSessionCount:\" + Text(GetSessionCount)); For i = 0 To GetSessionCount() - 1 { Numeric ret = DateTimeAdd(GetSessionEndTime(i), -9); if(ret < 0) { ret = DateTimeAdd(GetSessionEndTime(i), 86400 - 9); } ret = StringToTime(TimeToString(ret)); if(ret>=0.1014 && ret<=0.11) { Print(\"no SetTriggerBarClose:\" + Text(ret)); continue;//排除10:15的15分钟休息 } Print(\"SetTriggerBarClose:\" + Text(ret)); ArrayPushBack(timePoint, ret); } SetTriggerBarClose(timePoint); } }另外说一下,这里有个奇怪的地方,如果设置数据源是具体个数,比如1000bar,GetSessionCount显示是4个(带夜盘的),如果数据源设置开始日期(测试用2023-1-1开始),GetSessionCount显示3个,就少夜盘的时间段了。下面是测试用的OnBarClose: OnBarClose(ArrayRef<Integer> indexs) { Print(\"OnBarClose:\" + Text(T)+\" CurrentTime:\"+Text(CurrentTime)); //Commentary(\"T:\"+Text(T)); //Commentary(\"EndTime:\"+Text(EndTime())); If(T==0.11){ Buy(3,Close); FileAppend(\"D:\\\\ATB\", Symbol+\" Buy 3 OnBarClose:0.11 CurrentTime:\"+Text(CurrentTime)); } If(T==0.14) { Sell(1,Close); FileAppend(\"D:\\\\ATB\", Symbol+\" Sell 1 OnBarClose:0.14 CurrentTime:\"+Text(CurrentTime)); } If( T==0.22) { Sell(0,Close); FileAppend(\"D:\\\\ATB\", Symbol+\" Sell 0 OnBarClose:0.22 CurrentTime:\"+Text(CurrentTime)); } }在文件里可以查询出最早的:MA888.CZCE Sell 1 OnBarClose:0.14 CurrentTime:0.145949166最后的:MA888.CZCE Sell 1 OnBarClose:0.14 CurrentTime:0.150459480可以确定是提前触发进入了If(T==0.14)的内部,Sell语句应该是执行过了,不知是不是Sell失败了,K线图没有信号,也没有委托发出,问题出在哪呢?