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)
-   -   Handelssignal zu einer bestimmten Uhrzeit (http://www.expert-advisor.com/forum/showthread.php?t=3753)

Selfinvest 09.07.14 18:12

Handelssignal zu einer bestimmten Uhrzeit
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.

traderdoc 09.07.14 18:56

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

Selfinvest 09.07.14 20:18

Liste der Anhänge anzeigen (Anzahl: 1)
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!

traderdoc 09.07.14 20:52

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

Selfinvest 09.07.14 23:12

Liste der Anhänge anzeigen (Anzahl: 1)
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?

traderdoc 10.07.14 00:46

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

Selfinvest 10.07.14 08:15

Liste der Anhänge anzeigen (Anzahl: 1)
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.

traderdoc 10.07.14 09:18

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

fxdaytrader 10.07.14 09:41

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.

pako 10.07.14 15:58

Zitat:

Zitat von traderdoc (Beitrag 26710)
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 ????? :eek::confused:

traderdoc 10.07.14 17:55

Zitat:

Zitat von pako (Beitrag 26722)
und für das nächste "Time1Flag=false;" EA neu starten ????? :eek::confused:

(Ja, sicherlich!!!):D

Na, @pako, Du bist ja wieder ein Schlauer!
Steht irgendwo, dass das eine Endlösung ist, oder meinst Du, ich schreibe den kompletten EA jetzt hier rein? Wenn Du die Zeit dafür hast, bitte schön, Du hast meinen Segen.:)

traderdoc

Selfinvest 12.07.14 14:10

Liste der Anhänge anzeigen (Anzahl: 1)
So jetzt habe ich mich mal auf den Long-Einstieg konzentriert.

So wie es jetzt aussieht sollte immer um 11:11 Uhr ein Kauf-Signal entstehen.

SL und TP Problem ist gelöst und das funktioniert auch.

Im Strategietest läuft die Sache jetzt auch, aber mit einem komischen Ergebnis.

Ich habe den 15.06. bis zum 12.07. (4 Wochen) als Testzeitraum aktiviert.
Der Erste Trade wird nicht bei Aktivierung (15.06. 23:00) gemacht, was mir schon mal gut gefällt.
Aber um 23:10 wird eine Kauf-Order ausgeführt. Leider kein Plan warum.
Der Trade läuft schön in den TP (super) dann wird aber sofort wieder eine Kauf-Order ausgeführt.
Das soll aber nicht passieren. Der EA soll ja nur um 11:11 eine, und nur EINE, Kauf-Order generieren.
Das läuft die ganzen 4 Wochen so und am Ende des Testzeitraums wird die offene Position geschlossen.

Kannst du mir wieder weiterhelfen, traderdoc?

fxdaytrader 12.07.14 14:15

google könnte helfen, bspw. mql4 + open trade at certain time, das ist alles im Grunde schon zigmal vor- und durchgekaut worden.

Man muß nur danach suchen.

Selfinvest 12.07.14 14:19

Suche schon die ganze Zeit, aber danke für deinen Suchvorschlag, den probiere ich mal, vielleicht finde ich da ja was...

Ich will da ganze ja auch verstehen und mir nicht nur das Endergebnis liefern lassen, aber als Einsteiger ist es halt doch sehr schwer finde ich.

Bin also für jeden Tipp der mir weiterhilft an mein Ziel zu kommen und den Weg dahin auch zu verstehen sehr dankbar.

fxdaytrader 12.07.14 14:24

Zitat:

Zitat von Selfinvest (Beitrag 26743)
Ich will da ganze ja auch verstehen und mir nicht nur das Endergebnis liefern lassen, aber als Einsteiger ist es halt doch sehr schwer finde ich.

Bin also für jeden Tipp der mir weiterhilft an mein Ziel zu kommen und den Weg dahin auch zu verstehen sehr dankbar.

Na ja, ein privates Coaching wirst Du hier sicherlich nicht (für lau) bekommen :rolleyes:

Verstehen geht nur durch lernen und ausprobieren. Das geht nicht von heute auf morgen, aber wenn es auch Spaß macht sollte das kein Problem darstellen. :)

Über google findest Du fast alles, im Grunde nur suchen nach
mql4 + SUCHBEGRIFF(E) (aber auf english!),oder:
site:mql4.com + BEGRIFF
site:domain.com + BEGRIFF1 BEGRIFF2

usw.
:)


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