这段代码出现跨周期跟踪止损信号闪烁请问问题在哪里?

Data0是选择的1小时周期,在程序里面subscribeBar 1天。

跨周期出现了信号闪烁,信号闪烁可能的原因有1.方向,2价格,3仓位,4买卖,我跟踪止损里面这4点都打印了一遍出来是固定死的,不知道为什么还是会出现信号闪烁,请教老师,谢谢您抽一点时间回答。

OnInit()
{
    SubscribeBar(Symbol, "1d", 20100101);
}
OnBar()
{
    Range[0:1]
    {
        atr = Average(TrueRange, ATRLength);
    }
    For layer = 0 To GetArraySize(indexs) - 1
    {
        if(indexs[layer] == 0)
        {
            Range[0:0]
            {
                // 追踪止损
                If(MarketPosition == 1)
                {
                    If(BarsSinceEntry == 0)                    // 开仓后第一根bar,直接等于开仓价
                    {
                        HighestAfterEntry = AvgEntryPrice;
                    }
                    Else If(BarsSinceEntry > 0)                // 之后的bar不断用最高和之前最高价做对比,赋值给开仓后最高价
                    {
                        HighestAfterEntry = Max(HighestAfterEntry[1], high[1]);
                    }
                    Else
                    {
                        HighestAfterEntry = HighestAfterEntry[1];
                    }
                    //跟踪止损平仓
                    If(MarketPosition == 1 and BarsSinceEntry > 0 and HighestAfterEntry - AvgEntryPrice > NATRstop*atr[1])         // 有多仓并且最低价已经低于开仓均线的xx 倍atr
                    {
                        If(low <= HighestAfterEntry - NATRstop*atr[1])
                        {
                            Sell(0, Min(Open, HighestAfterEntry - NATRstop*atr[1]));
                            Normal_trailing_long = True;
                            PlotString("trailing stop", "trailing stop", high*1.01, White);
                        }
                    }
                    // 硬止损平仓
                    If(MarketPosition == 1 and BarsSinceEntry > 0 and low <= AvgEntryPrice - NATRstop*atr[1]/ts)                // 只有硬止损时加上ts系数
                    {
                        MyExitPrice = Min(Open, AvgEntryPrice - NATRstop*atr[1]/ts);
                        Sell(0, MyExitPrice);
                        PlotString("HardStop", "HardStop", high*1.01, White);
                    }
                }
                Else If(MarketPosition == -1)
                {
                    If(BarsSinceEntry == 0)                    // 开仓后第一根bar,直接等于开仓价
                    {
                        LowestAfterEntry = AvgEntryPrice;
                    }
                    Else If(BarsSinceEntry > 0)                // 之后的bar不断用最低和之前最低价做对比,赋值给开仓后最低价
                    {
                        LowestAfterEntry = Min(LowestAfterEntry[1], low[1]);
                    }
                    Else                                    // 没有仓位时,保持上次价格信息,没有其他用途
                    {
                        LowestAfterEntry = LowestAfterEntry[1];
                    }
                    //跟踪止损平仓
                    If(MarketPosition == -1 and BarsSinceEntry > 0 and (AvgEntryPrice - LowestAfterEntry) > NATRstop*atr[1])         // 有空仓并且最高价已经大于开仓均线的xx 倍atr
                    {
                        If(high >= (LowestAfterEntry + NATRstop*atr[1]))
                        {
                            BuyToCover(0, Max(Open, LowestAfterEntry + NATRstop*atr[1]));
                            Normal_trailing_short = True;
                            PlotString("trailing stop", "trailing stop", high*1.01, White);
                            begins = False;
                            big_cond[0] = 0;
                        }
                    }
                    // 硬止损平仓
                    If(MarketPosition == -1 and BarsSinceEntry > 0 and high >= (AvgEntryPrice + NATRstop*atr[1]/ts))
                    {    
                        MyExitPrice = Max(Open, AvgEntryPrice + NATRstop*atr[1]/ts);
                        Print("MyExitPrice " + Text(MyExitPrice));
                        BuyToCover(0, MyExitPrice);
                        PlotString("HardStop", "HardStop", high*1.01, White);
                    }
                    
                }            
            }
        }
    }
}

请问老师关于跨周期信号闪烁问题
跨周期跟踪止盈策略
跨周期跟踪止损重复开仓问题
多周期策略出现信号闪烁问题。
策略单元中使用跨周期程序,出现的问题。
规避跨周期信号闪烁
跨周期策略,大周期在上小周期在下会出现问题吗?
这段代码为什么会信号闪烁?
在非【5分钟周期数据】上调用大周期数据,会出现交易信号闪烁的问题
关于跨周期的问题

您好!您这个策略产生信号消失的原因是因为交易信号做了一个 if(indexs[layer] == 0)的判断,这样如果触发OnBar的数据源是data1,就会导致这个Tick,data0图层的交易信号没有执行,从而导致信号消失。

谢谢回复。我的data1日线只是用ATR来算仓位,出现信号闪烁是在在跟踪止损的时候,移动止损的逻辑只在data0里面。

这个不冲突,data1的数据更新,还是算data1的ATR,只要允许公式在Data0上产生交易信号就可以,就能避免Data0上的信号消失。

我的交易信号是在1小时周期data0上产生的。

另外如果我是跨周期一个tick过来应该会执行两遍onBar吧,所以我才加了一个layer来判断只执行一次range[0:0]和一次range[1:1]。

有两个数据源是会可能触发两次(如果两个数据源同时更新就触发一次),所以不能强制某次触发时跳过包含交易信号的代码,这样会导致信号消失。