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: 4258
Beiträge: 39368
Benutzer: 6.577
Aktive Benutzer: 255
Links: 80
Wir begrüßen unseren neuesten Benutzer: festus
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Tagen
- festus
vor 4 Tagen
- lovetradin...
vor 4 Tagen
- schwarz
vor 4 Tagen
- viethommy
vor 4 Tagen
- earasa

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 179
Gesamt: 180
Team: 0
Team:  
Benutzer:  tbooo
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 01.05.19
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 12
Tox01 befindet sich auf einem aufstrebenden Ast
Standard Markierung der Range

Hallo zusammen,

der folgende Code soll das höchste Hoch und das tiefste Tief von 8 bis einschließlich 9 Uhr erfassen.
Allerdings "vergisst" er die letzte Kerze um 9 Uhr. Habt ihr eine Idee, woran das liegen könnte?
Wo ist der Fehler?

Code:
extern string Anfangszeit_alsString="08:00";
extern string Endzeit_alsString = "09:00";
datetime Anfangszeit_alsZeit, Endzeit_alsZeit;
double Hoechstkurs, Tiefstkurs;

void OnTick()
  {
//---
      Anfangszeit_alsZeit = StringToTime(Anfangszeit_alsString);
      Endzeit_alsZeit = StringToTime(Endzeit_alsString);
      
      if(TimeCurrent()== Endzeit_alsZeit)
      {
         Hoechstkurs   = iHigh(Symbol(), PERIOD_M5, iHighest(Symbol(), PERIOD_M5, MODE_HIGH, 13, 0));
         Tiefstkurs    = iLow(Symbol(), PERIOD_M5, iLowest(Symbol(), PERIOD_M5, MODE_LOW, 13, 0));
      }
      
      if(TimeCurrent() == Endzeit_alsZeit && Hoechstkurs > 0 && Tiefstkurs > 0)
      {
         ObjectCreate("OpenRange "+TimeToString(TimeCurrent(),TIME_DATE),
                     OBJ_RECTANGLE,0,Anfangszeit_alsZeit,Tiefstkurs,
                     Endzeit_alsZeit, Hoechstkurs);
      }  
  }
Mit Zitat antworten
  #2 (permalink)  
Alt 01.05.19
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.208
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Bei

if(TimeCurrent()== Endzeit_alsZeit)

hast Du Glück, wenn diese Bedingung überhaupt true ergibt, denn wenn nicht TimeCurrent() dem Zeitwert Endzeit_alsZeit exakt auf die Sekunde, also 09:00:00, entspricht, dann würde nicht in diese Abfrage eingesprungen werden.
Das zum Einen.
Zum Anderen, wenn das Programm dort einspringt, würde exakt zum Kerzenanfang der Kerze um 09:00:00 das High oder Low benutzt werden, welches jedoch identisch ist mit dem Open der aktuellen Kerze.

D.h. die aktuelle Kerze um 09:00:00 zu nehmen, ist wenig sinnvoll.
Anders läge der Fall, auf den Wechsel der Kerze um 09:05:00 zu warten, um dann mit

Hoechstkurs = iHigh(Symbol(), PERIOD_M5, iHighest(Symbol(), PERIOD_M5, MODE_HIGH, 13, 1));
Tiefstkurs = iLow(Symbol(), PERIOD_M5, iLowest(Symbol(), PERIOD_M5, MODE_LOW, 13, 1));

das High bzw. Low ermitteln zu lassen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 01.05.19
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 12
Tox01 befindet sich auf einem aufstrebenden Ast
Standard

Das mit TimeCurrent() leuchtet mir ein. Wäre wohl sinnvoller mit Time[0] zu arbeiten um die Zeit der Kerzen abzufragen, oder?
Mit Zitat antworten
  #4 (permalink)  
Alt 01.05.19
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 12
Tox01 befindet sich auf einem aufstrebenden Ast
Standard

Ich habe soeben nochmal am Code gebastelt. Allerdings hatte ich dann das Problem, dass sich die Variablen Hoechstkurs und Tiefskurs nach 9 Uhr weiterhin verändert haben. Habe es aber mit eine bool Variable in den Griff bekommen, welcher am Ende des Tages zurückgesetzt wird. Der Code tut nun das was er soll. Könnte ich hier deiner Ansicht nach noch etwas verbessern?

Code:
extern string Anfangszeit_alsString="08:00";
extern string Endzeit_alsString = "09:00";
extern string EndeDesTages_alsString = "20:00";
datetime Anfangszeit_alsZeit, Endzeit_alsZeit, EndeDesTages_alsZeit;
double Hoechstkurs, Tiefstkurs;
bool Kursdaten_vorhanden;

void OnTick()
  {
//---
      Anfangszeit_alsZeit = StringToTime(Anfangszeit_alsString);
      Endzeit_alsZeit = StringToTime(Endzeit_alsString);
      EndeDesTages_alsZeit = StringToTime(EndeDesTages_alsString);

      if(Time[0]>Endzeit_alsZeit && Kursdaten_vorhanden==false && Time[0]<EndeDesTages_alsZeit)
      {
         Hoechstkurs = iHigh(Symbol(), PERIOD_M5, iHighest(Symbol(), PERIOD_M5, MODE_HIGH, 13, 1));
         Tiefstkurs = iLow(Symbol(), PERIOD_M5, iLowest(Symbol(), PERIOD_M5, MODE_LOW, 13, 1));
         Kursdaten_vorhanden=true;
      }
      
      if(Time[0]>Endzeit_alsZeit && Hoechstkurs > 0 && Tiefstkurs > 0)
      {
         ObjectCreate("OpenRange "+TimeToString(TimeCurrent(),TIME_DATE),
                     OBJ_RECTANGLE,0,Anfangszeit_alsZeit,Tiefstkurs,
                     Endzeit_alsZeit, Hoechstkurs);
      }
      
      Comment("Hoechstkurs: ",Hoechstkurs," Tiefstkurs: ",Tiefstkurs);
      
      if(Time[0]>EndeDesTages_alsZeit)
      {
         Kursdaten_vorhanden=false;
      }
  }
Mit Zitat antworten
  #5 (permalink)  
Alt 01.05.19
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.208
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Einmalige Tagesabfragen werden in der Regel immer über sog. Flags gesteuert. In diesem Falle über den Vergleich der Tageszahl. Ist die Zeit der aktuellen Kerze größer als die Kerze der Zeit "Endzeit_alsZeit", dann wird Hoechstkurs und Tiefstkurs ermittelt und das Flag angepasst - fertig.
Dieses einfache Beispiel funktioniert nur, wenn der EA bis 09:00 eingeschaltet wurde, wegen der Benutzung der Suchstartkerze 1.

Code:
datetime OldDay = Day(); //in den globalen Variablen

if (OldDay !=  Day() && Time[0] > Endzeit_alsZeit) {
   Hoechstkurs = iHigh(Symbol(), PERIOD_M5, iHighest(Symbol(), PERIOD_M5, MODE_HIGH, 13, 1));
   Tiefstkurs  = iLow(Symbol(), PERIOD_M5, iLowest(Symbol(), PERIOD_M5, MODE_LOW, 13, 1));
   OldDay = Day();
}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #6 (permalink)  
Alt 01.05.19
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 12
Tox01 befindet sich auf einem aufstrebenden Ast
Standard

Funktioniert. Danke
Mit Zitat antworten
Antwort

Lesezeichen


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 +2. Es ist jetzt 08:07 Uhr.


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