OnBarClose如何能不在收盘前最后一根Bar执行开平仓信号?
我在OnBarClose里有平仓逻辑,通常用以下的在OnBarOpen函数里设置提前N秒执行OnBarClose的方式来确保10:15, 15:00, 23:00等收盘的Bar也能执行代码,否则收盘的Bar执行了代码的时候因为已经收盘了,无法执行信号。但是以下的方式仍然有一定的概率出现信号闪烁,因为最后1-2秒内仍然会有很多Tick产生,就可能让在条件临界值的信号产生闪烁。但我又不想在大周期里用回溯值进行条件判断,那样因为大周期在1H以上,隔一根大周期的Bar行情就可能变化很大 OnBarOpen(ArrayRef<Integer> indexes) { Numeric advancesec(2); //提前多少秒 Array<Numeric> timePoint; Numeric ret = DateTimeAdd(RealEndDateTime, -1 * advancesec); ret = StringToTime(TimeToString(ret)); //Print("endtime="+Text(RealEndDateTime)+" SetTriggerBarClose:" + Text(ret)); ArrayPushBack(timePoint, ret); SetTriggerBarClose(timePoint); }基于以上的信号闪烁的原因,我干脆不想在收盘Bar执行OnBarClose里的代码逻辑了,所以有以下问题:以下是OnBarClose代码,我可不可以在比如If (MarketPosition == 1 And BarsSinceEntry > 0)判断条件里加上 "And BarStatus[1] != 2" 来避免在10:15,15:00,23:00等收盘的Bar执行代码,也不产生信号闪烁?因为我想OnBarClose执行前,前一根Bar的BarStatus应该变成1了,但如果在收盘前的最后一根Bar执行,最后一根Bar的BarStatus应该还是2,我只是想避免收盘Bar产生信号闪烁。 OnBarClose(ArrayRef<Integer> indexs) { // 计算大周期MACD指标 Range[0:0] { //计算MACD MainDiff = XAverage(Close, MainFastLength) - XAverage(Close, MainSlowLength); MainDea = XAverage(MainDiff, MainMACDLength); MainMACDValue = 2 * (MainDiff - MainDea); } Range[1:1] { // 多头因大周期MACD指标转空平仓 If (MarketPosition == 1 And BarsSinceEntry > 0) { If (MainMACDValue < 0) { Sell(Lots, Open); Commentary("多头因大周期MACD指标转空平仓"); } } // 空头因大周期MACD指标转多平仓 If (MarketPosition == -1 And BarsSinceEntry > 0) { If (MainMACDValue > 0) { BuyToCover(Lots, Open); Commentary("空头因大周期MACD指标转多平仓"); } } } } 或者有其他不需要通过SetTriggerBarClose(timePoint);的更好的方式来防止在收盘时间执行OnBarClose产生信号闪烁的机制吗?