以下代码为什么回测3年一次成交都没有 什么原因 ?

以下代码为什么回测3年一次成交都没有 什么原因  

还有虽然可以通过语法 但返回包含序列函数 可能存在逻辑错误 又是哪里的问题 是否影响正常运行  

代码如何才能正常运行呢?

Params

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

   Numeric Len1(5);                                 // 短均线周期数(MA5)

   Numeric Len2(20);                                // 中均线周期数(MA20)

   Numeric Len3(60);                               // 长均线周期数(MA60)

   Numeric Len4(10);                                // MA10周期数(保留参数兼容)

   String BigTimeFrame1("30m");                     // 大周期1

   String BigTimeFrame2("5m");                      // 大周期2


   Numeric MacdFastLen(12);                         // MACD快线周期

   Numeric MacdSlowLen(26);                         // MACD慢线周期

   Numeric MacdSignalLen(9);                        // MACD信号线周期



Vars

   Global Integer bigLayer1;

   Global Integer bigLayer2;

   Integer lastBar_5min;          // 记录上一次5分钟周期的CurrentBar值(用于开仓过滤,可选)

   

   // 当前周期(1分钟)指标

   Series<Numeric> ma1_1min;

   Series<Numeric> ma10_1min;

   Series<Numeric> ma20_1min;

   Series<Numeric> ma60_1min;


   Series<Numeric> stdDev_1min;

   Series<Numeric> macdDif_1min;

   Series<Numeric> macdDea_1min;

   Series<Numeric> macdValue_1min;



   // 大周期1(30分钟)指标

   Series<Numeric> ma1_30min;

   Series<Numeric> ma10_30min;

   Series<Numeric> ma20_30min;

   Series<Numeric> ma60_30min;


   Series<Numeric> macdDif_30min;

   Series<Numeric> macdDea_30min;

   Series<Numeric> macdValue_30min;



   // 大周期2(5分钟)指标

   Series<Numeric> ma1_5min;

   Series<Numeric> ma10_5min;

   Series<Numeric> ma20_5min;

   Series<Numeric> ma60_5min;

   Series<Numeric> macdDif_5min;

   Series<Numeric> macdDea_5min;

   Series<Numeric> macdValue_5min;


   // K线数量校验标志

   Bool barsOk_1min;

   Bool barsOk_30min;

   Bool barsOk_5min;

   

   Integer i;


Events

   OnInit()

   {

       bigLayer1 = SubscribeBar(Data0.Symbol, BigTimeFrame1, 0, 0, Data0.DataFlag);

       bigLayer2 = SubscribeBar(Data0.Symbol, BigTimeFrame2, 0, 0, Data0.DataFlag);

       lastBar_5min = -1;

   }


   OnBar(ArrayRef<Integer> indexs)

   {

       // ==================== 1. 验证K线数量 ====================

       barsOk_1min  = (Data0.CurrentBar >= 60);

       barsOk_30min = (Data[bigLayer1].CurrentBar >= 60);

       barsOk_5min  = (Data[bigLayer2].CurrentBar >= 60);

       if (!barsOk_1min || !barsOk_30min || !barsOk_5min)

       {

           Commentary("K线数量不足60根,跳过");

           return;

       }


       // ==================== 2. 计算1分钟指标 ====================

       ma1_1min   = AverageFC(Close, Len1);

       ma10_1min  = AverageFC(Close, Len4);

       ma20_1min  = AverageFC(Close, Len2);

       ma60_1min = AverageFC(Close, Len3);


       macdDif_1min   = XAverage(Close, MacdFastLen) - XAverage(Close, MacdSlowLen);

       macdDea_1min   = XAverage(macdDif_1min, MacdSignalLen);

       macdValue_1min = macdDif_1min - macdDea_1min;


       

       PlotNumeric("MA5_1min", ma1_1min);

       PlotNumeric("MA10_1min", ma10_1min);

       PlotNumeric("MA20_1min", ma20_1min);

       PlotNumeric("MA60_1min", ma60_1min);


       PlotNumeric("MACD_DIF_1min", macdDif_1min);

       PlotNumeric("MACD_DEA_1min", macdDea_1min);

       PlotNumeric("MACD_VAL_1min", macdValue_1min);


       // ==================== 3. 计算大周期指标 ====================

       for i = bigLayer1 To bigLayer2

       {

           if(i == bigLayer1)

           {

               ma1_30min   = AverageFC(Data[i].Close, Len1);

               ma10_30min  = AverageFC(Data[i].Close, Len4);

               ma20_30min  = AverageFC(Data[i].Close, Len2);

               ma60_30min = AverageFC(Data[i].Close, Len3);


               macdDif_30min   = XAverage(Data[i].Close, MacdFastLen) - XAverage(Data[i].Close, MacdSlowLen);

               macdDea_30min   = XAverage(macdDif_30min, MacdSignalLen);

               macdValue_30min = macdDif_30min - macdDea_30min;

               

               PlotNumeric("MA5_30m", ma1_30min);

               PlotNumeric("MA10_30m", ma10_30min);

               PlotNumeric("MA20_30m", ma20_30min);

               PlotNumeric("MA60_30m", ma60_30min);


               PlotNumeric("MACD_DIF_30m", macdDif_30min);

               PlotNumeric("MACD_DEA_30m", macdDea_30min);

               PlotNumeric("MACD_VAL_30m", macdValue_30min);

           }

           else if(i == bigLayer2)

           {

               ma1_5min   = AverageFC(Data[i].Close, Len1);

               ma10_5min  = AverageFC(Data[i].Close, Len4);

               ma20_5min  = AverageFC(Data[i].Close, Len2);

               ma60_5min = AverageFC(Data[i].Close, Len3);


               macdDif_5min   = XAverage(Data[i].Close, MacdFastLen) - XAverage(Data[i].Close, MacdSlowLen);

               macdDea_5min   = XAverage(macdDif_5min, MacdSignalLen);

               macdValue_5min = macdDif_5min - macdDea_5min;

               

               PlotNumeric("MA5_5m", ma1_5min);

               PlotNumeric("MA10_5m", ma10_5min);

               PlotNumeric("MA20_5m", ma20_5min);

               PlotNumeric("MA60_5m", ma60_5min);


               PlotNumeric("MACD_DIF_5m", macdDif_5min);

               PlotNumeric("MACD_DEA_5m", macdDea_5min);

               PlotNumeric("MACD_VAL_5m", macdValue_5min);

           }

       }


       // ==================== 4. 平仓逻辑(基于1分钟MACD交叉) ====================

       // 多单平仓:1分钟MACD死叉

       if(MarketPosition == 1 And CrossUnder(macdDif_1min, macdDea_1min))

       {

           Sell(0, Open);

       }

       // 空单平仓:1分钟MACD金叉

       if(MarketPosition == -1 And CrossOver(macdDif_1min, macdDea_1min))

       {

           BuyToCover(0, Open);

       }


       // ==================== 5. 开仓逻辑(多周期MACD状态过滤) ====================

       // 判断大周期MACD状态(金叉:DIF > DEA;死叉:DIF < DEA)

       Bool bullCondition30 = (macdDif_30min > macdDea_30min);

       Bool bearCondition30 = (macdDif_30min < macdDea_30min);

       Bool bullCondition5  = (macdDif_5min > macdDea_5min);

       Bool bearCondition5  = (macdDif_5min < macdDea_5min);

       

       // 多单开仓:30分钟金叉状态 && 5分钟金叉状态 && 1分钟金叉//去掉大周期条件后仍无一信号触发 应该是前方代码阻塞了信号生成


       if(MarketPosition != 1

          And bullCondition30 And bullCondition5

          And CrossOver(macdDif_1min, macdDea_1min))

       {

           Buy(Lots, Open);

       }

       

       // 空单开仓:30分钟死叉状态 && 5分钟死叉状态 && 1分钟死叉

       if(MarketPosition != -1

           And bearCondition30 And bearCondition5

           And CrossUnder(macdDif_1min, macdDea_1min))

       {

           SellShort(Lots, Open);

       }

   }

请教个问题:k线图上有信号,但策略研究回测没成交,是什么原因
万次发单成交一次
一个委托有多笔成交信息,为什么OnFIll只有一次成交驱动信息
以下代码是否是无效的?
成交更新事件域里面的代码不被执行,请问是什么原因
tb模拟回测是指令价成交还是下跟k线成交
为什么交易组件里盘口下单、批量下单、触发下单等都没有了?
以下代码中的open是过去的价格吧?实盘中没法以该价格成交吧?
A_sendOrderEx为什么不成交?
实际收益与回测数据存在很大出入。可能时什么原因?

这里发现了一个序列类型的使用错误。

crossover和crossunder是序列对象,不可以放在and和or后面。

具体看一下零基础课程里的说明

可以把序列对象放在用and或者or连接的bool表达式的第一项

但是这个不一定是你三年不出信号的原因

你先改了看看吧


哪个ai写的

deep seek 要矫正AI逻辑吗?😂



原则上我们不处理ai写得东西