紧急求助!EA中如何调用该指标?

楼主  收藏   举报   帖子创建时间:  2019-05-05 05:43 回复:0 关注量:206
紧急求助!EA中如何调用该指标
  我有两年的外汇交易经验,今年以来运用一套超短线策略帐户资金开始出现增长。对于编程我有一些经验,对于EA我还是新手。
  我想将我的策略用EA来实现。等EA基本做出来的时候与大家分享和改进。
  
  现在的问题是:EA中用到指标slope direction line实现基本的趋势判断,但我不知到如何正确调用。
  
  double iCustom( string symbol, int timeframe, string name, ... , int mode, int shift)
  
  其中int mode是什么?具体对于slope direction line而言,mode应该是什么?下面语句中问号应该是什么?
  
  if(iCustom(NULL,PERIOD_M30,"Slope Direction Line",10,2,4,?,0)==?) {.....//趋势向上}
  
  
  slope direction line代码如下
  
                                    
  //+------------------------------------------------------------------+
  #property copyright "MT4 release WizardSerg <a href="mailto:wizardserg@mail.ru"wizardserg@mail.ru/a>, ?? ??????? ForeXMagazine #104"
  #property link      "wizardserg@mail.ru"
  
  #property indicator_chart_window
  #property indicator_buffers 2
  #property indicator_color1 Blue
  #property indicator_color2 Red
  //---- input parameters
  extern int       period=10;
  extern int       method=2;                         // MODE_SMA
  extern int       price=4;                          // PRICE_CLOSE
  //---- buffers
  double Uptrend[];
  double Dntrend[];
  double ExtMapBuffer[];
  
  
  //+------------------------------------------------------------------+
  //| Custom indicator initialization function                         |
  //+------------------------------------------------------------------+
  int init()
  {
      IndicatorBuffers(3);  
      SetIndexBuffer(0, Uptrend);
      //ArraySetAsSeries(Uptrend, true);
      SetIndexBuffer(1, Dntrend);
      //ArraySetAsSeries(Dntrend, true);
      SetIndexBuffer(2, ExtMapBuffer);
      ArraySetAsSeries(ExtMapBuffer, true);
      
      SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
      SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
      
      IndicatorShortName("Slope Direction Line("+period+")");
      return(0);
  }
  
  //+------------------------------------------------------------------+
  //| Custor indicator deinitialization function                       |
  //+------------------------------------------------------------------+
  int deinit()
  {
      // ???? ????? ?????? ??????
      return(0);
  }
  
  //+------------------------------------------------------------------+
  //| ?????????? ???????                                               |
  //+------------------------------------------------------------------+
  double WMA(int x, int p)
  {
      return(iMA(NULL, 0, p, 0, method, price, x));   
  }
  
  //+------------------------------------------------------------------+
  //| Custom indicator iteration function                              |
  //+------------------------------------------------------------------+
  int start()
  {
      int counted_bars = IndicatorCounted();
      
      if(counted_bars < 0)
          return(-1);
                    
      int x = 0;
      int p = MathSqrt(period);              
      int e = Bars - counted_bars + period + 1;
      
      double vect[], trend[];
      
      if(e > Bars)
          e = Bars;   
  
      ArrayResize(vect, e);
      ArraySetAsSeries(vect, true);
      ArrayResize(trend, e);
      ArraySetAsSeries(trend, true);
      
      for(x = 0; x < e; x++)
      {
          vect[x] = 2*WMA(x, period/2) - WMA(x, period);        
  //       Print("Bar date/time: ", TimeToStr(Time[x]), " close: ", Close[x], " vect[", x, "] = ", vect[x], " 2*WMA(p/2) = ", 2*WMA(x, period/2), " WMA(p) = ",  WMA(x, period));
      }
  
      for(x = 0; x < e-period; x++)
      
          ExtMapBuffer[x] = iMAonArray(vect, 0, p, 0, method, x);        
      
      for(x = e-period; x >= 0; x--)
      {     
          trend[x] = trend[x+1];
          if (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1;
          if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
      
      if (trend[x]>0)
      { Uptrend[x] = ExtMapBuffer[x];
        if (trend[x+1]
打赏