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)
-   -   Zeitrechnung über Tageswechsel (http://www.expert-advisor.com/forum/showthread.php?t=5807)

icepick1661 06.08.17 21:29

Zeitrechnung über Tageswechsel
 
Hallo,

wieder was, das ich nicht hinkriege:

Abends werden Pending Orders gelöscht - morgens sollen sie zum Handelsstart bzw. kurz danach wieder gesetzt werden.

Mit dem angehängten Code funktioniert es intraday prächtig, sobald aber um 22:50 verkauft werden soll vund es am nächsten Tag 01:08 Uhr weitergehen soll, geht's schief.

Bei den Intraday-Tests habe ich den EA ohne die "CurrentDay"-Zeile laufen lassen (funktionierte ja...), sie dann zugefügt, als es nicht lief. Ich hab's auch mit einem Sekundenwert und "TIME_SECONDS" probiert.

Hier der Code:

Code:

  static bool CloseEndOfDay = false;
  static bool OpenStartDay = false;
  static bool SellStopBought = true;
  bool  OpenStartDayPeriod = false;
  bool  EndOfDay;
  string  DayChange;
  string  CurrentTime;

      {
      CurrentTime = TimeToStr (TimeCurrent(), TIME_MINUTES);
      DayChange = TimeToStr (TimeCurrent() + MinutesToNextDay, TIME_MINUTES); //Minute-Wert: 143; auch Sekunden gehen schief
      }

      if (CurrentTime >= FinishTime && CurrentTime < StartTime) //&& CurrentTime < EndStartTimePeriod)
      EndOfDay = true;
      if (EndOfDay) CloseEndOfDay=true;
      if (!EndOfDay) CloseEndOfDay=false;
     
      if (CurrentTime > DayChange && CurrentTime > StartTime && SellStopBought == false) OpenStartDayPeriod = true;
      if (OpenStartDayPeriod) OpenStartDay = true;
      if (!OpenStartDayPeriod) OpenStartDay = false;

Wieder mal Danke für eure Hilfe!

traderdoc 06.08.17 22:09

Wo ist das Problem?
Du löschst die PendingOrder entweder über mit dem Setzen gelieferte Expiration
Time oder per festgelegte Zeit.
Und am nächsten Tag wird die Order um 01:08 wieder gesetzt.

traderdoc

icepick1661 06.08.17 23:47

Danke, traderdoc, für deine beiden Antworten. Ich werd's dann über die Expiration Time lösen. Wobei ich dachte, die "festgelegte Zeit" sei das, was ich da ausprobiert hab...

icepick1661 07.08.17 07:54

Zitat:

Zitat von traderdoc (Beitrag 39510)
Wo ist das Problem?
Du löschst die PendingOrder entweder über mit dem Setzen gelieferte Expiration
Time oder per festgelegte Zeit.
Und am nächsten Tag wird die Order um 01:08 wieder gesetzt.

traderdoc

EDIT
Habe das Problem selbst gelöst. "Time" IST die Variable, habe es durch "[individueller Variablename]" ersetzt, Warnung ist weg.
EDIT ENDE

Hallo, wenn ich für das Löschen mit der Expiration Time den nachfolgenden Code (hab ich ja von dir bzw. Leopold in einem anderen Thema gefunden) zufüge, kommt "declaration of 'time' hides predefined variable".

Was das bedeuted habe ich gefunden (vordefiniertes Array OpenTimes). Läßt sich das aber umgehen?

Danke.

Code:

datetime Time = StringToTime(
                        (string)TimeYear(Time[0])
                        +"."+
                        (string)TimeMonth(Time[0])
                        +"."+
                        (string)TimeDay(Time[0])
                        +"."+FinishTime);


traderdoc 07.08.17 21:13

Ne, streng übersetzt heißt die Fehlermeldung: "Deklaration von 'time' verdeckt
die predefinierte Variable" und hätte mit einem evtl. Array OpenTime überhaupt nichts zu tun.

Weil Time eine predefinierte Variable ist, solltest Du die einfach umbenennen.

traderdoc

icepick1661 07.08.17 23:35

Zitat:

Zitat von traderdoc (Beitrag 39520)
Ne, streng übersetzt heißt die Fehlermeldung: "Deklaration von 'time' verdeckt
die predefinierte Variable" und hätte mit einem evtl. Array OpenTime überhaupt nichts zu tun.

Weil Time eine predefinierte Variable ist, solltest Du die einfach umbenennen.

traderdoc

Danke, naja, ich hab's ja gelöst indem ich den Variablennamen Time nicht verwendet habe. Ob ich jetzt Time umbenenne um es selbst zu verwenden oder Time stehenlasse und einen eigenen Namen verwende, dürfte ja egal sein - es funktioniert ja ohne Warnung oder Fehler.


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:52 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