|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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 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 LG |
|
|||
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; } } } } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Da der Änderungsbutton wieder mal verschwunden ist, sei die Korrektur hier angebracht:
Es muß lauten: double Fractal[5]; traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Vielen Dank für die Hilfestellung Doc!!!!!
Bin grad am rumprobieren, geb Feedback wenn ich es geschafft hab LG |
|
|||
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 |
|
|||
Ja, kann ich aber nur, wenn ich den Code sehe.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
//+------------------------------------------------------------------+
//| 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); } |
|
|||
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
hatte ich auch den verdacht wegen dem 0-Index nun wird der EA sofort Removed , nachdem er geladen wurde
|
Lesezeichen |
Stichworte |
array, arrays, for schleife, mql4, programmierung, programmierung metatrader, schleife, werte speichern |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|