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: 4972
Beiträge: 43246
Benutzer: 7.216
Aktive Benutzer: 84
Links: 84
Wir begrüßen unseren neuesten Benutzer: bb1107
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Tagen
- bb1107
vor einer Woche
- rg-trader
vor 2 Wochen
- toshistyle
vor 2 Wochen
- Robin
vor 3 Wochen
- mMmaanu

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 28.07.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #12 (permalink)  
Alt 28.07.17
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)
  #13 (permalink)  
Alt 28.07.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Fleißig, fleißig, @next_user.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #14 (permalink)  
Alt 28.07.17
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Fleißig, fleißig, @next_user.

traderdoc
Hi Doc,
hasste beim Überfliegen Fehler gefunden
  #15 (permalink)  
Alt 28.07.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ich habe gerade kein Flugzeug!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #16 (permalink)  
Alt 28.07.17
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

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...
  #17 (permalink)  
Alt 28.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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
  #18 (permalink)  
Alt 28.07.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von piptrade Beitrag anzeigen
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #19 (permalink)  
Alt 28.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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
  #20 (permalink)  
Alt 31.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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

Lesezeichen

Stichworte
handelszeiten, mql4, programmierung, programmierung metatrader, programmierung mql4, timer, tradezone, tradezonetimer, trade_zone_timer

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 05:56 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.
-----------------------------------------------------------------------------------------------------------------------------