EMA Berechnung

 

Hallo Leute, 


hab schon ewig nix mehr gemacht auf MQL5, jetzt scheitere ich gerade wieder

nachdem ich feststellen musste, das wenn ich die Renko2Offline hier aus der Codebase nehme, die Indes zwar richtig angezeigt werden, bei der Caluclation im EA aber über die iMA Funktion was falsches rauskommt, nämlich gar nix


jetzt hab ich mir da schnell was geschrieben, aber irgendwie funkt das nicht


double EMA(const int position)
  {
   double res[];
   int i= 0;

//--- check period
   if(MAperiod>0)
     {
      for( i = 0; i<MAperiod; i++)
        {
         double pr=2.0/(MAperiod+1.0);
         res[i]=iClose(NULL,0,i)*iClose(NULL,0,i-1)*(1-pr);
        }
     }

   return(res[position]);
  }

hat wer eine Idee?


lg

amando

 

Wenn solche Sachen nicht funktionieren, dann kann man den Debugger benutzen. Zuerst setzt man einen Break-Point im Code, startet den Debugger, lässt alles durchlaufen bis zum Break-Point und schaut sich dann Schritt für Schritt an, wie die einzelnen Variablen gesetzt und verändert werden.

Ich hab mir die Sache nicht näher angeschaut, aber augenscheinlich verwendest Du die falschen Parameter für iClose:

double  iClose(
   const string        symbol,          // Symbol
   ENUM_TIMEFRAMES     timeframe,       // Period
   int                 shift            // Shift
   );


Wie wäre es mit PERIOD_CURRENT oder _Period oder etwas dergleichen statt 0?

P.S. Es empfiehlt sich grundsätzlich eine mehrmals verwendete Variable wie pr nicht jedes Mal neu zu berechnen, sondern einmal außerhalb der Schleife.

 
Benjamin Fotteler #:

Wenn solche Sachen nicht funktionieren, dann kann man den Debugger benutzen. Zuerst setzt man einen Break-Point im Code, startet den Debugger, lässt alles durchlaufen bis zum Break-Point und schaut sich dann Schritt für Schritt an, wie die einzelnen Variablen gesetzt und verändert werden.

Ich hab mir die Sache nicht näher angeschaut, aber augenscheinlich verwendest Du die falschen Parameter für iClose:


Wie wäre es mit PERIOD_CURRENT oder _Period oder etwas dergleichen statt 0?

P.S. Es empfiehlt sich grundsätzlich eine mehrmals verwendete Variable wie pr nicht jedes Mal neu zu berechnen, sondern einmal außerhalb der Schleife.

Nein das ist es nicht, 0 steht für current timframe

d

 
Must Du wohl debuggen ...
 

res[] hat keine Größenangabe

double EMA(const int position)
  {
   double res[];
   int i= 0;
  
//--- check period
   ArrayResize(res,MAperiod);
   if(MAperiod>0)
     {
      for( i = 0; i<MAperiod; i++)
        {
         double pr=2.0/(MAperiod+1.0);
         res[i]=iClose(NULL,0,i)*iClose(NULL,0,i-1)*(1-pr);
        }
        ArrayPrint(res); //Debugger...
     }

   return(res[position]);
  }