满足开仓条件但打印显示不满足导致没有交易信号

老师:

   晚上好,听了最近您一个答疑的视频,然后有点思路用AI做了下面代码,但有个问题:就是满足MA_Bull是真的 但是实际跑过程中显示是不满足,导致没有交易信号  麻烦老师看一下 


Params

   Numeric MA_Period(21); // 均线周期

   Numeric ATR_Period(14); // ATR周期

   Numeric StopLossPct(1.5); // 止损百分比

   Numeric TrailMultiplier(2.0); // ATR移动止盈倍数

   Numeric ATR_Filter(1.5); // ATR过滤阈值

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


Vars

   // 多周期图层编号(全局变量)

   Global Numeric i1; // 日线图层

   Global Numeric i2; // 1小时图层

   Global Numeric i3; // 15分钟图层(主显示图层)

   // 多周期均线(通过Range绑定图层)

   Series<Numeric> MA_Daily; // 日线均线(i1图层)

   Series<Numeric> MA_H1;    // 1小时均线(i2图层)

   Series<Numeric> MA_M15;   // 15分钟均线(i3图层)

   Series<Numeric> ATR_Val;  // ATR(i3图层)

   // 其他变量

   Numeric TrailStop;

   Series<Numeric> HighSinceEntry;

   Series<bool> MA_Bull;

   Series<Numeric> myStopPrice;

   Series<Numeric> myentryprice;

   Series<Numeric> myexitprice;

   Numeric profit;

   Numeric pricediff;

   

   Series<bool> cond1(False);

   Series<bool> cond2(False);

   Series<bool> cond3(False);


Events

   OnInit()

   {

       // 订阅三周期数据

       i1 = SubscribeBar(symbol, "D", BeginDateTime);

       i2 = SubscribeBar(symbol, "1h", BeginDateTime);

       i3 = SubscribeBar(symbol, "15m", BeginDateTime);

       

       // 检查图层订阅是否成功

       If(i1 == InvalidNumeric || i2 == InvalidNumeric || i3 == InvalidNumeric)

       {

           Print("图层订阅失败!周期设置错误");

       }

   }


   OnBar(ArrayRef<Integer> indexs)

   {        

       // 数据加载检查(保留你的原始设置)

       If(Data[i1].CurrentBar < MA_Period || Data[i2].CurrentBar < 8*MA_Period || Data[i3].CurrentBar < 32*MA_Period)

       {

           Data[i3].Commentary("数据加载中:日线Bar=" + Text(Data[i1].CurrentBar) + ", 1小时Bar=" + Text(Data[i2].CurrentBar) + ", 15分钟Bar=" + Text(Data[i3].CurrentBar));

           return;

       }


       // Range隔离图层计算(核心:确保指标绑定对应图层)

       Range[i1:i1]

       {

           MA_Daily = AverageFC(Close, MA_Period); // 日线图层计算

       }

       

       Range[i2:i2]

       {

           MA_H1 = AverageFC(Close, MA_Period); // 1小时图层计算

       }

       

       Range[i3:i3]

       {

           MA_M15 = AverageFC(Close, MA_Period);

           ATR_Val = AvgTrueRange(ATR_Period); // 15分钟图层计算

       }


       // 1. 绘图:日线/1小时MA显式绑定对应图层

       Data[i1].PlotNumeric("MA_Daily-日线MA值:", Data[i1].MA_Daily[1]);  // 绑定i1图层

       Data[i1].Commentary("MA_Daily[1]: " + Text(Data[i1].MA_Daily[1]));

       

       Data[i2].PlotNumeric("MA_H1-1小时MA值:", Data[i2].MA_H1[1]);        // 绑定i2图层

       Data[i2].Commentary("MA_H1[1]: " + Text(Data[i2].MA_H1[1]));

       

       Data[i3].PlotNumeric("MA_Daily-日线MA值:", Data[i1].MA_Daily[1]);  // 绑定i1图层

       Data[i3].PlotNumeric("MA_H1-1小时MA值:", Data[i2].MA_H1[1]);        // 绑定i2图层

       Data[i3].PlotNumeric("MA_M15-15分钟MA值", MA_M15[1]);


       // 2. 打印:日线/1小时MA显式绑定对应图层

       Data[i3].Commentary("ATR值[1]: " + Text(ATR_Val[1]));


       // 3. 布尔信号:日线/1小时MA显式绑定对应图层

       MA_Bull = (Data[i1].MA_Daily[1] > Data[i1].MA_Daily[2]) &&  // i1图层前值比较

                 (Data[i2].MA_H1[1] > Data[i2].MA_H1[2]) &&        // i2图层前值比较

                 (MA_M15[1] > MA_M15[2]);                          // 15分钟无需额外绑定

                 

        // 计算MA_Bull的三个条件,并单独存储

cond1 = (Data[i1].MA_Daily[1] > Data[i1].MA_Daily[2]); // 日线MA:前一根 > 前两根

cond2 = (Data[i2].MA_H1[1] > Data[i2].MA_H1[2]);       // 1小时MA:前一根 > 前两根

cond3 = (MA_M15[1] > MA_M15[2]);                       // 15分钟MA:前一根 > 前两根

MA_Bull = cond1 && cond2 && cond3;


// 打印MA_Bull的判断过程(使用IfString函数处理布尔值的文字描述)

Data[i3].Commentary("MA_Bull判断过程:");

// 条件1:用IIFString函数,true返回"满足",false返回"不满足"

Data[i3].Commentary("条件1(日线MA[1] > MA[2]): " + IIFString(cond1, "满足", "不满足") + " 【值:" + Text(Data[i1].MA_Daily[1]) + " > " + Text(Data[i1].MA_Daily[2]) + "】");

// 条件2:同理处理1小时周期条件

Data[i3].Commentary("条件2(1小时MA[1] > MA[2]): " + IIFString(cond2, "满足", "不满足") + " 【值:" + Text(Data[i2].MA_H1[1]) + " > " + Text(Data[i2].MA_H1[2]) + "】");

// 条件3:同理处理15分钟周期条件

Data[i3].Commentary("条件3(15分钟MA[1] > MA[2]): " + IIFString(cond3, "满足", "不满足") + " 【值:" + Text(MA_M15[1]) + " > " + Text(MA_M15[2]) + "】");

// 最终结果:用IfString函数描述MA_Bull的真假

Data[i3].Commentary("最终MA_Bull: " + IIFString(MA_Bull, "真(所有条件满足)", "假(至少一个条件不满足)"));

                 

/*        If(MA_Bull)

           Data[i3].Commentary("MA_Bull为真");

       Else

           Data[i3].Commentary("MA_Bull为假");*/


       // 开仓逻辑(保持不变)

       If(Data[i3].MarketPosition != 1 And MA_Bull And ATR_Val[1] > ATR_Filter)

       {

           Data[i3].Buy(lots, Data[i3].Open);

           myentryprice = Data[i3].Open;

           myStopPrice = myentryprice * (1 - StopLossPct * 0.01);

           HighSinceEntry = Data[i3].High;

           Data[i3].Commentary("开仓:myentryprice=" + Text(myentryprice));

       }


       // 平仓逻辑(保持不变)

       If(Data[i3].MarketPosition == 1 And Data[i3].BarsSinceEntry >= 1)

       {

           If(Data[i3].High > HighSinceEntry)

               HighSinceEntry = Data[i3].High;

           TrailStop = Max(myStopPrice, HighSinceEntry - TrailMultiplier * ATR_Val);

           If(Data[i3].Low <= TrailStop)

           {

               myexitprice = Min(Data[i3].Open, TrailStop);

               pricediff = myexitprice - myentryprice;

               profit = pricediff * abs(Data[i3].CurrentContracts()) * ContractUnit() * BigPointValue();

               Data[i3].Sell(lots, myexitprice);

               Data[i3].Commentary("平仓:profit=" + Text(profit));

           }

       }

   }

if条件明显不满足但仍会被触发
条件满足,打印成功,但为什么没有出现交易信号
if条件不满足,但进入了执行语句
自动交易条件不满足也执行了IF内的程序
if条件不满足,值为什么?
满足条件不开仓是什么问题
实盘平仓,日志打印显示平仓,但账户透视里没有交易记录,且继续持仓。
有没有统计连续满足某个条件个数的函数?
如何写:在X根K线内触发过条件A后,满足条件B开仓
老师版帮忙解答关于大周期产生新的bar后条件不满足产生的信号闪烁如何解决?

看得比较混乱,建议每个变量前加上对应图层