Jump to content
Tom Next - Daytrading Community

Recommended Posts

Posted

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 :)

Posted

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 .

  • Upvote 1
Posted (edited)

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.

Edited by whipsaw
Posted

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.

  • Upvote 3
Posted (edited)

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

Edited by whipsaw
Posted

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.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...