yannik0802 Posted February 5, 2016 Report Share Posted February 5, 2016 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 :) Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 5, 2016 Report Share Posted February 5, 2016 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 . 1 Quote Link to comment Share on other sites More sharing options...
yannik0802 Posted February 6, 2016 Author Report Share Posted February 6, 2016 (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 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 February 7, 2016 by whipsaw Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 6, 2016 Report Share Posted February 6, 2016 Du bist auf jeden Fall auf dem richtigen Weg . 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 . 3 Quote Link to comment Share on other sites More sharing options...
yannik0802 Posted February 6, 2016 Author Report Share Posted February 6, 2016 Dankesehr, da werd ich mich mal durcharbeiten Falls ich nicht klarkomme, melde ich mich nochmal zu Wort Quote Link to comment Share on other sites More sharing options...
yannik0802 Posted February 6, 2016 Author Report Share Posted February 6, 2016 (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. Edited February 7, 2016 by whipsaw Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 6, 2016 Report Share Posted February 6, 2016 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. Quote Link to comment Share on other sites More sharing options...
yannik0802 Posted February 6, 2016 Author Report Share Posted February 6, 2016 Ok das hilft mir schonmal weiter, dankesehr Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.