Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Standard_Abweichung (http://www.expert-advisor.com/forum/showthread.php?t=1949)

Biatsch 16.02.12 15:25

Standard_Abweichung
 
Hi,
ich wollte gerade einen indikator schreiben, der mir die Standard_Abweichung der letzten 10 Closes in einem separaten Fenster anzeigt.
Wenn ich den Indikator aber anwende, stürzt mein Metatrader aber ab.

Ist der Code falsch oder hab ich einfach nicht genug Rechnerleistung?
Letzteres bezweifle ich doch sehr.
Für diejenigen, die es nicht wissen; dies ist die Standard_Abweichung:

http://upload.wikimedia.org/wikipedi...3a38b2b8a5.png

Hier mein Code:

HTML-Code:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue
#property indicator_width1 2

extern int period = 10;
double Buf0[];

int init()
{
  SetIndexBuffer(0,Buf0);
  SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
  return(0);
}

int start()
{
  int counted_bars=IndicatorCounted();
  int i = Bars-counted_bars-1;
 
  double ma=0;      // Durchschnitt der letzten 10 Closes
  double diff=0;      // Differenz zwischen einem Close und dem Durchschnitt aus 10 Closes
  double sqrt=0;    // Wurzel
  while(i>=0)
  {
      for(int k=i; k<i+period; k++){
        ma = ma+Close[k];
      }
      ma /= period;
     
      for(int j=i; j<i+period; j++){
        diff = diff + (Close[j]-ma)*(Close[j]-ma);
      }
      sqrt = MathSqrt(diff/(period-1));
 
  Print("sqrt=", sqrt);
  Buf0[i]=sqrt;
  }
 
  return(0);
}


naranjoe 16.02.12 19:15

Hier verursacht das
Code:

while(i>=0)
den Absturz des MT.

Versuch mal die while-schleife durch eine for-schleife zu ersetzen
Code:

for (i = i; i >= 0; i--)
Damit sollte der MT nicht mehr abstürzen.

Gruß
naranjoe

Biatsch 16.02.12 21:47

Wow, big thx.

Kannst du mir auch erklären warum das nun funktioniert ?

naranjoe 17.02.12 07:24

Die Bedingung "while(i>=0)" war immer gegeben, weil du "i" nicht verändert hast.
Dadurch hat er sich in der Schleife "aufhangen".

Gruß
naranjoe

Biatsch 17.02.12 09:41

Ach klar.
Ich dachte schon es hätte einen tieferen programmiertechnischen Hintergrund.
Ich hätte also bloß i-- in die Schleife setzen müssen.
Danke.

Biatsch 17.02.12 23:56

Mein nächstes Vorhaben besteht darin mit anderen EAs und Indikatoren auf die Werte des Indikators der Standardabweichung zugreifen zu können.

Ich würde auf meinen eigenen Indikator gern so zugreifen wie auf Standardindikatoren nach dem Prinzip:

double Wert= iRSI(......);

Wie stelle ich das an ?

naranjoe 18.02.12 08:12

Die Werte die dein Indikator liefert, kannst du in anderen Projekten mit "iCustom" auslesen. Schau mal in der Metaeditor Hilfe für eine genaue Beschreibung.

Gruß
naranjoe


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:35 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum