Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

breakout time range

Geschrieben

Hallihallo :)

ich beschäftige mich seit kurzem mit der Programmierung in MQL4 und plane nun zur Übung einige Strategien zu programmieren.

 

Beginnen wollte ich mit der breakout open range strategie, bei der jeweils das Hoch und Tief der Periode zwischen 08:00 und 09:15 eingezeichnet wird. Es soll gehandelt werden sobald nach 09:15 der Kurs außerhalb der range schließt.

 

Die Frage ist wie bestimme ich diese Werte jetzt? Ich hab schon rausgefunden wie man ein Tageshoch bestimmen kann. Wie ich rausgefunden habe, funktioniert das so:

 

 

double Res240 = iHigh(Symbol(),0,(iHighest(Symbol(),0,MODE_HIGH,Hour(),1)));// Tageshoch

 

 

Ich verstehe allerdings nicht ganz wie ich das Hoch einer bestimmten Zeitperiode, z.b. eben von 8 bis 09:15 rausfinden kann, kann mir da zufällig jemand hier helfen?

Vielen Dank schonmal im Vorraus :)

Featured Replies

Geschrieben

Du könntest das bspw. in der M15 Historie abfragen. Ganz ohne Quelltext getreu dem Motto: wenn die aktuelle Kerze als Open Time 9:15h hat, suche das Hoch/Tief der letzten 5 abgeschlossenen Kerzen. Das widerum geht mit iHighest in Kombination mit iHigh. Sicherlich gibt es elegantere Lösungen - nur eben nicht am Freitag abend crazy.gif .

Geschrieben
  • Autor

Hm okay danke schonmal.

Aber wie genau setze ich das dann um? Könntest du mir eventuell einen Ansatz verraten? Ich bin echt am Verzweifeln mit den Uhrzeiten im MT4 :D Theoretisch muss ich ja irgendwie folgendes sagen:

 

If (TimeLocal()==9.15)
 {find?! iHigh(Symbol(),PERIOD_M15,(iHighest(Symbol(),PERIOD_M15,MODE_HIGH,5,1}

 

Das stimmt aber von vorne und hinten nicht und ich finde leider nicht raus wie es richtig funktioniert gossip.gif

 

Ich möchte das Hoch der Periode zwischen 8 und 9:15 dann als Wert rausbekommen, sodass ich halt wie folgt weitermachen kann.

 

 

If (Close[1]>Hochpunkt_der_Range)
 { signal = "long";}

 

 

Nur weiss ich eben leider nicht wie ich auf den Wert des Hochpunkts komme. Desweiteren müsste ich noch irgendwie einfügen, dass zwischen 8 und 09:15 kein trading erlaubt ist, evtl über einen bool-Befehl, der auf true geht wenn wir uns zwischen 8 und 9:15 befinden?

Also evtl so:

 

bool openingtime;

If (08.00<TimeLocal()<09.15)
   {bool openingtime=true;}
else {bool opening time=false;}
 

 

 

Dann hätte ich die beiden Bedingungen die ich möchte, allerdings macht der Code so wie erwähnt keinen Sinn und ich komme nicht weiter. Ich hoffe mir kann irgendjemand hier helfen.

Bearbeitet von whipsaw

Geschrieben

Du bist auf jeden Fall auf dem richtigen Weg pelo1.gif.

 

https://docs.mql4.com/series/ihighest
-> sucht die Kerze mit dem höchsten Wert

 

https://docs.mql4.com/series/ihigh
-> gibt das Hoch einer bestimmten Kerze aus

 

https://forum.mql4.com/38196
-> zeigt Beispiele zur Kombination

 

https://docs.mql4.com/dateandtime
-> zeigt die Funktionen zur Abfrage von Uhrzeiten. Für Dich sind da sicherlich TimeHour und TimeMinute interessant wink.gif.

Geschrieben
  • Autor

Hm ich bin noch nicht wirklich weitergekommen, ich habs zwar geschafft irgendwie die Zeit zu bestimmen, aber im backtest macht er dann nicht das was er soll.

 

Ich hatte das jetzt so versucht:

 

 

 

extern int range_start_time_hour=8;
extern int range_start_time_minute=0;
extern int range_end_time_hour=9;
extern int range_end_time_minute=15;

datetime fromDT = TimeDay(TimeCurrent()) && TimeHour(range_start_time_hour) && TimeMinute(range_start_time_minute);
datetime toDT = TimeDay (TimeCurrent()) && TimeHour(range_end_time_hour) && TimeMinute(range_end_time_minute);

int fromBar = iBarShift(NULL, 0, fromDT,0),
toBar = iBarShift(NULL, 0, toDT,0),
length = fromBar - toBar + 1,
HHbar = iHighest(NULL,0, MODE_HIGH, length, toBar),
LLbar = iLowest(NULL,0, MODE_LOW, length, toBar);
double HH = High[HHbar], // iHigh(NULL,0, HHbar)
LL = Low[LLbar]; // iLow(NULL,0, LLbar)
 

 

 

 

aber irgendwas stimmt daran nicht, ich weiss einfach nicht wie ich es schaffe eine konkrete Uhrzeit(z.B. heute 8 Uhr) auszudrücken.

 

Versucht hatte ich das wie erwähnt so:

 

 

TimeDay(TimeCurrent() && TimeHour(8) && TimeMinute(15))
 

 

 

 

aber das funzt nicht. Hat jemand evtl eine andere Idee für mich? Google bringt mich nämlich auch nicht wirklich weiter. gossip.gif

Bearbeitet von whipsaw

Geschrieben

Ein logisches UND (=&&) macht da auch keinen Sinn. Ich würde so vorgehen: Wenn die Startuhrzeit der aktuellen M15 Kerze 9:15h entspricht, dann suche das Hoch/Tief der letzten fünf M15 Kerzen.

if (TimeHour(iTime(NULL,PERIOD_M15,0))==9 && TimeMinute(iTime(NULL,PERIOD_M15,0))==15) {
   double MyHigh = iHigh(Symbol(),Period_M15,iHighest(Symbol(),Period_M15,MODE_HIGH,5,1));
   double MyLow = iLow(Symbol(),Period_M15,iLowest(Symbol(),Period_M15,MODE_LOW,5,1));
}

Ich habe es nun nicht überprüft und ist auch sicherlich nicht die eleganteste Variante, aber eventuell hilft es Dir schon mal weiter.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.