以下代码为什么后续同样的开仓平仓条件与之前的回测结果不一致 多数据源跨周期的指标计算哪里有学习资料?

以下代码的逻辑是否正确 为什么后续同样的开仓平仓条件与之前的回测结果不一致 多数据源跨周期的指标计算应参考什么?哪里有学习资料  

原文:

OnBar(ArrayRef<Integer> indexs)

   {

       Range[bigLayer1:bigLayer2]

       {

           ma1 = AverageFC(Close, Len1);

           ma2 = AverageFC(Close, Len2);

           PlotNumeric("ma1", ma1);

           PlotNumeric("ma2", ma2);  


           Commentary("[ma1]" + Text(ma1));

           Commentary("[ma2]" + Text(ma2));


           if(CurrentBar >= MaxBarsBack) barsOk = True;

           Commentary("====================");

           Commentary("[CurrentBar]" + Text(CurrentBar));

           Commentary("[MaxBarsBack] " + Text(MaxBarsBack));

           // <--- 修正5: 修正 Commentary 函数的错误

           Commentary("[barsOK]" + IIfString(barsOk, "K线根数OK", "K线不足"));

       }


       // 获取大周期数据源的均线值

       ma1_b1 = Data[bigLayer1].ma1;

       ma2_b1 = Data[bigLayer1].ma2;

       ma1_b2 = Data[bigLayer2].ma1;

       ma2_b2 = Data[bigLayer2].ma2;


       PlotNumeric("ma1_b1", ma1_b1);

       PlotNumeric("ma2_b1", ma2_b1);

       PlotNumeric("ma1_b2", ma1_b2);

       PlotNumeric("ma2_b2", ma2_b2);


       Commentary("====================");

       Commentary("[ma1_b1]" + Text(ma1_b1));

       Commentary("[ma2_b1]" + Text(ma2_b1));

       Commentary("[ma1_b2]" + Text(ma1_b2));

       Commentary("[ma2_b2]" + Text(ma2_b2));


       barsOk_b1 = Data[bigLayer1].barsOk;

       barsOk_b2 = Data[bigLayer2].barsOk;

       Commentary("====================");



扩展仿写代码:

   OnBar(ArrayRef<Integer> indexs)

   {

       Range[bigLayer1:bigLayer2]          //对从bigLayer1到bigLayer2的每个数据源执行内部语句。

       {

           ma1 = AverageFC(Close, Len1);

           ma2 = AverageFC(Close, Len2);

           PlotNumeric("ma1", ma1);

           PlotNumeric("ma2", ma2);  

           //输出调试信息

           Commentary("[ma1]" + Text(ma1));

           Commentary("[ma2]" + Text(ma2));

           

           // MACD

           macd_diff = XAverage(Close, MacdFast) - XAverage(Close, MacdSlow);

           macd_dea = XAverage(macd_diff, MacdSignal);

           macd_bar = 2 * (macd_diff - macd_dea);

           //PlotNumeric("MACD_DIFF_1min", macd_diff);

           //PlotNumeric("MACD_DEA_1min", macd_dea);

           //PlotAuto("MACD_BAR_1min", macd_bar, 0, IIf(macd_bar >= 0, Color9(), Color10()), Enum_Bar);


           // 布林带

           boll_mid = AverageFC(Close, BollingerLength);

           boll_upper = boll_mid + BollingerWidth * StandardDev(Close, BollingerLength);

           boll_lower = boll_mid - BollingerWidth * StandardDev(Close, BollingerLength);

           PlotNumeric("BOLL_MID_1min", boll_mid);

           PlotNumeric("BOLL_UP_1min", boll_upper);

           PlotNumeric("BOLL_LOW_1min", boll_lower);


           // ATR

           if(CurrentBar == 0)

               atr = (High - Low);

           else

           {

               tr = Max(High - Low, Max(Abs(High - Close[1]), Abs(Low - Close[1])));

               atr = (atr[1] * (AtrLength - 1) + tr) / AtrLength;

           }

           //PlotNumeric("ATR_1min", atr);


           // CJL(成交量)

           cjl = Vol;

           PlotNumeric("CJL_1min", cjl);

           //判断当前数据源的K线数量是否足够,并输出调试信息,以便开发者监控指标计算的有效性。

           if(CurrentBar >= MaxBarsBack) barsOk = True;

           Commentary("====================");

           Commentary("[CurrentBar]" + Text(CurrentBar));

           Commentary("[MaxBarsBack] " + Text(MaxBarsBack));

           // <--- 修正5: 修正 Commentary 函数的错误

           Commentary("[barsOK]" + IIfString(barsOk, "K线根数OK", "K线不足"));

       }


           // 获取大周期数据源的均线值

           ma1_b1 = Data[bigLayer1].ma1;

           ma2_b1 = Data[bigLayer1].ma2;

           ma10_b1 = Data[bigLayer1].ma10;


           PlotNumeric("ma1_b1", ma1_b1);

           PlotNumeric("ma2_b1", ma2_b1);

           PlotNumeric("ma1_b2", ma1_b2);

           PlotNumeric("ma2_b2", ma2_b2);


           Commentary("====================");

           Commentary("[ma1_b1]" + Text(ma1_b1));

           Commentary("[ma2_b1]" + Text(ma2_b1));

           Commentary("[ma1_b2]" + Text(ma1_b2));

           Commentary("[ma2_b2]" + Text(ma2_b2));

       

           // 获取大周期数据源的指标值

           // MACD

           macd_diff_b1 = Data[bigLayer1].macd_diff;

           macd_dea_b1 = Data[bigLayer1].macd_dea;

           macd_bar_b1 = Data[bigLayer1].macd_bar;

           //PlotNumeric("MACD_DIFF_30m", macd_diff_b1);

           //PlotNumeric("MACD_DEA_30m", macd_dea_b1);

           //PlotAuto("MACD_BAR_30m", macd_bar_b1, 0, IIf(macd_bar_b1 >= 0, Color9(), Color10()), Enum_Bar);


           // 布林带

           boll_mid_b1 = Data[bigLayer1].boll_mid;

           boll_upper_b1 = Data[bigLayer1].boll_upper;

           boll_lower_b1 = Data[bigLayer1].boll_lower;

           PlotNumeric("BOLL_MID_30m", boll_mid_b1);

           PlotNumeric("BOLL_UP_30m", boll_upper_b1);

           PlotNumeric("BOLL_LOW_30m", boll_lower_b1);


               // ATR

               if(Data[i].CurrentBar == 0)

                   atr_b1 = (Data[i].High - Data[i].Low);

               else

               {

                   Numeric tr_b1 = Max(Data[i].High - Data[i].Low, Max(Abs(Data[i].High - Data[i].Close[1]), Abs(Data[i].Low - Data[i].Close[1])));

                   atr_b1 = (atr_b1[1] * (AtrLength - 1) + tr_b1) / AtrLength;

               }

               //PlotNumeric("ATR_30m", atr_b1);


               // CJL

               cjl_b1 = Data[i].Vol;

               //PlotNumeric("CJL_30m", cjl_b1);


               // K线数量校验

               if(Data[i].CurrentBar >= MaxBarsBack) barsOk = True;

           

           // ===== 5分钟周期 (i == bigLayer2) =====


           

               // 均线

               ma1_b2 = Data[bigLayer2].ma1;

               ma2_b2 = Data[bigLayer2].ma2;

               ma10_b2 = Data[bigLayer2].ma10;

               PlotNumeric("MA5_5m", ma1_b2);

               PlotNumeric("MA10_5m", ma10_b2);

               PlotNumeric("MA20_5m", ma2_b2);


               // MACD

               macd_diff_b2 = Data[bigLayer2].macd_diff;

               macd_dea_b2 = Data[bigLayer2].macd_dea;

               macd_bar_b2 = Data[bigLayer2].macd_bar;

               //PlotNumeric("MACD_DIFF_5m", macd_diff_b2);

               //PlotNumeric("MACD_DEA_5m", macd_dea_b2);

               //PlotAuto("MACD_BAR_5m", macd_bar_b2, 0, IIf(macd_bar_b2 >= 0, Color9(), Color10()), Enum_Bar);


               // 布林带

               boll_mid_b2 = Data[bigLayer2].boll_mid;

               boll_upper_b2 = Data[bigLayer2].boll_upper;

               boll_lower_b2 = Data[bigLayer2].boll_lower;

               PlotNumeric("BOLL_MID_5m", boll_mid_b2);

               PlotNumeric("BOLL_UP_5m", boll_upper_b2);

               PlotNumeric("BOLL_LOW_5m", boll_lower_b2);


               // ATR

               if(Data[i].CurrentBar == 0)

                   atr_b2 = (Data[i].High - Data[i].Low);

               else

               {

                   Numeric tr_b2 = Max(Data[i].High - Data[i].Low, Max(Abs(Data[i].High - Data[i].Close[1]), Abs(Data[i].Low - Data[i].Close[1])));

                   atr_b2 = (atr_b2[1] * (AtrLength - 1) + tr_b2) / AtrLength;

               }

               //PlotNumeric("ATR_5m", atr_b2);


               // CJL

               cjl_b2 = Data[bigLayer2].Vol;

               //PlotNumeric("CJL_5m", cjl_b2);


               // K线数量校验

               if(Data[i].CurrentBar >= MaxBarsBack) barsOk = True;

           



跨周期多数据源指标计算代码编写问题
跨周期条件调用时,开平仓时间的偏移问题
求学习资料的文章《除权换月的代码实现》
跨周期指标数据计算
跨周期策略的指标数据延迟问题
回测与实盘开仓价不一致
为什么同样的策略代码图表信号不一致
新版这也变化太大了吧,请问有学习资料吗?
由信号闪烁产生的交易,后续满足平仓条件时,可以平仓吗
回测中建仓手数与公式中计算的开仓手数不一致

https://video.tbquant.net/video?id=video431