策略代码出现信号闪烁 一根K线出现多次委托 那个地方出了问题

//------------------------------------------------------------------------

// 简称: wgb111

// 名称: wgb111自编策略

// 类别: 策略应用

// 类型: 用户应用

// 输出: Void

//------------------------------------------------------------------------

Params

   Numeric ATRLength(14);                // ATR周期

   Numeric StopLossATRMulti(2.0);        // 止损ATR倍数

   Numeric TakeProfitATRMulti(2.0);      // 止盈ATR倍数

   Numeric MinBarsAfterEntry(5);          // 开仓后最小K线数

   Numeric TradeVolume(1);               // 交易手数(可手动调节)

   Bool EnableClosePosition(True);       // 启用收盘清仓功能

   Numeric DayCloseTime(1458);           // 日盘收盘时间(14:58)

   Numeric NightCloseTime1(2258);        // 夜盘收盘时间1(22:58)

   Numeric NightCloseTime2(228);         // 夜盘收盘时间2(02:28)

   Numeric NightCloseTime3(58);          // 夜盘收盘时间3(00:58)

Vars

   Series<Numeric> SJ;                   // 日期过滤条件

   Series<Numeric> HH1;                  // 临时高点1

   Series<Numeric> LL1;                  // 临时低点1

   Series<Numeric> HH;                   // 综合高点

   Series<Numeric> LL;                   // 综合低点

   Series<Numeric> H1;                   // 确认高点

   Series<Numeric> L1;                   // 确认低点

   Series<Numeric> X0;                   // 高点信号

   Series<Numeric> X00;                  // 低点信号

   Series<Numeric> H2;                   // 有效高点

   Series<Numeric> L2;                   // 有效低点

   Series<Numeric> K1;                   // 多空状态

   Series<Numeric> K2;                   // 多空状态确认

   Series<Numeric> G;                    // 多空分界线

   Series<Numeric> TMP;                  // 交易信号

   Series<Numeric> ATRVal;               // ATR值

   Series<Numeric> EntryPrice;           // 入场价格

   Series<Numeric> StopLossPrice;        // 止损价格

   Series<Numeric> TakeProfitPrice;      // 止盈价格

   Series<Numeric> MP;                   // 仓位状态记录

   Bool CanTrade(True);                  // 允许交易标志

   Bool BuySignal(False);                // 做多信号

   Bool SellSignal(False);               // 做空信号

   Series<Numeric> HighestOpen;          // 开盘价最高值

   Series<Numeric> LowestOpen;           // 开盘价最低值

   Series<Numeric> BarsSinceEntry;       // 开仓后的K线数

   Series<Numeric> PrevTMP;              // 上一根K线的TMP值

   Bool SignalGenerated(False);          // 信号生成标志

   Bool ClosePositionSignal(False);      // 清仓信号

   Bool BuyCondition(False);             // 做多条件

   Bool SellCondition(False);            // 做空条件

   Bool TradeExecuted(False);            // 交易已执行标志

   Numeric LastSignalBar(0);             // 上次信号发生的K线

   Bool BuyConditionPrev(False);         // 上一根K线的做多条件

   Bool SellConditionPrev(False);        // 上一根K线的做空条件

   // ========== 信号变量 ==========

   Bool NextBarBuySignal(False);         // 下一根K线开盘买入信号

   Bool NextBarSellSignal(False);        // 下一根K线开盘卖出信号

   Bool NextBarCloseSignal(False);       // 下一根K线开盘清仓信号

   // ========== 新增关键变量 ==========

   Bool CrossUpSignal(False);            // 上穿信号

   Bool CrossDownSignal(False);          // 下穿信号

   Numeric PrevK2(0);                    // 上一根K线的K2值

   // ========== 新增变量:防信号闪烁 ==========

   Bool SignalDetectedThisBar(False);    // 本K线已检测到信号

   Bool TradeExecutedThisBar(False);     // 本K线已执行交易

   Series<Numeric> BuySignalPrice;         // 买入信号价格标记

   Series<Numeric> SellSignalPrice;        // 卖出信号价格标记

   Series<Numeric> CloseSignalPrice;       // 清仓信号价格标记

   Bool CurrentBuySignal(False);         // 当前K线买入信号

   Bool CurrentSellSignal(False);        // 当前K线卖出信号

   Bool CurrentCloseSignal(False);       // 当前K线清仓信号


Events

   OnBar(ArrayRef<Integer> indexs)

   {

       // 初始化

       If (BarStatus == 0)

       {

           MP = 0;

           CanTrade = True;

           BuySignal = False;

           SellSignal = False;

           HighestOpen = Open;

           LowestOpen = Open;

           H2 = 0;

           L2 = 0;

           K2 = 0;

           BarsSinceEntry = 0;

           PrevTMP = 0;

           SignalGenerated = False;

           ClosePositionSignal = False;

           BuyCondition = False;

           SellCondition = False;

           TradeExecuted = False;

           TradeExecutedThisBar = False;

           LastSignalBar = 0;

           BuyConditionPrev = False;

           SellConditionPrev = False;

       }

       

       // 每根K线开始时重置交易权限

       If (BarStatus == 1)

       {

           CanTrade = True;

           TradeExecuted = False;

// 保存上一根K线的信号条件

           BuyConditionPrev = BuyCondition;

           SellConditionPrev = SellCondition;

       }

       

      // 更新开仓后的K线数

       If (MarketPosition != 0)

       {

           BarsSinceEntry = BarsSinceEntry + 1;

       }

       Else

       {

           BarsSinceEntry = 0;

       }

           

       

       // 保存上一根K线的TMP值

       PrevTMP = TMP[1];

       

       // 更新开盘价最高最低值

       HighestOpen = Max(HighestOpen[1], Open);

       LowestOpen = Min(LowestOpen[1], Open);

       

       // 计算ATR

       ATRVal = AvgTrueRange(ATRLength);

       

       // 计算日期条件

       SJ = IIF(Date + 0 < 20991028, 1, 0);

       

       // 计算临时高点和低点

       HH1 = IIF(H < Ref(H, 1) && Ref(H, 1) < Ref(H, 2), Ref(H, 2), 0);

       LL1 = IIF(L > Ref(L, 1) && Ref(L, 1) > Ref(L, 2), Ref(L, 2), 0);

       

       // 计算综合高点和低点

       HH = (Highest(H, 1) * SJ / 10) +

            (Highest(H, 2) / 10) +

            (Highest(H, 2) / 10) +

            (Highest(H, 4) / 10) +

            (Highest(H, 4) / 10) +

            (Highest(H, 8) / 10) +

            (Highest(H, 8) / 10) +

            (Highest(H, 13) / 10) +

            (Highest(H, 40) / 10) +

            (Highest(H, 20) / 10);

           

       LL = (Lowest(L, 1) * SJ / 10) +

            (Lowest(L, 2) / 10) +

            (Lowest(L, 2) / 10) +

            (Lowest(L, 4) / 10) +

            (Lowest(L, 4) / 10) +

            (Lowest(L, 8) / 10) +

            (Lowest(L, 8) / 10) +

            (Lowest(L, 13) / 10) +

            (Lowest(L, 40) / 10) +

            (Lowest(L, 20) / 10);

       

       // 计算确认高点和低点

       H1 = IIF(HH < Ref(HH, 1) && LL < Ref(LL, 1) &&

               Ref(Open, 1) > Close && Open > Close &&

               (HighestOpen - Close) > 0, Ref(HH, 2), 0);

               

       L1 = IIF(LL > Ref(LL, 1) && HH > Ref(HH, 1) &&

               Ref(Open, 1) < Close && Open < Close &&

               (Close - LowestOpen) > 0, Ref(LL, 2), 0);

       

       // 计算信号

       X0 = H1;

       X00 = L1;

       

       // 替代VALUEWHEN函数:计算有效高点和低点

       // 使用条件判断查找最近一次X0>0的值

       If (X0 > 0)

       {

           H2 = X0;

       }

       Else

       {

           H2 = H2[1];

       }

       

       // 使用条件判断查找最近一次X00>0的值

       If (X00 > 0)

       {

           L2 = X00;

       }

       Else

       {

           L2 = L2[1];

       }

       

       // 计算多空状态

       K1 = IIF(Close > H2, -3, IIF(Close < L2, 1, 0));

       

       // 替代VALUEWHEN函数:计算K2

       If (K1 != 0)

       {

           K2 = K1;

       }

       Else

       {

           K2 = K2[1];

       }

       

       G = IIF(K2 == 1, H2, L2);

       TMP = K2;

       

       // 检测交易条件 - 使用CrossOver和CrossUnder函数

       BuyCondition = CrossUnder(TMP, 0) && Vol > 0;

       SellCondition = CrossOver(TMP, 0) && Vol > 0;

     

       // 检测收盘清仓信号 - 增加00:59清仓时间

       If (EnableClosePosition)

       {

           // 日盘收盘时间14:59

           If (Time >= DayCloseTime/10000 && Time < (DayCloseTime/10000 + 0.0001))

           {

               ClosePositionSignal = True;

           }

           // 夜盘收盘时间22:59

           Else If (Time >= NightCloseTime1/10000 && Time < (NightCloseTime1/10000 + 0.0001))

           {

               ClosePositionSignal = True;

           }

           // 夜盘收盘时间02:29

           Else If (Time >= NightCloseTime2/10000 && Time < (NightCloseTime2/10000 + 0.0001))

           {

               ClosePositionSignal = True;

           }

           // 夜盘收盘时间00:59 - 新增时间点

           Else If (Time >= NightCloseTime3/10000 && Time < (NightCloseTime3/10000 + 0.0001))

           {

               ClosePositionSignal = True;

           }

           // 处理跨天情况:02:29在第二天凌晨

           Else If (NightCloseTime2 < 1000 && Time >= (240000 + NightCloseTime2)/10000)

           {

               ClosePositionSignal = True;

           }

           // 处理跨天情况:00:59在第二天凌晨 - 新增

           Else If (NightCloseTime3 < 1000 && Time >= (240000 + NightCloseTime3)/10000)

           {

               ClosePositionSignal = True;

           }

           Else

           {

               ClosePositionSignal = False;

           }

       }


// ========== 关键修改:当根K线收盘时判断信号 ==========

       If (BarStatus == 2)

       {

           // 检测交易信号

           If (BuyCondition && !BuyConditionPrev && Vol > 0)

           {

               NextBarBuySignal = True;

               NextBarSellSignal = False;

               SignalGenerated = True;

               LastSignalBar = CurrentBar;

               CurrentBuySignal = True;

           }

           Else If (SellCondition && !SellConditionPrev && Vol > 0)

           {

               NextBarSellSignal = True;

               NextBarBuySignal = False;

               SignalGenerated = True;

               LastSignalBar = CurrentBar;

               CurrentSellSignal = True;

           }

       }

           

            Else

       {

           

         

           

           // 如果不是新信号,保持原有状态

           SignalGenerated = False;

           

           // 只在K线收盘时重置信号,避免信号丢失

           If (BarStatus == 2)

           {

               BuySignal = False;

               SellSignal = False;

               SignalGenerated = False;

           }

       }


// 系统交易逻辑 - 连续反转模式  下一根K线开盘时执行委托

     

          If (BarStatus == 2 && CanTrade && Vol > 0 && !TradeExecutedThisBar)

       

       {

           CanTrade = True;

           TradeExecuted = False;

           

           // 收盘清仓信号

          If (ClosePositionSignal && MarketPosition != 0  && !TradeExecutedThisBar)

           {

               If (MarketPosition == 1)

                   Sell(TradeVolume, Open);

               Else

                   BuyToCover(TradeVolume, Open);

               CanTrade = False;

               TradeExecuted = True;

               TradeExecutedThisBar = True; // 标记本K线已执行交易

               NextBarCloseSignal = False;

           }

           

         

         

            // 做多信号处理 - 确保只执行一次

           If (NextBarBuySignal && !TradeExecutedThisBar)

           {

               // 平掉所有现有仓位

               If (MarketPosition != 0)

               {

                   If (MarketPosition == 1)

                       Sell(TradeVolume, Close);

                   Else

                       BuyToCover(TradeVolume, Close);

               }

               

               // 开立多头仓位

               Buy(TradeVolume, Close);

               EntryPrice = Close;

               StopLossPrice = EntryPrice - StopLossATRMulti * ATRVal[1];

               TakeProfitPrice = EntryPrice + TakeProfitATRMulti * ATRVal[1];

               CanTrade = False;

               BarsSinceEntry = 0;

               TradeExecuted = True;

               NextBarBuySignal = False;

               TradeExecutedThisBar = True; // 标记本K线已执行交易

     

               // 重置信号

               SellSignal = False;

               SignalGenerated = False;  

             

               }

           

           // 做空信号处理 - 确保只执行一次

           If (NextBarSellSignal && !TradeExecutedThisBar)

           {

               // 平掉所有现有仓位

               If (MarketPosition != 0)

               {

                   If (MarketPosition == 1)

                       Sell(TradeVolume, Close);

                   Else

                       BuyToCover(TradeVolume, Close);

               }

               

               // 开立空头仓位

               SellShort(TradeVolume, Close);

               EntryPrice = Close;

               StopLossPrice = EntryPrice + StopLossATRMulti * ATRVal[1];

               TakeProfitPrice = EntryPrice - TakeProfitATRMulti * ATRVal[1];

               CanTrade = False;

               BarsSinceEntry = 0;

               TradeExecuted = True;

               NextBarSellSignal = False;

               TradeExecutedThisBar = True; // 标记本K线已执行交易

           

               // 重置信号

               SellSignal = False;

               SignalGenerated = False;  

             

               }

         }


    // 记录仓位状态

       MP = MarketPosition;

       

   }

//------------------------------------------------------------------------

// 编译版本    2025/9/27 42927

// 版权所有    wgb13568805968

// 更改声明    TradeBlazer Software保留对TradeBlazer平台

//            每一版本的TradeBlazer策略修改和重写的权利

//------------------------------------------------------------------------

多周期策略出现信号闪烁问题。
只有夜盘出现信号闪烁问题
回测无信号闪烁,实盘中出现信号问题。
同一根K线信号闪烁的问题
请教定时开平仓出现信号闪烁的问题
信号闪烁,信号闪烁出现第一次就固定信号
请教:TB自带的海归系统出现信号闪烁的问题
策略自动交易,开仓信号闪烁,先出现,最后再消失
一根K线多信号
实盘时出现了信号闪烁问题,求老师解答

https://bbs.tbquant.net/thread/20241205191017589628  

问题过多

大规模的修改,需要发代编贴,参考置顶

策略可以的,你这是 破解的通达信策略,可以改简单点有的是无效代码://Numeric ATRLength(14);                // ATR周期

  //Numeric StopLossATRMulti(2.0);        // 止损ATR倍数

  //Numeric TakeProfitATRMulti(2.0);      // 止盈ATR倍数

  //Numeric MinBarsAfterEntry(5);         // 开仓后最小K线数

这是锁对你没用 SJ = IIF(Date + 0 < 20991028, 1, 0);//SJ=1;


 

还有什么地方改动 删除了 编一个完整的 不会信号闪烁的

// 计算多空状态

      K1 = IIF(Close[1] > H2, -3, IIF(Close[1] < L2, 1, 0));

谢谢


Params

  Numeric TradeVolume(1);               // 交易手数(可手动调节)

  Bool EnableClosePosition(True);       // 启用收盘清仓功能

  Numeric DayCloseTime(1458);           // 日盘收盘时间(14:58)

  Numeric NightCloseTime1(2258);        // 夜盘收盘时间1(22:58)

  Numeric NightCloseTime2(0228);         // 夜盘收盘时间2(02:28)

  Numeric NightCloseTime3(0058);          // 夜盘收盘时间3(00:58)

Vars

  Series<Numeric> SJ;                   // 日期过滤条件

  Series<Numeric> HH1;                  // 临时高点1

  Series<Numeric> LL1;                  // 临时低点1

  Series<Numeric> HH;                   // 综合高点

  Series<Numeric> LL;                   // 综合低点

  Series<Numeric> H1;                   // 确认高点

  Series<Numeric> L1;                   // 确认低点

  Series<Numeric> X0;                   // 高点信号

  Series<Numeric> X00;                  // 低点信号

  Series<Numeric> H2;                   // 有效高点

  Series<Numeric> L2;                   // 有效低点

  Series<Numeric> K1;                   // 多空状态

  Series<Numeric> K2;                   // 多空状态确认

  Series<Numeric> G;                    // 多空分界线

  Series<Numeric> TMP;                  // 交易信号

  Series<Numeric> ATRVal;               // ATR值

  Series<Numeric> MyEntryPrice;           // 入场价格

  Series<Numeric> StopLossPrice;        // 止损价格

  Series<Numeric> TakeProfitPrice;      // 止盈价格

  Series<Numeric> MP;                   // 仓位状态记录

  Bool MyCanTrade(True);                  // 允许交易标志

  Bool BuySignal(False);                // 做多信号

  Bool SellSignal(False);               // 做空信号

  Series<Numeric> HighestOpen;          // 开盘价最高值

  Series<Numeric> LowestOpen;           // 开盘价最低值

  Series<Numeric> myBarsSinceEntry;       // 开仓后的K线数

  Series<Numeric> PrevTMP;              // 上一根K线的TMP值

  Bool SignalGenerated(False);          // 信号生成标志

  Bool ClosePositionSignal(False);      // 清仓信号

  Bool BuyCondition(False);             // 做多条件

  Bool SellCondition(False);            // 做空条件

  Bool TradeExecuted(False);            // 交易已执行标志

  Numeric LastSignalBar(0);             // 上次信号发生的K线

  Bool BuyConditionPrev(False);         // 上一根K线的做多条件

  Bool SellConditionPrev(False);        // 上一根K线的做空条件

  // ========== 信号变量 ==========

  Bool NextBarBuySignal(False);         // 下一根K线开盘买入信号

  Bool NextBarSellSignal(False);        // 下一根K线开盘卖出信号

  Bool NextBarCloseSignal(False);       // 下一根K线开盘清仓信号

  // ========== 新增关键变量 ==========

  Bool CrossUpSignal(False);            // 上穿信号

  Bool CrossDownSignal(False);          // 下穿信号

  Numeric PrevK2(0);                    // 上一根K线的K2值

  // ========== 新增变量:防信号闪烁 ==========

  Bool SignalDetectedThisBar(False);    // 本K线已检测到信号

  Bool TradeExecutedThisBar(False);     // 本K线已执行交易

  Series<Numeric> BuySignalPrice;       // 买入信号价格标记

  Series<Numeric> SellSignalPrice;      // 卖出信号价格标记

  Series<Numeric> CloseSignalPrice;     // 清仓信号价格标记

  Bool CurrentBuySignal(False);         // 当前K线买入信号

  Bool CurrentSellSignal(False);        // 当前K线卖出信号

  Bool CurrentCloseSignal(False);       // 当前K线清仓信号

Events

  OnBar(ArrayRef<Integer> indexs)

  {

      // 每根K线开始时重置交易权限

      If (BarStatus == 1)              //值0第一个Bar,1中间的普通Bar,2最后一个Bar

      {

          MyCanTrade = True;

          TradeExecuted = False;

         // 保存上一根K线的信号条件

          BuyConditionPrev = BuyCondition;//上一根开多

          SellConditionPrev = SellCondition;//上一根一空

      }

      // 更新开仓后的K线数

      If (MarketPosition != 0)

      {

          MyBarsSinceEntry = BarsSinceEntry + 1;

      }

      Else

      {

          MyBarsSinceEntry = 0;

      }

      // 保存上一根K线的TMP值

      PrevTMP = TMP[1];

      // 更新开盘价最高最低值

      HighestOpen = Max(HighestOpen[1], Open);

      LowestOpen = Min(LowestOpen[1], Open);

      // 计算日期条件

      SJ = IIF(Date + 0 < 20991028, 1, 0);//SJ=1;

      // 计算临时高点和低点

      HH1 = IIF(High < Ref(High, 1) && Ref(High, 1) < Ref(High, 2), Ref(High, 2), 0);

      LL1 = IIF(Low > Ref(Low, 1) && Ref(Low, 1) > Ref(Low, 2), Ref(Low, 1), 2);

      // 计算综合高点和低点

      HH = (Highest(High, 1) * SJ / 10) +

           (Highest(High, 2) / 10) +

           (Highest(High, 2) / 10) +

           (Highest(High, 4) / 10) +

           (Highest(High, 4) / 10) +

           (Highest(High, 8) / 10) +

           (Highest(High, 8) / 10) +

           (Highest(High, 13) / 10) +

           (Highest(High, 40) / 10) +

           (Highest(High, 20) / 10);

      LL = (Lowest(Low, 1) * SJ / 10) +

           (Lowest(Low, 2) / 10) +

           (Lowest(Low, 2) / 10) +

           (Lowest(Low, 4) / 10) +

           (Lowest(Low, 4) / 10) +

           (Lowest(Low, 8) / 10) +

           (Lowest(Low, 8) / 10) +

           (Lowest(Low, 13) / 10) +

           (Lowest(Low, 40) / 10) +

           (Lowest(Low, 20) / 10);

      // 计算确认高点和低点

      H1 = IIF(HH < Ref(HH, 1) && LL < Ref(LL, 1) &&

              Ref(Open, 1) > Close && Open > Close &&

              (HighestOpen - Close) > 0, Ref(HH, 2), 0);

      L1 = IIF(LL > Ref(LL, 1) && HH > Ref(HH, 1) &&

              Ref(Open, 1) < Close && Open < Close &&

              (Close - LowestOpen) > 0, Ref(LL, 2), 0);

      // 计算信号

      X0 = H1;

      X00 = L1;

      // 计算有效高点和低点

      // 使用条件判断查找最近一次X0>0的值

      If (X0 > 0)

      {

          H2 = X0;

      }

      Else

      {

          H2 = H2[1];

      }

      // 使用条件判断查找最近一次X00>0的值

      If (X00 > 0)

      {

          L2 = X00;

      }

      Else

      {

          L2 = L2[1];

      }

      // 计算多空状态

      K1 = IIF(Close[1] > H2, -3, IIF(Close[1] < L2, 1, 0));

       // 计算K2

      If (K1 != 0)

      {

          K2 = K1;

      }

      Else

      {

          K2 = K2[1];

      }

      G = IIF(K2 == 1, H2, L2);

      TMP = K2;

      IF(TMP>0)

       {          

        PlotNumeric("G",G,G,DarkGreen);

           }      

       IF(TMP<0)

       {          

       PlotNumeric("G",G,G,DarkRed);

           }

      // 检测交易条件 - 使用CrossOver和CrossUnder函数

      BuyCondition = CrossUnder(TMP, 0) && Vol > 0;//开多信号

      SellCondition = CrossOver(TMP, 0) && Vol > 0;//开空信号

      // 检测收盘清仓信号 - 增加00:59清仓时间

      If (EnableClosePosition)

      {

          // 日盘收盘时间14:59

          If (Time >= DayCloseTime/10000 && Time < (DayCloseTime/10000 + 0.0001))

          {

              ClosePositionSignal = True;

          }

          // 夜盘收盘时间22:59

          Else

          If (Time >= NightCloseTime1/10000 && Time < (NightCloseTime1/10000 + 0.0001))

          {

              ClosePositionSignal = True;

          }

          // 夜盘收盘时间02:29

          Else

          If (Time >= NightCloseTime2/10000 && Time < (NightCloseTime2/10000 + 0.0001))

          {

              ClosePositionSignal = True;

          }

          // 夜盘收盘时间00:59 - 新增时间点

          Else

          If (Time >= NightCloseTime3/10000 && Time < (NightCloseTime3/10000 + 0.0001))

          {

              ClosePositionSignal = True;

          }

          // 处理跨天情况:02:29在第二天凌晨

          Else

          If (NightCloseTime2 < 1000 && Time >= (240000 + NightCloseTime2)/10000)

          {

              ClosePositionSignal = True;

          }

          // 处理跨天情况:00:59在第二天凌晨 - 新增

          Else

          If (NightCloseTime3 < 1000 && Time >= (240000 + NightCloseTime3)/10000)

          {

              ClosePositionSignal = True;

          }

          Else

          {

              ClosePositionSignal = False;

          }

      }

// ========== 关键修改:当根K线收盘时判断信号 ==========

      If (BarStatus == 1)//值0第一个Bar,1中间的普通Bar,2最后一个Bar

      {

          // 检测交易信号

          If (BuyCondition && !BuyConditionPrev && Vol > 0)

          {

              NextBarBuySignal = True;

              NextBarSellSignal = False;

              SignalGenerated = True;

              LastSignalBar = CurrentBar;

              CurrentBuySignal = True;

          }

          Else

          If (SellCondition && !SellConditionPrev && Vol > 0)

          {

              NextBarSellSignal = True;

              NextBarBuySignal = False;

              SignalGenerated = True;

              LastSignalBar = CurrentBar;

              CurrentSellSignal = True;

          }

       }

       Else

       {

          // 如果不是新信号,保持原有状态

          SignalGenerated = False;

          // 只在K线收盘时重置信号,避免信号丢失

          If (BarStatus == 1)//值0第一个Bar,1中间的普通Bar,2最后一个Bar

          {

              BuySignal = False;

              SellSignal = False;

              SignalGenerated = False;

          }

      }

      // 系统交易逻辑 - 连续反转模式  下一根K线开盘时执行委托

         If (BarStatus == 1&& MyCanTrade && Vol > 0 && !TradeExecutedThisBar)

      {

          MyCanTrade = True;

          TradeExecuted = False;

          // 收盘清仓信号

         If (ClosePositionSignal && MarketPosition != 0  && !TradeExecutedThisBar)

          {

              If (MarketPosition == 1)

                  Sell(TradeVolume, Open);

              Else

                  BuyToCover(TradeVolume, Open);

              MyCanTrade = False;

              TradeExecuted = True;

              TradeExecutedThisBar = True; // 标记本K线已执行交易

              NextBarCloseSignal = False;

          }

           // 做多信号处理 - 确保只执行一次

         If (MarketPosition<=0 And NextBarBuySignal And !TradeExecutedThisBar)

          {

              // 开立多头仓位

              Buy(TradeVolume, Close);

              MyEntryPrice = Close;

              MyCanTrade = False;

              MyBarsSinceEntry = 0;

              TradeExecuted = True;

              NextBarBuySignal = False;

              TradeExecutedThisBar = True; // 标记本K线已执行交易

              // 重置信号

              SellSignal = False;

              SignalGenerated = False;  

              }

               // 做空信号处理 - 确保只执行一次

          If (MarketPosition >= 0 And NextBarSellSignal And !TradeExecutedThisBar)

          {

             

              // 开立空头仓位

              SellShort(TradeVolume, G);

              MyEntryPrice = Close;

              MyCanTrade = False;

              MyBarsSinceEntry = 0;

              TradeExecuted = True;

              NextBarSellSignal = False;

              TradeExecutedThisBar = True; // 标记本K线已执行交易

              // 重置信号

              SellSignal = False;

              SignalGenerated = False;  

                }

        }

   // 记录仓位状态

      MP = MarketPosition;

  }

//测试:Commentary("SJ="+text(SJ));

//测试:PlotBool("OPEN > 0",ClosePositionSignal, High);  

测试过没发现

谢谢老师编译 你前面说的改成Close[1] 后闪烁也没有了 感谢


这个代码编写后K线图没有了图片里面多空开仓标记和连线  老师在那个地方调出来 我前面一个策略K线图有标记连线 如图

这个策略编的是多空反转 收盘清仓 下一时段开盘后没有仓位, 这个策略只能在下一时段开盘多空出现信号相反时才会开仓 而是同一方向不会继续开仓,这样有时候会失去开盘后同方向的机会,我想把开盘后按照最新信号继续开仓,比如原来收盘前是多头继续开多,实空继续开空。试了机构编译逻辑代码,都还是和原来的多空策略一样开仓,怎么编把下一时段开盘继续开仓加进去呢?

没理解,你把需求写清楚重新发贴吧

就是这个策略是收盘清仓  在期货下一个时段是没有仓位的 开盘后按照盘中新的信号重新开仓