|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Trade_Zone_Timer
Hallo, Liebe Programmier-"Gemeinde",
piptrade hat da `mal `ne Frage ! : habe einen erste kleinen EA erstellt, welcher sogar über einen frei einstellbaren Trade_Zone_Timer (intraday-Session-Zones) verfügt. Leider läuft der Timer immer nur für einen Tag und muss am nächsten Tag neu aktiviert werden, da er die 00:00 Uhr-Grenze nicht "überwindet". So der bisherige Code: Code:
//+------------------------------------------------------------------------+ //| TRADE_ZONE_TIMER | //+------------------------------------------------------------------------+ datetime Time_1_Begin, Time_1_End; datetime Time_2_Begin, Time_2_End; datetime Time_3_Begin, Time_3_End; //+------------------------------------------ void init() { Time_1_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_1_Begin); Time_1_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_1_End); Time_2_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_2_Begin); Time_2_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_2_End); Time_3_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_3_Begin); Time_3_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_3_End); } bool TradingTime() { if ((Time_1_Begin < Time_1_End && (TimeCurrent() < Time_1_Begin || TimeCurrent() >= Time_1_End)) && (Time_2_Begin < Time_2_End && (TimeCurrent() < Time_2_Begin || TimeCurrent() >= Time_2_End)) && (Time_3_Begin < Time_3_End && (TimeCurrent() < Time_3_Begin || TimeCurrent() >= Time_3_End))) return(false); return(true); } LG. piptrade |
|
|||
Das was in "void init()" steht musst du in OnTick() schreiben. Sonst wird immer das Datum verwendet an dem die Init Funktion aufgerufen wurde verwendet.
Code:
//Globale Variable datetime TagesStartZeit = 0; OnTick() { if (TagesStartZeit != iTime(MarketCurrent, PERIOD_D1, 0)) { //Zeiten Berechnen TagesStartZeit = iTime(MarketCurrent, PERIOD_D1, 0); } } ---Leopold--- |
|
|||
Hallo Leopold,
vorab herzlichen Dank für Deine Unterstützung. Die gegebenen Hinweise sind logisch sehr gut nachvollziehbar. Dennoch habe ich jetzt, - nach unzähligen Versuchen, Deine Hinweise umzusetzen, - erst einmal resigniert. --> 1. Versuch = error, 2. Versuch = error, 3. Vers. usw. usw.. Wat nu ??? Ich sollte ev. "void Tick()" zusätzlich deklarieren - ist das richtig ? - und wenn "Ja", wie mache ich das ? LG. piptrade PS.: Liebes "Helferlein", mach es mir nicht so schwer. |
|
|||
Hallo,
Wenn du einen EA erstellst hast du am Anfang immer folgende 3 Funktionen im Code: OnInit, OnDeinit und OnTick. ich bin davon ausgegangen, dass diese "init" Funktion in der "OnInit" Funktion steht. Diese musst du aber in die "OnTick" Funktion schreiben. Code:
datetime TagesStartZeit = 0; datetime Time_1_Begin, Time_1_End; datetime Time_2_Begin, Time_2_End; datetime Time_3_Begin, Time_3_End; int OnInit() { return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } OnTick() { if (TagesStartZeit != iTime(MarketCurrent, PERIOD_D1, 0)) { init(); TagesStartZeit = iTime(MarketCurrent, PERIOD_D1, 0); } if (TradingTime()) { ... } } ---Leopold--- |
|
|||
OhHa; OhHa; OhHa; - eine neue Antwort im "Kästchen" !
Lieber Leopold recht herzlichen Dank für Deine umgehende Rückmeldung und ein ganz, ganz liebes Dankeschön für Deine ausführliche Erläuterung. Eigentlich sollte es jetzt keine Probleme mehr geben. Werde den "Einbau" heute Abend vornehmen und - sollte sich kein weiterer error einstellen - die nächsten 2 Tage testen. Alles in Allem bin ich sehr zuversichtlich und werde mich in Kürze nochmals melden. Ganz LG. piptrade |
|
|||
Eine kleine Zwischennachricht an alle, die das Thema verfolgen:
Ganz so einfach ist es dann leider doch nicht ! Habe mich redlich gemüht, aber allein das "OnTick()" kann so wahrscheinlich nicht ganz funktionieren. Hier müßte sicher noch ein "int" oder ein "void" davor ? - Gleichzeitig kann bei Verwendung des "void" kein "return(0)" erfolgen ... usw. Ist das SO ? Als nächstes werde ich meine TimeZones mit einer TimeZone_4, welche über die 00:00 Uhr-Grenze hinausgeht, ergänzen; - vielleicht bringt das schon `was ? Vielleicht habt aber auch Ihr eine "zündende" Idee ? LG. piptrade |
|
|||
Zitat:
Code:
void OnTick() 2. Ja, eine Void-Funktion hat keinen Rückgabewert. Um die Funktion vorzeitig zu verlassen, schreib einfach nur Code:
return; // Also kein (0) ===>>> Also ohne einen Wert zurückzugeben. |
|
|||
In der Hoffnung, dass dies alles so einfach ist, bin ich natürlich Euren Hinweisen nachgekommen. Vorab schon `mal ein herzliches "Dankeschön" dafür.
Dennoch ergaben sich ( - wie ich "das Ding" auch "gedreht" habe - ) errors und warnings. Nunmehr hat der Timer nur noch 1 error und sieht wie folgt aus: Code:
bool TradingTime(); // <============ error: function must have a body datetime TagesStartZeit = 0; datetime Time_1_Begin, Time_1_End; datetime Time_2_Begin, Time_2_End; datetime Time_3_Begin, Time_3_End; //+--- int OnInit() { Time_1_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_1_Begin); Time_1_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_1_End); Time_2_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_2_Begin); Time_2_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_2_End); Time_3_Begin = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_3_Begin); Time_3_End = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TradeZone_3_End); return(INIT_SUCCEEDED); } //+--- void OnDeinit(const int reason) { } //+--- void OnTick() { if (TagesStartZeit != iTime(NULL, PERIOD_D1, 0)) // Änderg.: MarketCurrent ---> NULL = ok. { // init(); // mußte deaktiviert werden ! = ok. TagesStartZeit = iTime(NULL, PERIOD_D1, 0); // Änderg.: MarketCurrent ---> NULL = ok. if (TradingTime()) { if ((Time_1_Begin < Time_1_End && (TimeCurrent() < Time_1_Begin || TimeCurrent() >= Time_1_End)) && (Time_2_Begin < Time_2_End && (TimeCurrent() < Time_2_Begin || TimeCurrent() >= Time_2_End)) && (Time_3_Begin < Time_3_End && (TimeCurrent() < Time_3_Begin || TimeCurrent() >= Time_3_End))) return; // Änderg.: (false) gestrichen -----> wird diese Aussage denn nicht gebraucht ? return; // Änderg.: (true) gestrichen -----> wird diese Aussage denn nicht gebraucht ? } } //+--- int start() { //+--------------------------------- // get market parameter //+--------------------------------- //--- Überprüfen, ob TradingZones geöffnet sind if (TradingTime() == false) { //+---------------------------------- // EntryConditions //+---------------------------------- //--- usw. Oder liegt der Fehler ev. ganz wo anders ? Ich würde mich riesig freuen, wenn Ihr Euch den Code nochmals genauer anseht und mir mit Eurer Hilfe zur Seite steht. Ganz LG. piptrade |
|
|||
Hallo,
wenn ich mir deinen Code so ansehe würde ich dir vorschlagen einmal die Grundlagen zu lernen um solche Programme erstellen zu können. Ich habe mit folgenden Tutorial begonnen:Expert Advisor erstellen ,Tutorials in Deutsch Dieses Tutorial hat mir sehr geholfen. ---Leopold--- |
|
|||
Hallo Leopold,
herzlichen Dank für Deinen Link; - hab´ ihn mir angesehen ! Scheint alles recht gut und sehr fundiert zu sein. Allerdings sind 299,- Euro auch kein Pappenstiel ! - Und bis ich mir dies leisten kann, bin ich vorerst auf Deine oder die Hilfe anderer user angewiesen. Nebenbei bemerkt: Tatsache ist, dass mir unumstritten wirklich wichtige Grundlagen fehlen, die ich schnellst möglich erlernen muss. Tatsache ist aber auch, dass ich bereits aus Forenbeiträgen oder YouTube-Reihen wichtige Erkenntnisse ziehen und einen ersten "kleinen EA" schreiben konnte. Und zwar mit einem flexiblen MoneyManagement, modularen EntryConditions, den unterschiedlichsten SL- TP- und sonstigen EXIT-Szenarien und einem Timer, der auf die Minute genau, - aber eben nicht über die 00:00 Uhr-Grenze hinweg -, funktioniert ! Und gerade zum Überwinden dieses kleinen Mankos, - das automatische Überwinden der 00:00 Uhr-Grenze -, brauchte ich Eure Hilfe. Eine Hilfestellung, aus der ich letztendlich auch wieder etwas lernen könnte; - eine wirkliche Unterstützung, die mich wieder ein Stück weiter bringt. In diesem Sinne wäre ich sehr dankbar, solltet Ihr mir weiterhin zur Seite stehen. LG. piptrade |
Lesezeichen |
Stichworte |
handelszeiten, mql4, programmierung, programmierung metatrader, programmierung mql4, timer, tradezone, tradezonetimer, trade_zone_timer |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|