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: 4973
Beiträge: 43253
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

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

Empfehlungen

Thema geschlossen
 
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);
      }  
  }
  #2 (permalink)  
Alt 01.05.19
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #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?
  #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;
      }
  }
  #5 (permalink)  
Alt 01.05.19
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #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
Thema geschlossen

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 +1. Es ist jetzt 19:26 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.
-----------------------------------------------------------------------------------------------------------------------------