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)
-   -   Trade_Zone_Timer (http://www.expert-advisor.com/forum/showthread.php?t=5769)

piptrade 21.07.17 16:08

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);

}

Welche Ergänzung müßte ich vornehmen, dass der EA die Trade_Zones auch am nächsten Tag wieder berücksichtigt ? Wäre für Eure Hilfestellung sehr dankbar.
LG. piptrade

Leopold 21.07.17 16:24

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);
      }
  }

Wenn du deine "Initialisierung" dort hinein schreibst werden die Funktionen immer beim 1. Tick am Tag ausgeführt.

---Leopold---

piptrade 21.07.17 22:31

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.

Leopold 21.07.17 22:48

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())
      {
      ...
      }
  }

Ich hoffe damit ist es klarer.

---Leopold---

piptrade 23.07.17 10:27

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 :)

piptrade 26.07.17 19:24

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

next user 27.07.17 05:42

Zitat:

Zitat von piptrade (Beitrag 39312)
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.

1. Bei der Erstellung wird unter anderem die Funktion
Code:

void OnTick()
erstellt, also kein "int". Da hat Leopold den Funktionstyp in seinem Code vergessen.

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.
Zitat:

Zitat von piptrade (Beitrag 39312)
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 ?

Kannst es doch so machen, wie Leopold dir vorgeschlagen hat.

piptrade 28.07.17 11:16

Zitat:

Zitat von next user (Beitrag 39319)
Kannst es doch so machen, wie Leopold dir vorgeschlagen hat.

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.

Wie kann ich den error beheben ? - dem Ausdruck einen Körper geben ?
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

Leopold 28.07.17 11:51

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---

piptrade 28.07.17 12:47

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

traderdoc 28.07.17 15:01

Was soll denn genau in der Funktion TradingTime() berechnet werden? Und das schreibst Du halt in geschweifte Klammern.

bool TradingTime() {
...
}

Und an der Stelle, wo die Funktion die Berechnung ausführen soll steht, steht dann:

TradingTime();

Ggf. in einer if-Abfrage oder alleinig und mit zugewiesenem Rückgabewert über

bool result = TradingTime();

traderdoc

next user 28.07.17 17:24

Zitat:

Zitat von traderdoc (Beitrag 39341)
Was soll denn genau in der Funktion TradingTime() berechnet werden?

Das, was er in seinem ersten Post im Code stehen hat.
Zitat:

Zitat von piptrade (Beitrag 39254)
Code:

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);

}


Zitat:

Zitat von piptrade (Beitrag 39336)
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.

Oder du versuchst es dir selber anzueignen mit den freien Sachen, die man im Netz so findet und der MQL-Doku.
Mit ein bischen Motivation solltest du es einigermaßen hinbekommen.

================================================== ===

Gehen wir das ganze mal kurz von vorne durch:
Zitat:

Zitat von piptrade (Beitrag 39254)
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);

}


1. Die Funktion "void init()" ist zu Kompatibilitätszwecken noch vorhanden, sollte aber jetzt durch "void OnInit()" ersetzt werden.
2. Hier ist ja die gemeinte TradingTime() zu sehen.

Zitat:

Zitat von Leopold (Beitrag 39257)
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 hat hier die Funktion "init()" als deine Funktion gesehen, welche aber eine spezielle MQL-Funktion ist, die durch "OnInit()" ersetzt wurde.
"init()" ist wegen Kompatibilität aber nach wie vor noch im "MQL-Wortschatz", weshalb eine eigene Funktion nicht mit diesem Namen erstellt werden sollte.
Jetzt weiss ich nicht, ob du das wusstest piptrade, oder ob du "init()" wirklich als eigene Funktion deklariert hast.

Der Code von Leopold ist ja das, was du möchtest.
Der erste If-Block in der OnTick()-Funktion testet die Zeit und reagiert darauf, der zweite If-Block verarbeitet deinen Code, wenn TradingTime() TRUE liefert.

Jetz kommen wir mal zu deinem zweiten Code:
Zitat:

Zitat von piptrade (Beitrag 39334)
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.


1. Die Funktion "TraidingTime()", welche du in deinem ersten Code hier
Zitat:

Zitat von piptrade (Beitrag 39254)
Code:

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);

}


erstellt hast, kannst du jetzt nicht einfach löschen. Daher sagt dir der Error, das die Funktion "TradingTime()" keinen Körper hat, sie tut also nichts.
Das mit OnInit() ist soweit verstanden worden, denke ich.

Bezüglich OnTick()
  • // Änderg.: MarketCurrent ---> NULL = ok. ==>> Jap, ist richtig. NULL nimmt das aktuelle Symbol
  • init(); // mußte deaktiviert werden ! = ok. ==>> Musste deaktiviert werden, da es zum einen keine solche Funktion im Code gibt, es zum anderen eine spezielle MQL-Funktion ist.

  • Code:

    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 ?
    }

    Hier machst du jetzt etwas kommplett sinnloses.
    Du nimmst hier den Code von deiner früheren, erstellten Funktion "TradingTime()" und verarbeitest ihn, wenn deine neue, leere Funktion "TradingTime()" TRUE liefert.
    Das ist falsch.

  • Code:

    //--- Überprüfen, ob TradingZones geöffnet sind
    if (TradingTime() == false)

    1. Diese Überprüfung machst du in der Funktion "OnTick()" (nicht, wie bei dir, noch zusätzlich in "start()").
    2. Ein EA hat die Funktion "OnTick()". Er braucht keine Funktion "start()". Diese ist veraltet und ist außerdem das "gleiche" wie OnTick().

Dein Code müsste jetzt in etwa so aussehen:
Code:

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 true;
     
  return false; 
}

datetime TagesStartZeit = 0;
datetime Time_1_Begin, Time_1_End;
datetime Time_2_Begin, Time_2_End;
datetime Time_3_Begin, Time_3_End;

void DeineFunktion()
{
  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);
}

int OnInit()
{
}
 
void OnDeinit(const int reason)
{
}

void OnTick()
{
  if(TagesStartZeit != iTime(NULL, PERIOD_D1, 0))
  {
      DeineFunktion(); // Nur nach Bedingung initialisieren.
      TagesStartZeit = iTime(NULL, PERIOD_D1, 0);
  }
 
  if(TradingTime())
  {
      // Code der ausgeführt werden soll, wenn TradingTime() TRUE liefert...
  }
}


* Veraltet: init(), start() ect...
* Updated: OnInit(), OnTick() ect...

PS: Die Funktion "OnInit()" kannst du sowohl mit void, als auch mit int nutzen...

traderdoc 28.07.17 17:38

Fleißig, fleißig, @next_user.

traderdoc

next user 28.07.17 17:43

Zitat:

Zitat von traderdoc (Beitrag 39351)
Fleißig, fleißig, @next_user.

traderdoc

Hi Doc,
hasste beim Überfliegen Fehler gefunden :)

traderdoc 28.07.17 17:47

Ich habe gerade kein Flugzeug!

traderdoc

next user 28.07.17 17:58

Hey, wenn du dir die blauen Blöcke wegdenkst, sind es nur paar Zeilen.
Aber naja, so wie das Wetter grad wieder aussieht, wäre fliegen auch nicht so perfekt entspannt...

piptrade 28.07.17 21:23

Next User, - Deine Ausführungen sind der absolute Wahnsinn ! - Vorab schon einmal ein "Dickes Danke !
Und, - ich kann es kaum glauben, - auch traderdoc hat sich eingefunden und die ersten guten Hinweise geliefert ! - Auch hier ein "Dankeschön"!

Da Ihr Euch in den letzten Stunden förmlich die "Klinke" gegenseitig gereicht und Euch selbst übertroffen habt, ist es nun an mir, die ganze "Schoße" nachzuvollziehen. Eine Aufgabe, der ich schon jetzt mit optimismusgeladener Spannung entgegensehe. Werde dieses Märthyrium am WE in Angriff nehmen und hoffe, dass Ihr mich ab Mo./Di. dann auch wieder zu Worte kommen lasst.

Also, erst einmal "tausend Dank" ! Ich melde mich so schnell, wie möglich und hoffe, dann nur Gutes berichten zu können. Fakt ist aber jetzt schon Eines: Jede einzelne Info bringt mich bestimmt ein gutes Stück voran.

Thanks and LG. piptrade

traderdoc 28.07.17 21:32

Zitat:

Zitat von piptrade (Beitrag 39363)
Und, - ich kann es kaum glauben, - auch traderdoc hat sich eingefunden und die ersten guten Hinweise geliefert ! - Auch hier ein "Dankeschön"!

Nun ja, sei mir ein wenig Urlaub auch gegönnt, um mich von Euren vielen Fragen etwas zu erholen.

traderdoc

piptrade 28.07.17 23:10

Hallo traderdoc, trotz Urlaubs bist Du aktiv ! - Respekt !
... und vielen Dank für Deine Hinweise !

Dank Deiner ganz persönlichen Hilfestellungen konnte ich vor einem halben Jahr das gegebene kleine TimerModul fertigstellen - nochmals "Danke" dafür ! ; - somit habe ich die kleine Hoffnung, dass Du mir abschließend auch hilfst, die 00:00 Uhr-Grenze automatisch zu überschreiten. Das wäre dann die Perfektion ! - Soweit mein erstes Anliegen.

Zum Zweiten: Wenn ich auch jetzt noch an "den letzten Zügen" bei der Fertigstellung des EA arbeite, er ist fast fertiggestellt !!! ; - zumindest in seiner Funktionalität ! Die Optimierungen jedoch kann nur ein Profi bewerkstelligen ! - Könntest Du einen solchen Part, - den der Optimierung, - ggf. übernehmen ?

Soweit ein Ruf an traderdoc und an die Allgemeinheit, - eben `mal so zwischendurch !

......... Und bis gleich ( oder bis demnächst ) Euer piptrade

piptrade 31.07.17 13:55

piptrade hat eine recht simple Lösung gefunden! Eine Lösung, die ggf. nicht im Sinne der Programmiersprache ist; - dennoch eine Lösung, die tatsächlich funktioniert und mir viel, viel Arbeit erspart!

Wer den Forenbeitrag begleitet hat, wird sich erinnern, dass in meinem ersten post der Ursprungs-Code mitgeliefert wurde.
In diesem Code sind die Handelszeiten, in denen nicht gehandelt werden soll, aneinandergereiht und geben den Wert "false" zurück. Hier wurden die Start-Zeiten immer kleiner den End-Zeiten gesetzt.
Wenn jetzt die letzte Zeile "Time_3_Begin < Time_3_End ... kopiert, mit "&&" zusätzlich angereiht und lediglich in seiner Ausrichtung (hier also Begin > End verdreht) wird, ist das erwünschte Ziel schon erreicht.
Keine zusätzlichen Deklarationen, keinen zusätzlichen Initialisierungen, kein zusätzliches "Dies und Das"; - einfach simpel eben !

Dennoch bin ich gegenüber allen Hinweisen sehr, sehr dankbar, da Sie mir auf dem "Weg der Erkenntnis" einiges Neue beschert und dazu beigetragen haben, eigene Fehler zu erkennen. So habe ich das gesamten Forenthema kopiert und meinem keinen "Wissensspeicher" hinzugefügt.

In diesem Sinne nochmals ein ganz herzliches DANKE, an alle, die mir zur Seite gestanden haben.

LG. Euere piptrade

piptrade 02.08.17 21:54

DER ABSCHLISSENDE NACHTRAG ! ---> Siehe nächste Seite !

next user 02.08.17 22:00

Nächste Seite noch nicht da...

piptrade 02.08.17 22:26

Leider ist es nicht immer so, wie es scheint ! Meine Zuversicht, den "Stein der Weisen" schon gefunden zu haben, löste sich am 3. Tag vollends auf und ich war genau so weit, wie zuvor !!!! Sorry, dass ich schon zum "Abmarsch" "geblasen" hatte.

Geplagt von diesen Dilemma habe ich natürlich versucht, doch noch eine gangbare Lösung zu finden. Und siehe da: Ich habe sie gefunden !!!

Und das nicht in all den Disskusionen, unzähligen Vorschlägen , ... und, und, und, ... sondern im allerersten Beitrag, den "leopold" verfasst hat ! Leopold ! _ herzlichen, ehrlich gemeinten Dank dafür. Simpel - ok. - aber wesentlich !!!! und funktionierend !!!! Thanks !!!

Ein einfaches Problem, welches sich letztendlich auch einfach klären lässt. _ DANKE dafür !
und natürlich die LG.

Euer piptrade

next user 02.08.17 22:49

Du wurdest doch mehrmals, unter anderem auch von mir nochmal darauf hingewiesen, einfach Leopolds Vorschlag anzuwenden.

Aber gut, hast es immerhin jetzt geschafft...

piptrade 03.08.17 10:02

Zitat:

Das was in "void init()" steht, musst du in OnTick() schreiben. Sonst wird immer das Datum verwendet an dem die Init Funktion aufgerufen wurde.
Damit sich niemand vernachlässigt fühlt und alle User, die das Thema lediglich begleitet haben, eine nachvollziehbare Lösungserklärung bekommen, - ist das für mich entscheidende Zitat oben nochmals angeführt.

Nicht eine Zeile neuen Codes, keine neuen Inhalte, keine neuen Klammern oder "if`s", - einfach nur die veränderte Anordnung eines einzigen Blocks brachte den erwünschten Erfolg ! (Viel deutlicher möchte ich aber dann doch nicht werden, da jeder wenigstens einen kleinen Denkaufwand leisten sollte. Wem das nicht gelingt, kann mich ja direkt kontaktieren.)

Seit ca. einer Stunde kann ich das im StrategyTester getestete "Modul" auch real im MT4 nachverfolgen ! Und siehe da, das Ding, das läft !

Und abschließend: "SO", wie ich mir das obige Zitat immer wieder auf der "Zunge zergehen" ließ, genauso habe ich versucht die weiteren Erläuterungen von Leopold, aber natürlich auch die von NextUser und Traderdoc, zu beleuchten.
Wenn man halbwegs versteht, was da zum Besten gegeben wurde - kann man allen 3 Helfern nur danken !!!

Somit ein "Dickes Dankeschön" an alle, die mich aktiv ünterstützten und ein ebensolches Dankeschön an alle interessierten User, die das Thema beleiteten ! THANKS !

... und ganz LG. piptrade


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