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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3781
Beiträge: 36748
Benutzer: 5.984
Aktive Benutzer: 486
Links: 80
Wir begrüßen unseren neuesten Benutzer: Take2
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 2 Tagen
- Take2
vor 3 Tagen
- peterhardi
vor 4 Tagen
- tecdaxfan
vor 5 Tagen
- falcochen
vor 6 Tagen
- Siebi71

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 39
Gesamt: 40
Team: 0
Team:  
Benutzer:  Lena
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 21.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
piptrade befindet sich auf einem aufstrebenden Ast
Standard 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
Mit Zitat antworten
  #2 (permalink)  
Alt 21.07.17
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 117
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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---
Mit Zitat antworten
  #3 (permalink)  
Alt 21.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #4 (permalink)  
Alt 21.07.17
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 117
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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---
Mit Zitat antworten
  #5 (permalink)  
Alt 23.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
piptrade befindet sich auf einem aufstrebenden Ast
Smile

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
Mit Zitat antworten
  #6 (permalink)  
Alt 26.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #7 (permalink)  
Alt 27.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 245
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von piptrade Beitrag anzeigen
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 anzeigen
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.
Mit Zitat antworten
  #8 (permalink)  
Alt 28.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von next user Beitrag anzeigen
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
Mit Zitat antworten
  #9 (permalink)  
Alt 28.07.17
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 117
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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---
Mit Zitat antworten
  #10 (permalink)  
Alt 28.07.17
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 116
piptrade befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
Antwort

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 +2. Es ist jetzt 05:54 Uhr.



spam firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------