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

老师好,为什么这个开仓没信号,麻烦老师看一下哈,谢谢!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 }

有同学给你指出了 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