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产生信号闪烁的机制吗?




关于日内收盘最后一根bar的OnBarClose
收盘前最后一根bar的time怎么计算?
最后一根K线在收盘前交易
历史图标上最后一根Bar的OnBarClose不触发且QuoteDataExist值不对
怎么实现每根Bar结束前2秒触发ONbarclose执行
OnBarClose(ArrayRef<Integer> indexs)//中午,下午收盘前几秒有信号就执行吗?
如何不在一根BAR上开仓
请教:ONBARCLOSE函数,在当天收盘的最后一根K线时不会执行,而要等到明日或晚盘开盘的那根K线才执行的问题
如何确定当日最后一根BAR线
如何让OnBarClose在收盘后立即驱动,不要等下个bar

上述在OnBarClose函数了用了Open价格进行开平仓,应该是Close价格才对,否则不准确。但请忽略这个问题。重点还是信号闪烁相关的问题