Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4972
Beiträge: 43246
Benutzer: 7.217
Aktive Benutzer: 85
Links: 84
Wir begrüßen unseren neuesten Benutzer: DFeck
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 36 Minuten
- DFeck
vor 2 Tagen
- bb1107
vor einer Woche
- rg-trader
vor 2 Wochen
- toshistyle
vor 2 Wochen
- Robin

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 96
Gesamt: 96
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 24.05.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard 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
  #2 (permalink)  
Alt 24.05.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 24.05.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #4 (permalink)  
Alt 25.05.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

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

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

LG
  #5 (permalink)  
Alt 25.05.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

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
Angehängte Grafiken
Dateityp: png Rem.png (38,1 KB, 7x aufgerufen)
  #6 (permalink)  
Alt 25.05.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #7 (permalink)  
Alt 25.05.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

//+------------------------------------------------------------------+
//| 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);
}
  #8 (permalink)  
Alt 25.05.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #9 (permalink)  
Alt 25.05.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

hatte ich auch den verdacht wegen dem 0-Index nun wird der EA sofort Removed , nachdem er geladen wurde
  #10 (permalink)  
Alt 25.05.16
Mitglied
 
Registriert seit: Apr 2014
Beiträge: 118
Trader6666 befindet sich auf einem aufstrebenden Ast
Standard

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

danke für die schnelle Hilfe!!!!
Thema geschlossen

Lesezeichen

Stichworte
array, arrays, for schleife, mql4, programmierung, programmierung metatrader, schleife, werte speichern

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------