为什么开仓没信号,跨周期,谢谢老师

老师好,为什么这个开仓没信号,麻烦老师看一下哈,谢谢!

Params

   // 日线双均线参数(实际对应data2日线)

   Numeric FastLength(5);          // 日线短期均线

   Numeric SlowLength(20);         // 日线长期均线

   // 周线MACD参数(实际对应data1周线)

   Numeric MACDFast(12);           // MACD短期

   Numeric MACDSlow(26);           // MACD长期

   Numeric MACDPeriod(9);          // MACD平滑周期

   // ATR止损参数

   Numeric ATRPeriod(14);          // ATR周期

   Numeric ATRMultiplier(2);       // ATR止损倍数

   Numeric lots(1);                // 开仓手数


Vars

   // 日线双均线变量(data2)

   Series<Numeric> AvgValue1;      // 日线短期均线

   Series<Numeric> AvgValue2;      // 日线长期均线

   // 周线MACD变量(data1)

   Series<Numeric> MACDDiff;       // MACD差离值

   Series<Numeric> MACDDEA;        // MACD信号线

   Series<Numeric> MACDVal;        // MACD柱状线

   // 状态变量(归属data1:周线MACD)

   Bool isWeekMACDGolden(False);   // 周线MACD金叉状态

   Bool isWeekMACDDead(False);     // 周线MACD死叉状态

   // ATR止损变量

   Series<Numeric> ATRValue;       // ATR值(Range内用,无图层)

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

   // 盈亏记录变量

   Series<Numeric> myentryprice;   // 开仓价格

   Series<Numeric> myexitprice;    // 平仓价格

   Numeric profit;                 // 平仓点差利润

   Numeric pricediff;              // 单价差


Events

   OnReady()

   {

       // 设置最大回溯K线数(兼容双均线+交叉回溯需求)

       SetBackBarMaxCount(1+Max(FastLength,SlowLength));

   }


   // 初始化:调整订阅周期→图层对应关系(data1=周线,data2=日线)

   OnInit()

   {

     SubscribeBar(symbol,"1w", 20200101);  // 周线 → data1图层(核心调整)

     SubscribeBar(symbol,"1d", 20200101);  // 日线 → data2图层(核心调整)

   }


   // K线更新:先算周线(data1)MACD,再算日线(data2)双均线

   OnBar(ArrayRef<Integer> indexs)

   {

       // ========== 1. 周线(data1):MACD计算(先执行) ==========

       Range[1:1]  // 原Range[0:0],对应调整为data1周线

       {

           MACDDiff = XAverage(Close, MACDFast) - XAverage(Close, MACDSlow);

           MACDDEA = XAverage(MACDDiff, MACDPeriod);

           MACDVal = 2 * (MACDDiff - MACDDEA);


           // 更新周线MACD金叉/死叉状态

           If (MACDDiff[2] < MACDDEA[2] && MACDDiff[1] > MACDDEA[1]) {

            data1.PlotBool("MACD周线金叉",true,low-2);  // 原data0→data1

               data1.isWeekMACDGolden = True;   // 周线MACD金叉(原data0→data1)

/*                data1.isWeekMACDDead = False;*/

           }

           If (MACDDiff[2] > MACDDEA[2] && MACDDiff[1] < MACDDEA[1]) {

            data1.PlotBool("MACD周线死叉",false,high+2);  // 原data0→data1

               data1.isWeekMACDDead = True;     // 周线MACD死叉(原data0→data1)

/*                data1.isWeekMACDGolden = False;*/

           }

       }


       // ========== 2. 日线(data2):双均线计算(后执行) ==========

       Range[2:2]  // 原Range[1:1],对应调整为data2日线

       {

           AvgValue1 = AverageFC(Close,FastLength);

           AvgValue2 = AverageFC(Close,SlowLength);

           PlotNumeric("MA1",AvgValue1);  // 日线短期均线

           PlotNumeric("MA2",AvgValue2);  // 日线长期均线


           ATRValue = Average(TrueRange, ATRPeriod);

           Data2.Commentary("ATR计算:ATRValue[1](周期" + Text(ATRPeriod) + ")= Average(TrueRange, " + Text(ATRPeriod) + ") = " + Text(ATRValue[1]));  // 原data1→data2

       }


       // ========== 3. 交易信号(开仓在data2日线,逻辑不变) ==========

       // ---- 多单开仓:周线MACD金叉 + 日线双均线金叉 ----

       If (data2.MarketPosition <>1 && data1.isWeekMACDGolden  // 原data1.MarketPosition→data2,原data0.isWeekMACDGolden→data1

           && data2.AvgValue1[2] < data2.AvgValue2[2] && data2.AvgValue1[1] > data2.AvgValue2[1])  // 原data1→data2

       {  

           data2.PlotBool("均线日线金叉",true,low-2);

           Buy(lots,data2.Open);  // 日线开仓(原data1→data2)

           data2.myentryprice = data2.Open;  // 原data1→data2

           data2.StopLossPrice = data2.Open - ATRValue[1] * ATRMultiplier;  // 原data1→data2

           Data2.Commentary("多头开仓原因: MarketPosition(" + Text(data2.MarketPosition) + ") <> 1, 周线MACD金叉(状态:true), 日线双均线金叉(data2.AvgValue1[2](" + Text(data2.AvgValue1[2]) + ") < data2.AvgValue2[2](" + Text(data2.AvgValue2[2]) + ")且data2.AvgValue1[1](" + Text(data2.AvgValue1[1]) + ") > data2.AvgValue2[1](" + Text(data2.AvgValue2[1]) + ")");  // 原data1→data2

           Data2.Commentary("多头开仓价格: myentryprice = Open(" + Text(data2.Open) + ") = " + Text(data2.myentryprice));  // 原data1→data2

       }


       // ---- 空单开仓:周线MACD死叉 + 日线双均线死叉 ----

       If (data2.MarketPosition <>-1 && data1.isWeekMACDDead  // 原data1.MarketPosition→data2,原data0.isWeekMACDDead→data1

           && data2.AvgValue1[2] > data2.AvgValue2[2] && data2.AvgValue1[1] < data2.AvgValue2[1])  // 原data1→data2

       {  

           data2.PlotBool("均线日线死叉",false,high+2);

           SellShort(lots,data2.Open);  // 日线开仓(原data1→data2)

           data2.myentryprice = data2.Open;  // 原data1→data2

           data2.StopLossPrice = data2.Open + ATRValue[1] * ATRMultiplier;  // 原data1→data2

           Data2.Commentary("空头开仓原因: MarketPosition(" + Text(data2.MarketPosition) + ") <> -1, 周线MACD死叉(状态:true), 日线双均线死叉(data2.AvgValue1[2](" + Text(data2.AvgValue1[2]) + ") > data2.AvgValue2[2](" + Text(data2.AvgValue2[2]) + ")且data2.AvgValue1[1](" + Text(data2.AvgValue1[1]) + ") < data2.AvgValue2[1](" + Text(data2.AvgValue2[1]) + ")");  // 原data1→data2

           Data2.Commentary("空头开仓价格: myentryprice = Open(" + Text(data2.Open) + ") = " + Text(data2.myentryprice));  // 原data1→data2

       }

跨周期信号闪烁加开仓延迟
请问老师关于跨周期信号闪烁问题
跨周期失败,老师帮我看看,谢谢
规避跨周期信号闪烁
if888,策略没信号,为什么呢?
策略为什么没信号?
跨周期模型
跨周期策略,大周期在上小周期在下会出现问题吗?
如果避免跨品种同周期的数据对齐问题?
跨周期指标应用方法

有同学给你指出了 oninit 和onready都写反了....

说明基础==0

这么搞是没有意义的

策略的调试会有无数的问题 完全看不懂的情况下问是问不完的

要么你看看置顶帖找代写吧

或者

https://video.tbquant.net/?menu=%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%AD%A6%E9%87%8F%E5%8C%96