Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Erste Kerze des Tages (http://www.expert-advisor.com/forum/showthread.php?t=6453)

Max2018 04.07.19 13:21

Erste Kerze des Tages
 
Hallo,
wie finde ich genau die erste Kerze des Tages ?
Warum? Ich will genau beim ersten Tick eines Tages alte Objekte löschen , dazu brauche ich aber die erste Kerze eines Tages.
Da der EA aber auf unterschiedliche Zeiteinheiten, unterschiedlichen Märkten und Situatuonen angewendet werden soll, ist dies eben unterschiedlich.
Ich brauche also immer die erste Kerze des Tages im eingestellten Markt und in der eingestellten Zeiteinheit!

Leopold 04.07.19 14:07

Hallo,

mach das einfach immer dann wenn eine neue Tageskerze beginnt. Ich mach das so.

---Leopold---

Max2018 04.07.19 14:18

Ja und wie ermittel ich die?:confused:

Max2018 04.07.19 14:56

Das geht NICHT
Code:

TimeCurrent() == iTime(NULL,1440,0)
und das auch nicht
Code:

TimeCurrent() == iTime(NULL,PERIOD_D1,0)

Leopold 04.07.19 15:21

Irgendwo gibt es ein Thema zum Ausführen bei neuer Kerze. Schau mal ob du es findest. Sonst schreib ich dir das am Abend zusammen.


---Leopold---

Max2018 04.07.19 17:12

Hallo,
habe leider nur das gefunden:
http://www.expert-advisor.com/forum/...ropentime.html

Aber das ist es wohl nicht :(:confused:

Leopold 04.07.19 19:58

Doch,

nur statt Time[0] nimmst du halt "iTime(NULL,PERIOD_D1,0)".

---Leopold---

Max2018 04.07.19 21:10

Ja, das habe ich ja probiert - ging aber nicht
Code:

TimeCurrent() == iTime(NULL,PERIOD_D1,0)

Leopold 04.07.19 21:15

Das steht dort aber nicht.

Max2018 05.07.19 00:23

Ich steh auf dem Schlauch...
Code:

if (TimeCurrent() == "iTime(NULL,PERIOD_D1,0)")
das geht auch nicht :confused:

Leopold 05.07.19 09:55

Du bist ganz schön begriffsstützig.

Code:

datetime TimeCandle = 0;

if (TimeCandle != iTime(NULL,PERIOD_D1,0))
  {
  ....
  TimeCandle = iTime(NULL,PERIOD_D1,0);
  }


Bobs 05.07.19 11:26

Das könnte so sein:
Code:

if(TimeDayOfWeek(Time[1])!=TimeDayOfWeek(Time[0]))FirstBar=true;
if(Volume[0]==1)FirstTick=true;


Leopold 05.07.19 13:33

Zitat:

Zitat von Bobs (Beitrag 42581)
Das könnte so sein:
Code:

if(TimeDayOfWeek(Time[1])!=TimeDayOfWeek(Time[0]))FirstBar=true;
if(Volume[0]==1)FirstTick=true;


Und was ist wenn du den EA während des Tages startest? Dann würde das nicht ausgeführt.

---Leopold---

Bobs 05.07.19 15:07

Ja, richtig, unter Tage wird nichts.
Die Frage war doch: "wie finde ich genau die erste Kerze des Tages ?
Ich will genau beim ersten Tick eines Tages alte Objekte löschen, dazu brauche ich aber die erste Kerze eines Tages."
Das Problem ist, dass Funktion iTime() auf D1,W1,MN gibt immer 00:00:00.
Mit Volume[] kann es auch eine Nuance geben, manchmal kann der erste Tick sofort "2" geben. Das kann man auch einfach lösen, wenn vorherige und letzte Werte vergleichen (v_Volume < l_Volume, sonst ist erster Tick.

Leopold 06.07.19 01:32

Zitat:

Zitat von Bobs (Beitrag 42583)
Ja, richtig, unter Tage wird nichts.
Die Frage war doch: "wie finde ich genau die erste Kerze des Tages ?
Ich will genau beim ersten Tick eines Tages alte Objekte löschen, dazu brauche ich aber die erste Kerze eines Tages."

Aber genau das macht dein Beispiel auch nicht.


if(TimeDayOfWeek(Time[1])!=TimeDayOfWeek(Time[0]))FirstBar=true

Hier wird der Code bei jedem Tick die ganze Periode ausgeführt, nicht nur beim ersten.


if(Volume[0]==1)FirstTick=true

Hier wird der Code am Anfang jeder Periode ausgeführt und nicht nur beim ersten Tick des Tages.



Bei meinen Beispiel könnte man den Code so erweitern, dass alles was z. B. nur einmal am Tag ausgeführt werde soll dort rein kommt. Und wenn es immer am Anfang des Tages ausgeführt werden soll, dann meistens auch beim Laden des EA's.

---Leopold---

Raul0 06.07.19 15:54

Zitat:

Zitat von Max2018 (Beitrag 42570)
Hallo,
wie finde ich genau die erste Kerze des Tages ?
Warum? Ich will genau beim ersten Tick eines Tages alte Objekte löschen , dazu brauche ich aber die erste Kerze eines Tages.
Da der EA aber auf unterschiedliche Zeiteinheiten, unterschiedlichen Märkten und Situatuonen angewendet werden soll, ist dies eben unterschiedlich.
Ich brauche also immer die erste Kerze des Tages im eingestellten Markt und in der eingestellten Zeiteinheit!


Ich habe einen Bereich im EA, dort sind alle Einmaldurchläufe hinterlegt. Du kannst es auch als Funktion hinterlegen, hier mal einfach:

static int Tag;
if ( Day() != Tag ) // immer wenn ein neuer Tag mit dem ersten Tick beginnt
{

zu tun...

Tag = Day(); // Übergabe des aktuellen Tages
}

Bobs 07.07.19 04:49

Zitat:

Zitat von Leopold (Beitrag 42584)
Aber genau das macht dein Beispiel auch nicht.
if(TimeDayOfWeek(Time[1])!=TimeDayOfWeek(Time[0]))FirstBar=true
Hier wird der Code bei jedem Tick die ganze Periode ausgeführt, nicht nur beim ersten.
if(Volume[0]==1)FirstTick=true
Hier wird der Code am Anfang jeder Periode ausgeführt und nicht nur beim ersten Tick des Tages.

Ich meinte, muss es insgesamt so aussehen:
Code:

bool FirstBar=false, FirstTick=false;
if(TimeDayOfWeek(Time[1])!=TimeDayOfWeek(Time[0]))FirstBar=true; // Das kontrolliert bei jedem Tick den Tageswechsel
if(FirstBar==true && Volume[0]==1)FirstTick=true; // Bedeutet den ersten Tick des Tages
if(FirstTick==true){...} // Weiter wird gewünschte Code

Selbstverständlich, Time/Volume[] auf M1-H4 zulässig ist. Andernfalls muss iTime/iVolume() angewendet werden.


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:54 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum