策略为什么没信号?解决方案

原贴:策略为什么没信号?https://bbs.tbquant.net/thread/20251120172537747181

交易策略:开仓条件是:取每天上午9:00开盘后五分钟的高点和低点,向上突破高点做,每天只做一单(第一次突破),多单平仓条件是:持仓时间(变量1)1分钟,如果低于买入价则平仓,如果持仓时间超过1分钟且价格高于买入价,则(变量2)30分钟平仓。用在1分钟的K线上交易

重新写了代码,多空开仓,一天只开一次仓。回测有信号,是否可行?


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


// 简称: FiveMinBreakout_V2


// 名称: 5分钟突破交易策略V2版本


// 类别: 日内突破策略


// 类型: 用户应用


// 输出: Void


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




Params


  Numeric BreakoutMinutes(5);      // 突破区间分钟数


  Numeric HoldTimeLong(30);        // 长期持仓时间(K线数)


  Numeric CloseTime(0.145500);     // 收盘平仓时间


  Numeric Lots(1);                 // 交易手数


 


Vars


  // 交易日管理变量


  Series<Integer> CurrentDay(0);   // 当前交易日


  Series<Bool> NewDayFlag(False);  // 新交易日标志


 


  // 突破区间变量


  Series<Numeric> MorningHigh(0);  // 上午突破区间高点


  Series<Numeric> MorningLow(0);   // 上午突破区间低点


  Series<Bool> RangeDefined(False); // 区间已定义标志


  Series<Bool> TradeDone(False);   // 当日已交易标志


  Series<Integer> MorningBarsCount(0); // 上午K线计数


  Series<Integer> TradeDirection(0); // 交易方向: 0-无, 1-多头, -1-空头


 


  // 交易管理变量


  Series<Numeric> EntryPrice(0);   // 入场价格


  Series<Integer> EntryBarIndex(0); // 入场Bar索引


  Series<Integer> BarsSinceEntry(0); // 入场后经过的K线数


  Series<Bool> PositionActive(False); // 仓位活跃标志


  Numeric i;                       // 循环变量




Events


  OnBar(ArrayRef<Integer> indexs)


  {


      // ====== 1. 交易日管理 ======


      if (Date != CurrentDay) {


          // 新交易日重置所有标志


          CurrentDay = Date;


          NewDayFlag = True;


          RangeDefined = False;


          TradeDone = False;


          PositionActive = False;


          MorningHigh = 0;


          MorningLow = 0;


          MorningBarsCount = 0;


          BarsSinceEntry = 0;


          TradeDirection = 0;


          Commentary("新交易日开始: " + Text(Date));


      } else {


          NewDayFlag = False;


      }


     


      // ====== 2. 定义突破区间 ======


      // 重置上午K线计数


      if (Time < 0.090000) {


          MorningBarsCount = 0;


      }


     


      // 在9:00到9:00+BreakoutMinutes期间计算突破区间


      Numeric BreakoutEndTime = 0.090000 + (BreakoutMinutes / 10000.0);


      if (Time >= 0.090000 && Time <= BreakoutEndTime && !RangeDefined) {


          MorningBarsCount = MorningBarsCount + 1;


         


          // 更新高低点


          if (MorningBarsCount == 1) {


              // 第一根K线,初始化高低点


              MorningHigh = High;


              MorningLow = Low;


          } else {


              // 后续K线,更新高低点


              if (High > MorningHigh) MorningHigh = High;


              if (Low < MorningLow) MorningLow = Low;


          }


          Commentary("第" + Text(MorningBarsCount) + "根K线 - 高点:" + Text(MorningHigh) + " 低点:" + Text(MorningLow));


         


          // 如果是最后一根K线,标记区间已定义


          if (Time >= BreakoutEndTime || MorningBarsCount >= BreakoutMinutes) {


              RangeDefined = True;


              Commentary(Text(BreakoutMinutes) + "分钟区间定义完成 - 最终高点:" + Text(MorningHigh) + " 低点:" + Text(MorningLow));


          }


      }


     


      // 突破区间结束后如果还没有定义区间,则标记为定义


      if (Time > BreakoutEndTime && !RangeDefined && MorningHigh > 0) {


          RangeDefined = True;


          Commentary("区间定义完成(超时) - 高点:" + Text(MorningHigh) + " 低点:" + Text(MorningLow));


      }


     


      // ====== 3. 交易信号生成 ======


      if (Time > BreakoutEndTime && RangeDefined && !TradeDone && !PositionActive) {


          // 向上突破做多信号 - 只有当没有交易方向或当前是向上突破时


          if (High > MorningHigh && Vol > 0 && TradeDirection >= 0) {


              // 开多仓


              Buy(Lots, Open);


              EntryPrice = Open;


              EntryBarIndex = CurrentBar;


              BarsSinceEntry = 0;


              TradeDone = True;


              PositionActive = True;


              TradeDirection = 1; // 标记为多头方向


              Commentary("向上突破开多仓! 价格:" + Text(EntryPrice) +


                        " 突破高点:" + Text(MorningHigh));


          }


          // 向下突破做空信号 - 只有当没有交易方向或当前是向下突破时


          else if (Low < MorningLow && Vol > 0 && TradeDirection <= 0) {


              // 开空仓


              SellShort(Lots, Open);


              EntryPrice = Open;


              EntryBarIndex = CurrentBar;


              BarsSinceEntry = 0;


              TradeDone = True;


              PositionActive = True;


              TradeDirection = -1; // 标记为空头方向


              Commentary("向下突破开空仓! 价格:" + Text(EntryPrice) +


                        " 突破低点:" + Text(MorningLow));


          }


      }


     


      // ====== 4. 更新持仓K线计数 ======


      if (PositionActive) {


          BarsSinceEntry = CurrentBar - EntryBarIndex;


      }


     


      // ====== 5. 多头仓位管理 ======


      if (MarketPosition == 1 && PositionActive) {


          // 条件1: 持仓K线数≥HoldTimeLong,平仓


          if (BarsSinceEntry >= HoldTimeLong) {


              Sell(0, Close); // 使用收盘价平仓


              PositionActive = False;


              Commentary("多单长期持仓平仓! 持仓K线数:" + Text(BarsSinceEntry));


          }


      }


     


      // ====== 6. 空头仓位管理 ======


      if (MarketPosition == -1 && PositionActive) {


          // 条件1: 持仓K线数≥HoldTimeLong,平仓


          if (BarsSinceEntry >= HoldTimeLong) {


              BuyToCover(0, Close); // 使用收盘价平仓


              PositionActive = False;


              Commentary("空单长期持仓平仓! 持仓K线数:" + Text(BarsSinceEntry));


          }


      }


     


      // ====== 7. 收盘前平仓 ======


      if (Time >= CloseTime && MarketPosition != 0) {


          if (MarketPosition == 1) {


              Sell(0, Open);


              Commentary("收盘前平多仓");


          } else if (MarketPosition == -1) {


              BuyToCover(0, Open);


              Commentary("收盘前平空仓");


          }


          PositionActive = False;


          TradeDone = True;


      }


     


      // ====== 8. 绘图和监控 ======


      if (RangeDefined) {


          // 绘制突破区间


          PlotNumeric("MorningHigh", MorningHigh);


          PlotNumeric("MorningLow", MorningLow);


      }


     


      if (PositionActive) {


          // 绘制入场价格线


          PlotNumeric("EntryPrice", EntryPrice);


          PlotNumeric("BarsHeld", BarsSinceEntry);


         


          if (MarketPosition == 1) {


              Commentary("多单持仓中 - 入场价:" + Text(EntryPrice) +


                        " 当前价:" + Text(Close) +


                        " 持仓K线数:" + Text(BarsSinceEntry));


          } else if (MarketPosition == -1) {


              Commentary("空单持仓中 - 入场价:" + Text(EntryPrice) +


                        " 当前价:" + Text(Close) +


                        " 持仓K线数:" + Text(BarsSinceEntry));


          }


      }


  }

if888,策略没信号,为什么呢?
策略为什么没信号?
奇怪的问题 策略单元有信号,而K线没显示出信号标识
OnBarOpen为什么该卖的时候没卖,该买的时候没买
请教个问题:k线图上有信号,但策略研究回测没成交,是什么原因
程序没发出交易信号,却被监控器同步成交了,而且是多次,这是为什么什么呢?怎么解决这个问题呢?
为什么头寸管理中连接显示没连接
止盈没信号
【求助大神】为什么这段没执行
图表有信号但是系统没评测