EA创建自定义指标的多个实例

时间:2017-03-12 15:55:29

标签: mql4

当我使用自定义指示器时,它显示如下图形:

enter image description here 当我将Expert Advisor与自定义指标一起使用时,它显示以下内容:

enter image description here 当我进行回测时,它还重复打开了很多自定义指示器。

我应该如何更改EA

  1. 它只打开了自定义指标;

  2. 它绘制与自定义指标

  3. 相同的图形

    以下是自定义指标的代码( HitBollingerBand1.mq4

    #property indicator_chart_window 
    #property indicator_buffers 2 
    
    sinput string s_  = " Bolinger Bands ";   //  ind#1
    input int      InpBandsPeriod    = 20;    //period
    input double   InpBandsDeviation = 2.0;   //deviation
    
    double CrossedUp[];
    double CrossedDown[];
    
    int limit, x;
    double POINT;
    
    int init()
      {
    
       SetIndexStyle(0, DRAW_ARROW, 1, 2,clrRed);
       SetIndexBuffer(0,CrossedUp);
       SetIndexStyle(1, DRAW_ARROW, 1, 2,clrRed);
       SetIndexBuffer(1,CrossedDown);
       POINT=0.0001;
       return(0);
      }
    
    int start()
      {
    
       int counted_bars=IndicatorCounted();
       if(counted_bars<0) return(-1); 
       if(counted_bars>0) counted_bars--;
       limit=Bars-counted_bars; 
    
    
       for(int i=limit; i>=0; i--) { 
          isHitBollingerBand(i);     
       }
       return(0);
      }
    
    
    void isHitBollingerBand(int candleIdx){        
            int dir[]={1,-1};
             bool setUp=false;
             bool setDown=false;
            for (int j=0;j<ArraySize(dir);j++){
                double bands = iBands(_Symbol,0,InpBandsPeriod,InpBandsDeviation,0,PRICE_CLOSE,dir[j]<0?MODE_LOWER:MODE_UPPER,candleIdx);
                double _peak = dir[j]<0 ? iLow(_Symbol,0,candleIdx): iHigh(_Symbol,0,candleIdx);  
                if(dir[j] * (_peak-NormalizeDouble(bands,Digits) ) >= 0){                         
                  double result=_peak+ dir[j]*3*POINT;
                  if(dir[j]==1)
                   CrossedUp[candleIdx]=result;
                  else
                   CrossedDown[candleIdx]=result;                  
          }            
        }
    
    }
    

    以下是EA使用自定义指标(HitBollingerBandEA.mq4

    的代码
    int init()
      {     
       start();
       return(0);
      }
    sinput string s_  = " Bolinger Bands ";   //  ind#1
    input int      InpBandsPeriod    = 20;    //period
    input double   InpBandsDeviation = 2.0;   //deviation
    int start()
      {
             double HitBollingerBandUp=iCustom(NULL, 0, "HitBollingerBand1", InpBandsPeriod,InpBandsDeviation,0,1);
             double HitBollingerBandDown=iCustom(NULL, 0, "HitBollingerBand1", InpBandsPeriod,InpBandsDeviation,1,1);
             if(HitBollingerBandUp!=EMPTY_VALUE){
                printf("%i%s [%s]",__LINE__,__FUNCTION__,TimeToStr(Time[1],TIME_DATE|TIME_MINUTES));                 
            }
       return(0);
      }
    

1 个答案:

答案 0 :(得分:0)

EA类型的MQL4代码
不影响,所有 CustomIndicator -s类型的MQL4 - 代码在GUI上绘制

这就是说,可以使用 iCustom() 从EA端“读取”来自任何CustomIndicator缓冲区的任何值。但这并不意味着,GUI窗口上有任何线条。

如果有人计划在 CustomIndicator 类型的MQL4 - 代码

内查看编程的所有行

然后必须将 CustomIndicator “放置”到“GUI窗口”上。手动或以编程方式(使用启动时“配置文件”定义)。

Q2:我应该如何更改EA,使其绘制与 Custom Indicator 相同的图表?

A2:在有这种需要的情况下,我们将整个CustomIndicator逻辑转码为EA,以便EA在其自己的控制下执行所有GUI操作,而不是依赖于Graph的手动GUI设置。