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: 43251
Benutzer: 7.220
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 4 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 03.06.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard Jeden Tag um 9 Uhr einen Trade öffnen - programmiertechnisch wie umsetzen?

Hallo,

ich arbeite zu Übungszwecken derzeit an der Umsetzung eins ganz einfachen EA. Der EA soll erstmal nicht viel mehr machen als jeden morgen um 9 Uhr einen Trade zu öffnen.

So weit, so einfach.

Die Uhrzeit frage ich so ab:

Code:
Uhrzeit = TimeHour(TimeCurrent())
Demnach bekomme ich jedesmal wenn zwischen 9:00 Uhr und 09:59 Uhr die o.g. Codezeile abläuft, als Wert für "Uhrzeit" den Wert 9.

Jetzt ist es aber so:

Die o.g. Funktion läuft jedes mal ab, wenn es einen neuen Tick gibt (vermute ich jedenfalls). Der Zeitpunkt, wann der nächste Tick auftritt, ist dabei jedoch offen. Das heißt, der erste Tick ab 9:00:00 kann genau um 9:00:00 auftreten, jedoch auch um 9:00:01, um 9:00:18, um 9:13:00 , um 9:27:01 usw. usf.

Allerdings soll jeweils nur für den ersten Tick ab 9:00:00 ein Trade eröffnet werden, nicht stumpf für jeden Trade, der zwischen 9:00:00 und 09:59:59 auftritt.

---

Meine Frage ist also:

Wie bewerkstellige ich es am besten, dass jeweils nur der erste Tick ab 9:00:00 Uhr zur Eröffnung eines Trades führt, jeder weitere Tick jedoch nicht?

Ich habe bereits eine Idee zur Umsetzung. Würde mich aber mal interessieren, wie andere über meine Idee denken. Oder vielleicht ist meine Idee ja unsinnig, und es gibt noch bessere Möglichkeiten oder andere Konventionen.

Also, meine Idee ist diese:

Ich verwende eine binäre Flag-Variable. um 8:59:59 ist der Wert dieser Flag-Variablen zunächst Null. Sobald ein Trade eröffnet wird, wird der Wert der Trade Variablen auf 1 gesetzt. Ein neuer Trade wird jedoch nur dann eröffnet, wenn der Wert der Flag-Variablen 0 beträgt. Beträgt der Wert der Flag-Variablen 1, wird kein weiterer Trade eröffnet. So wir verhindert, dass zwischen 9:00:00 und 09:59:59 mehr als ein Trade eröffnet wird.

Die Flag-Variable muss dann nach Ablauf der "heißen" Stunde (die heiße Stunde liegt zwischen 09:00:00 und 09:59:59 Uhr) wieder auf 0 gesetzt werden, dass am nächsten Tag wieder ein neuer Trade eröffnet werden kann. Z.B. könnte ich mir vorstellen, dass ab 10:00 geprüft wird, ob die Flag-Variable auf Null steht, und wenn das nicht der Fall ist, diese auf 0 gesetzt wird.

In Pseudocode ausgedrückt also etwa so:

Code:
if (Uhrzeit >= 10:00 Uhr) 
     if (Flagvariable = 1)
     then (Flagvariable = 0),
else (Mache nichts)
Der Nachteil der o.g. Methode (ab 10 Uhr bei jedem Tick prüfen ob die Flag-Variable den Wert 0 hat) ist halt, dass bei jedem Tick Rechenzeit für eine in den meisten Fällen obsolete If-Anweisung "verbraten" wird.

Am besten wäre es, die Flagvariable wird einfach um 10 Uhr wieder auf Null gesetzt. Allerdings ginge das nur, ich den folgenden Pseudocode um 10:00 Uhr fix durchführen könnte (also jeden Tag haargenau um jeweils 10:00 Uhr), unabhängig davon, ob gerade ein Tick auftritt oder nicht:

Code:
if (Uhrzeit = 10 Uhr) Flagvariable = 0.
Gibt es dafür eine Möglichkeit, die Prüfung der Uhrzeit im EA so umzusetzen, dass die Prüfung der Uhrzeit unabhängig davon erfolgt, ob gerade ein Tick auftritt oder nicht?


Wenn das ginge, bräuchte ich allerdings vielleicht gar keine Flag-Variable mehr, da ich dann ja genausogut um 9 Uhr fix einen Trade öffnen kann, unabhängig vom auftreten eines Ticks, fällt mir gerade ein.

Vielleicht gibt es aber auch nochmal ganz andere oder sogar bessere Möglichkeiten, die ich derzeit noch gar nicht kenne?


Ich freue mich über jeden konstruktiven Hinweis!

Grüße,
LQK
  #2 (permalink)  
Alt 03.06.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
if (!Flag && Uhrzeit >= 10:00 Uhr) {
   //Action!
   Flag = true;
}
Wenn der Tageswechsel stattfand, wird wieder

Flag = false;

gesetzt.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 04.06.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Code:
if (!Flag && Uhrzeit >= 10:00 Uhr) {
   //Action!
   Flag = true;
}
Wenn der Tageswechsel stattfand, wird wieder

Flag = false;

gesetzt.

traderdoc
Danke für diese kurze und pointierte Antwort!

Also, in Pseudocode ausgedrückt:

Code:
if (neuertaghatangefangen = true) FlagVariable = 0;
Aber woher beziehe ich dann die Information, dass ein neuer Tag angefangen hat?

Oder kurz ausgedrückt: Woher bekomme ich neuertaghatangefangen?



Beste Grüße,
LQK
  #4 (permalink)  
Alt 04.06.20
LQK LQK ist offline
Mitglied
 
Registriert seit: Nov 2019
Beiträge: 76
LQK befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Code:
if (!Flag && Uhrzeit >= 10:00 Uhr) {
   //Action!
   Flag = true;
}
Wenn der Tageswechsel stattfand, wird wieder

Flag = false;

gesetzt.

traderdoc

Ich Trottel. Mit dem posten dieses Code-Schnippsels hast Du mir ja bereits eine (weitere) Lösung gepostet. Hatte das beim ersten Lesen nur übersehen, da ich nicht richtig hingeschaut hatte und dachte, Du hättest mich nur rezitiert. Stattdessen hast Du mir ja eine Lösung auf dem Silbertablett serviert! Besten Dank, dafür!

Die Lösung ist ähnlich wie die erste von mir in Pseudocode verwendete Lösung. Du hast es mit einer if-Anweisung gemacht und mit einer && Verknüpfung, ich mit zwei if-Anweisungen. Ich denke mal, im Rechenaufwand nehmen sich die beiden Lösungen nicht viel. Auf jeden Fall sind zwei Rechenoperationen erforderlich (zwei mal if oder einmal if und &&).

Dachte gar nicht daran, dass man es auch mit && lösen kann, anstelle mit zwei if-Anweisungen. Wobei mir die Lösung mit && (also die von Dir gepostete Lösung) besser gefällt als meine, Verschachtelung von mehreren if-Anweisungen mag ich eigentlich nicht so besonders.

Eine weitere Interessante Info die ich aus Deinem Beitrag ableite, ist dass ich offenbar nicht völlig unsinnig in die falsche Richtung gedacht habe, was für mich schon mal eine sehr erfreuliche Nachricht ist und mir zeigt, dass ich manchmal anscheinend auf dem richtigen Weg bin!

Besten Dank noch mal und Grüße,
LQK
  #5 (permalink)  
Alt 04.06.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

So wie bei jedem Kerzenwechsel das gemacht wird ist das auch hier:

Z.B.

if (DayOld != DayOfYear()) {
Flag = false;
DayOld = DayOfYear();
}

Fertig!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
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 02:35 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.
-----------------------------------------------------------------------------------------------------------------------------