MT5跑EA时,自制指标在不断叠加,求高手解惑

 
自制了一个指标,编程EA测试,跑历史数据时EA在不断叠加,见图1,用模拟盘实时挂载EA时,日志显示自制指标在不断加载移除,见图2,单独在图表中加载指标时没问题,求高手解惑
附加的文件:
l1.png  40 kb
g2.png  37 kb
 
   void OnTick()
{
   double kdjk[];
   double kdjj[];
   data.loading_KDJ(kdjk,kdjj,10,NULL,0,5,3,3,MODE_SMA,STO_LOWHIGH);
   double open[],close[];
   data.loading_双线乖离率(close,open,10,Symbol(),0,8);
}
把指标封装到类里面,上面分别调用了KDJ指标和自定义指标,系统的KDJ指标没问题,但调用自定义指标回测会不断加载指标,下面是指标代码

//+------------------------------------------------------------------+
//|                                                   双线乖离率.mq5 |
//|                                          Copyright 2024, songtq. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, songtq."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot close
#property indicator_label1  "close"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot open
#property indicator_label2  "open"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrAqua
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double         closeBuffer[];
double         openBuffer[];
input int      指标周期=20;             //20日均线
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArraySetAsSeries(closeBuffer,true); 
   ArraySetAsSeries(openBuffer,true); 
   SetIndexBuffer(0,closeBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,openBuffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int Num=0;                               //定义一个计数,用于存放指标运行时要存放的运行次数,如果每次都用rates_total,因为数很大,浪费算力
   if(Num==0)
     Num=rates_total;                    //最开始,指标运行把图标内的K线柱数的数据都计算一遍
   else 
     Num=rates_total-prev_calculated+1;  //指标运行后,就只计算就近的1到2根K线的数据
   double buffer[];                            
   ArraySetAsSeries(buffer,true);        
   int indicator_EMA=iMA(NULL,0,指标周期,0,MODE_EMA,PRICE_CLOSE);         //CopyBuffer多了这一步,指定取哪个指标的数值
   CopyBuffer(indicator_EMA,0,0,rates_total,buffer); 
   ArraySetAsSeries(close,true);         //MT5指标中,自动生成的close[]数组数据里close[0]图表中最左边K线的收盘价,用ArraySetAsSeries函数给他倒过来,让close[0]表示最右边K线的收盘价
   ArraySetAsSeries(open,true); 
   for(int i=0;i<Num;i++)
   {
    closeBuffer[i]=(close[i]-buffer[i])/buffer[i]*1000;
    openBuffer[i]=(open[i]-buffer[i])/buffer[i]*1000;
   } 
   return(rates_total);
  }
//+------------------------------------------------------------------+
songtanqiang:
自制了一个指标,编程EA测试,跑历史数据时EA在不断叠加,见图1,用模拟盘实时挂载EA时,日志显示自制指标在不断加载移除,见图2,单独在图表中加载指标时没问题,求高手解惑
原因: