OnBar更新highAfterEntry和lowAfterEntry在历史Bar和最新Bar的疑惑

如下代码所示,如果在OnBar里更新highAfterEntry和lowAfterEntry,实盘在最新Bar生命周期内每个Tick都会去更新highAfterEntry和lowAfterEntry吗?如果是这样的话,在有多单的情况下,比如Bar平开高走,highAfterEntry就会不断的变大,那么我根据highAfterEntry计算的多单止损值longStopLossPrice也会不断变大,我的代码里判断到Low<longStopLossPrice的时候就会触发止损,那岂不是会出现如下的现象:在持有多头的情况下,虽然价格不断上涨,longStopLossPrice也跟着上涨,涨到当当前Bar里Low<longStopLossPrice条件满足的时候,就触发了止损?


当我把 更新highAfterEntry和lowAfterEntry的代码 放到止损代码之前,历史回测的时候,会出现一根平开高走的Bar触发止损的情况,但如果把 更新highAfterEntry和lowAfterEntry的代码 放到止损代码之后,历史回测的时候,由于OnBar就运行一根包含Bar的OLHC的Tick,就在图上显示不会在同一根Bar上止损。


实盘的真实情况会怎么样呢?如果最新Bar上每个Tick都去更新highAfterEntry和lowAfterEntry,那就应该不管代码的顺序如何,都会在同一根平开高走的Bar上去止损多单,所以为了回测的准确性和K线上信号显示的准确性,应该把 更新highAfterEntry和lowAfterEntry的代码 放到止损代码之前?

我的理解有问题吗?

有什么办法妥善处理这个问题吗?


Vars   
    Global Numeric highAfterEntry;
    Global Numeric lowAfterEntry;

    Global Numeric longStopLossPrice;
    Global Numeric shortStopLossPrice;

Events
    OnBar(ArrayRef<Integer> indexs)
    {


    	// 更新highAfterEntry
		If (MarketPosition == 1)
		{
			If (BarsSinceEntry == 0)
				highAfterEntry = High;
			Else
				highAfterEntry = Max(High, highAfterEntry);
		}
		
		// 更新lowAfterEntry
		If (MarketPosition == -1)
		{
			If (BarsSinceEntry == 0)
				lowAfterEntry = Low;
			Else
				lowAfterEntry = Min(Low, lowAfterEntry);
		}
    }


onbar域上如何只使用最新一根历史bar的数据只画一次图
起始bar数和回溯bar数
在onbar以外的事件域中如何获取bar数据?
最新bar信号闪烁问题
多图层onBar(),各品种bar的时间对齐问题
barssincetoday barcount 等bar相关函数的应用和变形
求bar位置 和 最高值
在多周期中,如何约定onbar、onbaropen中的bar是哪个图层的bar?
Onbar OnTick谁先更新的问题?
CrossOver 和CrossUnder 在t根bar和t+1根bar上穿和下穿同时出现时无法识别的问题

如果我把更新 highAfterEntry和lowAfterEntry 的代码在OnBar里放到 移动止损代码 的后面,是不是有可能会出现信号闪烁?因为实时Bar里低开高走的Bar触发了止损后,历史回测的时候,由于要先用上一根Bar里的highAfterEntry和lowAfterEntry计算止损价格,然后判断完移动止损逻辑后,再去用当前历史Bar的High和Low去更新 移动止损价格,所以计算出来不会在低开高走的Bar上显示多头止损信号?

补充问题:为了保持回测结果和实盘的一致性,把更新 highAfterEntry和lowAfterEntry 的代码放到OnBarClose里执行,避免多单在一根 极端低开高走 的Bar上触发止损而错过后面的上涨行情,但其实也失去了让多单在 极端高开低走 的Bar上止损的机会。似乎没有完美的解决办法?