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: 4973
Beiträge: 43521
Benutzer: 7.220
Aktive Benutzer: 82
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 41 Minuten
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Like Tree1Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 09.07.14
Neues Mitglied
 
Registriert seit: Jul 2014
Beiträge: 6
Selfinvest befindet sich auf einem aufstrebenden Ast
Standard Handelssignal zu einer bestimmten Uhrzeit

Hallo!

Bräuchte mal Hilfe von einem/einer "Fachmann/Fachfrau"...

Ich habe mir über das Internet mal die Grundkenntnisse für eine einfache MQL4 angeeignet.
Leider bin ich nicht dahinter gekommen wie ich ein Signal zu einer (mehreren) bestimmten Uhrzeit(en) programmieren kann.
Es soll z.B. um 05:13 und/oder 9:22 und/oder 14:47 usw. eine Long und eine Short Position eröffnet werden.
Ich poste hier mal meine bisherige Arbeit. Würde mich sehr über kompetente Hilfe freuen.
Angehängte Dateien
Dateityp: mq4 Test001.mq4 (3,6 KB, 14x aufgerufen)
  #2 (permalink)  
Alt 09.07.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
string Time1 = "18:00";

if(NeuePeriodeBegonnen == true)
{
   LongSignal = false;
   if(TimeCurrent() >= StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + Time1))
                  //TimeCurrent() für die Serverzeit des Brokers oder TimeLocal(), wenn die PC-Zeit benutzt werden soll 
                  // Zeitpunkt ist erfüllt (alle Zeitpunkte sollen oben als Variable stehen...
                  // beliebig viele Zeitpunkte sollen möglich sein...)
                  // Bsp.: 07:24 und 10:13 und 14:47 und und und
   {
       LongSignal = true;
   }
            
}
usw.

traderdoc
T.P. likes this.

Geändert von traderdoc (09.07.14 um 19:09 Uhr)
  #3 (permalink)  
Alt 09.07.14
Neues Mitglied
 
Registriert seit: Jul 2014
Beiträge: 6
Selfinvest befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc!

Danke für die schnelle Antwort. Ich habe das jetzt mal soweit eingebaut.
Bei dem Code den du mir gepostet hast verstehe ich das " LongSignal = false; " in der 5ten Zeile nicht. Ich habe das weggelassen. Brauche ich das da?

Wenn ich mehrere Zeiten eintrage (Time1 und Time2 habe ich oben mal als Variable drin), wie muss ich das Time2 dann unten einbauen? Den ganzen Block für Time2, Time3, ... dann reinkopieren?

2 Fehlermeldungen bekomme ich noch beim Kompilieren (Zeile 78 und 92).

Kannst du mir da auch noch Tipps geben?

Danke im Voraus!
Angehängte Dateien
Dateityp: mq4 Test001.mq4 (3,3 KB, 3x aufgerufen)
  #4 (permalink)  
Alt 09.07.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
//+------------------------------------------------------------------+
//|                                                      Test001.mq4 |
//|                                                              abc |
//|                                                          http:// |
//+------------------------------------------------------------------+

#property copyright "abc"
#property link      "http://"
#property version   "1.00"
#property strict

//--- Externe Variablen (vom Nutzer einstellbar)

extern double  Lots = 0.01;
extern double  SL_in_Pips_bzw_Punkten = 100;
extern double  TP_in_Pips_bzw_Punkten = 100;
extern int     MagicNumber = 12345;


//--- Interne Variablen (nicht vom Nutzer einstellbar)

datetime PeriodenStartZeit;
bool     NeuePeriodeBegonnen;
bool     LongSignal;
bool     ShortSignal;
bool    Time1Flag, Time2Flag;
int      LongOrder;
int      ShortOrder;
string   Time1 = "18:53", Time2 = "19:27";


//+------------------------------------------------------------------+
//| Expert Initialisierungsfunktion                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      PeriodenStartZeit = Time[0];
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert Deinitialisierungsfunktion                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---   
  }
//+------------------------------------------------------------------+
//| Expert Tick-Funktion                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Überprüfung, ob neuer Periodenbeginn vorliegt

   if(PeriodenStartZeit != Time[0])
      {
         NeuePeriodeBegonnen = true;
         PeriodenStartZeit = Time[0];
      }
   else NeuePeriodeBegonnen = false;


//--- Handelssignale ermitteln

   //--- Long Signal ermitteln
      if(NeuePeriodeBegonnen == true)
         {
               LongSignal = false;
               if(!Time1Flag && TimeCurrent() >= StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + Time1))
               {
                  LongSignal = true;
                  Time1Flag = true;
               }
               if(!Time2Flag && TimeCurrent() >= StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + Time2))
               {
                  LongSignal = true;
                  Time2Flag = true;
               }
          }
         
   //--- Short Signal ermitteln
      if(NeuePeriodeBegonnen == true)
         {
               ShortSignal = false;
               if(TimeCurrent() >= StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + Time1))
               {
                  ShortSignal = true;
               }
          }

//--- Handelssignale umsetzen

   //--- Long Signal umsetzen
      if(LongSignal == true)
         {
            while(LongOrder<=0)
               {
                  LongOrder = OrderSend(Symbol(),OP_BUY,Lots,Ask,50,SL_in_Pips_bzw_Punkten,TP_in_Pips_bzw_Punkten,"Test001",MagicNumber,0,Green);
               }
         }
         
   //--- Short Signal umsetzen
      if(ShortSignal == true)
         {
            while(ShortOrder<=0)
               {
                  ShortOrder = OrderSend(Symbol(),OP_SELL,Lots,Bid,50,SL_in_Pips_bzw_Punkten,TP_in_Pips_bzw_Punkten,"Test001",MagicNumber,0,Red);
               }
         }
  }
//+------------------------------------------------------------------+
Das Time1Flag verhindert, dass die Order bei Erreichen der Zeit mit jeder neuen Kerze wieder geöffnet wird.
Das LongSignal = false; braucht nur einmal gesetzt werden. Entweder die Zeit wurde erreicht, dann wird LongSignal = true; gesetzt, ansonsten bleibt die Variable false! (Verkürzung des Codes!)
Entsprechend für Sell noch coden.

traderdoc
  #5 (permalink)  
Alt 09.07.14
Neues Mitglied
 
Registriert seit: Jul 2014
Beiträge: 6
Selfinvest befindet sich auf einem aufstrebenden Ast
Standard

Fertig! Keine Fehlermeldung mehr, danke!

Leider klappt es beim Strategietester irgendwie nicht. Die erste Kerze, egal ob M1, M5, M15, usw. schafft der Tester, dann bleibt er hängen...
Es wird auch bei H1 kein Trade ausgeführt...

Siehst du vielleicht auf den ersten Blick warum der EA nicht funktioniert?
Angehängte Dateien
Dateityp: mq4 Test001.mq4 (3,8 KB, 5x aufgerufen)
  #6 (permalink)  
Alt 10.07.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

LongOrder = OrderSend(Symbol(),OP_BUY,Lots,Ask,50,SL_in_Pips_bzw_Punkten,TP_in_Pips_bzw_Punkten,"Test001",MagicNumber,0,Green);

Da müssen die Kurse der realen SL- und TP-Werte stehen.

traderdoc
  #7 (permalink)  
Alt 10.07.14
Neues Mitglied
 
Registriert seit: Jul 2014
Beiträge: 6
Selfinvest befindet sich auf einem aufstrebenden Ast
Standard

Ich habe nun Variablen für SL und TP eingefügt.
Fehlermeldung gibt es keine.

Beim Strategietester läuft immer noch nur die erste Kerze durch, bevor der EA hängen bleibt.
Order wird um 8:23 auch keine platziert im H1-Durchlauf.

Als mql4-Anfänger habe ich leider keine Ahnung wo ich da Fehler mache.
Würdest du mir vielleicht noch weiter helfen, bis das Ding läuft?

Der EA soll ja immer zur Uhrzeit "x" eine Long- und eine Short-Order aufgeben.
Es sollen beliebig viele Uhrzeiten vorgegeben werden können.
Die Anzahl der offenen Trades soll nicht beschränkt sein, aber z.B. am Dienstag um 13:47 soll nur 1 Long- und 1 Short-Trade geöffnet werden.
Angehängte Dateien
Dateityp: mq4 Test02.mq4 (4,0 KB, 6x aufgerufen)
  #8 (permalink)  
Alt 10.07.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Nein, in die Funktion
LongOrder = OrderSend(Symbol(),OP_BUY,Lots,Ask,50,SL_Long,TP_L ong,"Test001",MagicNumber,0,Green);
muß nach Ask, der Kurswert des StopLoss rein, also wenn die Order bei 1,2345 geöffnet werden soll, dann liegt der StopLoss bei 1,2295 und der TP z.B. bei 1,2395, d.h. in diese Funktion gehören keine Pipwerte von SL und TP rein, sondern, die Kurswerte!

Ansonsten meine Empfehlung, das Handbuch bitte nehmen, auch gern die Online-Hilfe des MT4 und unter den Funktionen nachschauen.

traderdoc
  #9 (permalink)  
Alt 10.07.14
Benutzerbild von fxdaytrader
Premium Mitglied
 
Registriert seit: Dec 2013
Ort: hier und dort
Beiträge: 433
fxdaytrader befindet sich auf einem aufstrebenden Ast
Standard

Hm, wenn ich mir das so betrachte:

Code:
extern int     SL_in_Pips_bzw_Punkten = 100;
extern int     TP_in_Pips_bzw_Punkten = 100;
(...)
double   Long = Ask;
double   Short = Bid;
double   SL_Long = Long - SL_in_Pips_bzw_Punkten;
double   SL_Short = Short + SL_in_Pips_bzw_Punkten;
double   TP_Long = Long + TP_in_Pips_bzw_Punkten;
double   TP_Short = Short - TP_in_Pips_bzw_Punkten;
dann denke ich das kann auch nicht funktionieren, unabhängig von etwaigen anderen Fehlern.

Die Werte für bid/ask und den daraus resultierenden SL/TP-Preisen ändern sich doch ständig, da macht es überhaupt keinen Sinn diese nur einmal beim start des EA zu aktualisieren. Das sollte sinnigerweise erst vor dem ordersend-command geschehen.
__________________
krank im Kopf aber sonst ganz nett
build 509 mql4 editor download
  #10 (permalink)  
Alt 10.07.14
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 224
pako befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Code:
//+------------------------------------------------------------------+
//|                                                      Test001.mq4 |
//|                                                              abc |
//|                                                          http:// |
//+------------------------------------------------------------------+

#property copyright "abc"
#property link      "http://"
#property version   "1.00"
#property strict

//--- Externe Variablen (vom Nutzer einstellbar)

extern double  Lots = 0.01;
extern double  SL_in_Pips_bzw_Punkten = 100;
extern double  TP_in_Pips_bzw_Punkten = 100;
extern int     MagicNumber = 12345;


//--- Interne Variablen (nicht vom Nutzer einstellbar)

datetime PeriodenStartZeit;
bool     NeuePeriodeBegonnen;
bool     LongSignal;
bool     ShortSignal;
bool    Time1Flag, Time2Flag;
int      LongOrder;
int      ShortOrder;
string   Time1 = "18:53", Time2 = "19:27";


//+------------------------------------------------------------------+
//| Expert Initialisierungsfunktion                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      PeriodenStartZeit = Time[0];
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert Deinitialisierungsfunktion                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---   
  }
//+------------------------------------------------------------------+
//| Expert Tick-Funktion                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Überprüfung, ob neuer Periodenbeginn vorliegt

   if(PeriodenStartZeit != Time[0])
      {
         NeuePeriodeBegonnen = true;
         PeriodenStartZeit = Time[0];
      }
   else NeuePeriodeBegonnen = false;


//--- Handelssignale ermitteln

   //--- Long Signal ermitteln
      if(NeuePeriodeBegonnen == true)
         {
               LongSignal = false;
               if(!Time1Flag && TimeCurrent() >= StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + Time1))
               {
                  LongSignal = true;
                  Time1Flag = true;  /// und für false EA neu  starten ?????
               }
               if(!Time2Flag && TimeCurrent() >= StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + Time2))
               {
                  LongSignal = true;
                  Time2Flag = true;   /// und für false EA neu  starten ?????
               }
          }
         
   //--- Short Signal ermitteln
      if(NeuePeriodeBegonnen == true)
         {
               ShortSignal = false;
               if(TimeCurrent() >= StrToTime(TimeToStr(TimeCurrent(),TIME_DATE) + Time1))
               {
                  ShortSignal = true;
               }
          }

//--- Handelssignale umsetzen

   //--- Long Signal umsetzen
      if(LongSignal == true)
         {
            while(LongOrder<=0)
               {
                  LongOrder = OrderSend(Symbol(),OP_BUY,Lots,Ask,50,SL_in_Pips_bzw_Punkten,TP_in_Pips_bzw_Punkten,"Test001",MagicNumber,0,Green);
               }
         }
         
   //--- Short Signal umsetzen
      if(ShortSignal == true)
         {
            while(ShortOrder<=0)
               {
                  ShortOrder = OrderSend(Symbol(),OP_SELL,Lots,Bid,50,SL_in_Pips_bzw_Punkten,TP_in_Pips_bzw_Punkten,"Test001",MagicNumber,0,Red);
               }
         }
  }
//+------------------------------------------------------------------+
Das Time1Flag verhindert, dass die Order bei Erreichen der Zeit mit jeder neuen Kerze wieder geöffnet wird.
Das LongSignal = false; braucht nur einmal gesetzt werden. Entweder die Zeit wurde erreicht, dann wird LongSignal = true; gesetzt, ansonsten bleibt die Variable false! (Verkürzung des Codes!)
Entsprechend für Sell noch coden.

traderdoc
und für das nächste "Time1Flag=false;" EA neu starten ?????
Thema geschlossen

Lesezeichen

Stichworte
bestimmte uhrzeit, handelssignal, handelssignal uhrueit, mql4, programmierung, programmierung metatrader, uhrzeit, zeit

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 22:42 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.
-----------------------------------------------------------------------------------------------------------------------------