Einzelnen Beitrag anzeigen
  #12 (permalink)  
Alt 28.07.17
next user next user ist offline
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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 anzeigen
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 anzeigen
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 anzeigen
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 anzeigen
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 anzeigen
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 anzeigen
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...

Geändert von next user (28.07.17 um 17:38 Uhr)