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)
-   -   Wie filtert und speichert man Zwischenwerte aus einer for-schleife ? (http://www.expert-advisor.com/forum/showthread.php?t=4966)

Trader6666 24.05.16 11:14

Wie filtert und speichert man Zwischenwerte aus einer for-schleife ?
 
Guten Morgen,

ich programmiere noch nicht lange und hab auch eher nur Basic´s drauf, versuch aber immer selber nen Lösungsweg zu finden.ich hoffe Ihr könnt mir kurz helfen, ich habe noch nie mit Arrays, gearbeitet deswegen tuh ich mich auch extrem schwer damit :confused::confused::confused:

ich versuche gerade die letzen 5 Fractals auszulesen und zu sortieren , dass klappt auch wunderbar, nur würde ich sie gerne zwischenspeichern und jeden neuen Wert mit dem letzten ermittelten extremwert vergleichen/austauschen falls dieser unter/überschritten wird.


Mein Code sieht so aus:

int start()
{
int h,l;

double H_fractal = iFractals(Symbol(), 0, 1, h);
double L_fractal = iFractals(Symbol(), 0, 2, l);

for( h=0;h<50;h++)
{
if (iFractals(Symbol(),0,1,h) > 0)
//if(Low[i] > Low[i+1] )
{
// i= i+1;
Alert(" High Fractal auf Kerze " + IntegerToString(h,0,0) +
" hat das Hoch bei =" + DoubleToString(Low[h],5));
}
}

for( l=0;l<50;l++)
{
if(iFractals(Symbol(),0,2,l) > 0)
{
Alert(" Low Fractal auf Kerze " + IntegerToString(l,0,0) +
" hat das Tief bei =" + DoubleToString(Low[l],5));
}
}

return(0);
}

So, wie lös ich das jetzt am elegantesten, dass ich mir die letzten als Beispiel 5 ermittelten werte raus ziehe der 6te wert ermittelt den Extremwert und wird mit jedem neuen fractal verglichen/ausgetauscht falls der neue wert den aktuellen über/untersteigt.

Würd mich freuen wenn mir jem helfen/ nen Ansatz geben könnte :confused:

LG

traderdoc 24.05.16 12:41

Code:

double Fractal[4];

int start() {
  int count = 0, i = 0, buf;
  double value;

  while(count < 5) {
      i++;
      for(buf = 1; buf <= 2; buf++) {
        value = iFractals(Symbol(),0,buf,i);
        if (value > 0) {
            Fractal[count] = value;
            count++;
            break;
        }
      }
  }
}

So könnte das aussehen.

traderdoc

traderdoc 24.05.16 12:48

Da der Änderungsbutton wieder mal verschwunden ist, sei die Korrektur hier angebracht:

Es muß lauten: double Fractal[5];

traderdoc

Trader6666 25.05.16 11:51

Vielen Dank für die Hilfestellung Doc!!!!!

Bin grad am rumprobieren, geb Feedback wenn ich es geschafft hab:)

LG

Trader6666 25.05.16 18:15

Liste der Anhänge anzeigen (Anzahl: 1)
kurze Rückmeldung, der Lösungsweg is Top:) hilft mir auch etwas Array´s besser zu verstehen, hab versucht durch Objekte mir das ganze anzeigen zu lassen weil die Alerts schon nervig sind, nur wird der EA dadurch "removed" versteh nur ned warum??!? Hoffe kannst mir helfen

LG

traderdoc 25.05.16 18:23

Ja, kann ich aber nur, wenn ich den Code sehe.

traderdoc

Trader6666 25.05.16 18:54

//+------------------------------------------------------------------+
//| werte auslesen.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

int FontSize;
string FontStyle;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Obj();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
double Fractal[5];

int start()
{
int count = 0, i = 0, F_Buffer;
double value;

while(count < 5)
{
i++;
for(F_Buffer = 1; F_Buffer <= 2; F_Buffer++)
{
value = iFractals(Symbol(),0,F_Buffer,i);
if (value > 0 && F_Buffer == 1)
{
Fractal[count] = value;

count++;

Alert(" High Fractal auf Kerze " + DoubleToString(High[count],5) +
" hat das Tief bei =" + DoubleToString( value,5));

break;
}
if (value > 0 && F_Buffer == 2)
{
Fractal[count] = value;

count++;

Alert(" Low Fractal auf Kerze " + DoubleToString(Low[count],5) +
" hat das Tief bei =" + DoubleToString( value,5));

break;

}
}
}
Ausgabe("Fractal[1]",DoubleToString(Fractal[1],5),clrYellow);
Ausgabe("Fractal[2]",DoubleToString(Fractal[2],5),clrYellow);
Ausgabe("Fractal[3]",DoubleToString(Fractal[3],5),clrYellow);
Ausgabe("Fractal[4]",DoubleToString(Fractal[4],5),clrYellow);
Ausgabe("Fractal[5]",DoubleToString(Fractal[5],5),clrYellow);


return(0);
}


void Ausgabe (string name, string wert, color col )
{
ObjectSetText(name,wert,FontSize,FontStyle,col);
}





void Obj()
{

// Obj1
ObjectCreate ("Fractal[1]",OBJ_LABEL,0,0,0);
ObjectSetText ("Fractal[1]",DoubleToString(Fractal[1],5),FontSize,FontStyle,clrYellow);
ObjectSet ("Fractal[1]",OBJPROP_CORNER,0);
ObjectSet ("Fractal[1]",OBJPROP_XDISTANCE,80);
ObjectSet ("Fractal[1]",OBJPROP_YDISTANCE,60);
ObjectCreate ("TFractal[1]",OBJ_LABEL,0,0,0);
ObjectSetText ("TFractal[1]","Fractal[1]: ",FontSize,FontStyle,clrYellow);
ObjectSet ("TFractal[1]",OBJPROP_CORNER,0);
ObjectSet ("TFractal[1]",OBJPROP_XDISTANCE,15);
ObjectSet ("TFractal[1]",OBJPROP_YDISTANCE,60);
// Obj2
ObjectCreate ("Fractal[2]",OBJ_LABEL,0,0,0);
ObjectSetText ("Fractal[2]",DoubleToString(Fractal[2],2),FontSize,FontStyle,clrYellow);
ObjectSet ("Fractal[2]",OBJPROP_CORNER,0);
ObjectSet ("Fractal[2]",OBJPROP_XDISTANCE,80);
ObjectSet ("Fractal[2]",OBJPROP_YDISTANCE,80);
ObjectCreate ("TFractal[2]",OBJ_LABEL,0,0,0);
ObjectSetText ("TFractal[2]","Fractal[2]: ",FontSize,FontStyle,clrYellow);
ObjectSet ("TFractal[2]",OBJPROP_CORNER,0);
ObjectSet ("TFractal[2]",OBJPROP_XDISTANCE,15);
ObjectSet ("TFractal[2]",OBJPROP_YDISTANCE,80);
// Obj3
ObjectCreate ("Fractal[3]",OBJ_LABEL,0,0,0);
ObjectSetText ("Fractal[3]",DoubleToString(Fractal[3],2) ,FontSize,FontStyle,clrYellow);
ObjectSet ("Fractal[3]",OBJPROP_CORNER,0);
ObjectSet ("Fractal[3]",OBJPROP_XDISTANCE,80);
ObjectSet ("Fractal[3]",OBJPROP_YDISTANCE,100);
ObjectCreate ("TFractal[3]",OBJ_LABEL,0,0,0);
ObjectSetText ("TFractal[3]","Fractal[3]: ",FontSize,FontStyle,clrYellow);
ObjectSet ("TFractal[3]",OBJPROP_CORNER,0);
ObjectSet ("TFractal[3]",OBJPROP_XDISTANCE,15);
ObjectSet ("TFractal[3]",OBJPROP_YDISTANCE,100);
// Obj4
ObjectCreate ("Fractal[4]",OBJ_LABEL,0,0,0);
ObjectSetText ("Fractal[4]",DoubleToString(Fractal[4],5),FontSize,FontStyle,clrYellow);
ObjectSet ("Fractal[4]",OBJPROP_CORNER,0);
ObjectSet ("Fractal[4]",OBJPROP_XDISTANCE,80);
ObjectSet ("Fractal[4]",OBJPROP_YDISTANCE,120);
ObjectCreate ("TFractal[4]",OBJ_LABEL,0,0,0);
ObjectSetText ("TFractal[4]","Fractal[4]: ",FontSize,FontStyle,clrYellow);
ObjectSet ("TFractal[4]",OBJPROP_CORNER,0);
ObjectSet ("TFractal[4]",OBJPROP_XDISTANCE,15);
ObjectSet ("TFractal[4]",OBJPROP_YDISTANCE,120);
// Obj5
ObjectCreate ("Fractal[5]",OBJ_LABEL,0,0,0);
ObjectSetText ("Fractal[5]",DoubleToString(Fractal[5],5),FontSize,FontStyle,clrRed);
ObjectSet ("Fractal[5]",OBJPROP_CORNER,0);
ObjectSet ("Fractal[5]",OBJPROP_XDISTANCE,80);
ObjectSet ("Fractal[5]",OBJPROP_YDISTANCE,140);
ObjectCreate ("TFractal[5]",OBJ_LABEL,0,0,0);
ObjectSetText ("TFractal[5]","Hinweis: ",FontSize,FontStyle,clrYellow);
ObjectSet ("TFractal[5]",OBJPROP_CORNER,0);
ObjectSet ("TFractal[5]",OBJPROP_XDISTANCE,15);
ObjectSet ("TFractal[5]",OBJPROP_YDISTANCE,140);
// Obj6
ObjectCreate ("Fractal[6]",OBJ_LABEL,0,0,0);
ObjectSetText ("Fractal[6]",DoubleToString(Fractal[5],5),FontSize,FontStyle,clrBlueViolet);
ObjectSet ("Fractal[6]",OBJPROP_CORNER,0);
ObjectSet ("Fractal[6]",OBJPROP_XDISTANCE,80);
ObjectSet ("Fractal[6]",OBJPROP_YDISTANCE,160);
ObjectCreate ("TFractal[6]",OBJ_LABEL,0,0,0);
ObjectSetText ("TFractal[6]","Fractal[6]: ",FontSize,FontStyle,clrYellow);
ObjectSet ("TFractal[6]",OBJPROP_CORNER,0);
ObjectSet ("TFractal[6]",OBJPROP_XDISTANCE,15);
ObjectSet ("TFractal[6]",OBJPROP_YDISTANCE,160);
}

traderdoc 25.05.16 19:05

Die Größe des Arrays double Fractal[5]; ist in diese Falle 5 (also 5 Felder!), aber die Indices der Felder gehen in der Regel von 0 bis 4. Bei Dir taucht u.a. in Zeile 141 Fractal[5] auf. Und da springt der EA aus dem Kasten, weil das außerhalb der Range ist.

count steht initial auf 0 und somit ist der Index des ersten Feldes auch 0,
also Fractal[0] bis Fractal[4].

traderdoc

Trader6666 25.05.16 19:14

hatte ich auch den verdacht wegen dem 0-Index nun wird der EA sofort Removed , nachdem er geladen wurde:confused:

Trader6666 25.05.16 19:17

ok passt , war ein wert zuviel, flog raus wegen "Out of Array"

danke für die schnelle Hilfe!!!!


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:02 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