MetaTrader 5 herunterladen

Benötige Hilfe

Einloggen oder registrieren, um einen Kommentar zu schreiben
KeineAhnung
27
KeineAhnung  

Hallo

Zuerst muss ich sagen, dass ich keine Ahnung vom Programmieren habe. Ich wollte mir mit Hilfe von Videos selber einen EA programmieren und das ist dabei rausgekommen.

Ich wollte mir einen ADX Cross mit RSI erstellen. Kann mir bitte wer sagen was ich da falsch mache. Danke für Eure Hilfe.

Gruß KeineAhnung

//+------------------------------------------------------------------+
//|                                                     ADXCross.mq4 |
//|                                    Copyright 2017, Norbert Heine |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Norbert Heine"
#property link      ""
#property version   "1.00"
#property strict
//Variable zum Eingeben
input double ADX = 27;
input double RSI = 14;
input double SL_Prozent = 0.5;
input double Handelslots = 0.01;
input int MagicNummer = 12345;
input double TP_Prozent = 1.5;

//Variable vom Progarmm feststellen
datetime PeriodenStartZeit;
bool NeuerPeriodenBeginn;
bool KaufSignal;
bool VerkaufSignal;
int KaufOrder;
int VerkaufOrder;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PeriodenStartZeit = Time[0];
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
//Überprüfen ob neuer Periodenbeginn vorliegt
   if(PeriodenStartZeit != Time[0]);
   {
   NeuerPeriodenBeginn = true;
   PeriodenStartZeit = Time[0];
   }
   else (NeuerPeriodenBeginn =false);
 }
//Marktdaten ermitteln
   double mADX = iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MAIN,1);
   double mADXVorperiode = iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MAIN,2);
   double mRSI = iRSI(NULL,0,RSI,PRICE_CLOSE,1);
   double mRSIVorperiode = iRSI(NULL,0,RSI,PRICE_CLOSE,2);
  
//Handelssignal ermitteln
   if(NeuerPeriodenBeginn == true);
   {
//Kaufsignal
   if(iADX(NULL,0,ADX,PRICE_CLOSE,MODE_PLUSDI,1)>iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MINUSDI,1));
   {
        KaufSignal = true;
   }
   else KaufSignal =false;
   }
   }
   if(iRSI(NULL,0,RSI,PRICE_CLOSE,1)<60);
   {
       KaufSignal = true;
   }
   if(iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MAIN,1)>20);
   {
       KaufSignal = true;
   }
   else KaufSignal =false;
   }
 
//VerkaufSignal
   if(iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MINUSDI,1)>iADX(NULL,0,ADX,PRICE_CLOSE,MODE_PLUSDI,1));
   {
        VerkaufSignal = true;
   }
   if(iRSI(NULL,0,RSI,PRICE_CLOSE,1)>30);
   {
        VerkaufSignal = true;
   }
   if(iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MAIN,1)>20);  
  }
 
//Kaufsignal umsetzen
  if(KaufSignal == true);
  {
//Evtl. Verkauforder schließen
  if(VerkaufOrder>0)
  {
   if(OrderSelect(VerkaufOrder,SELECT_BY_TICKET)==true);
   {
   bool VerkaufOrderGeschlossen = OrderClose(VerkaufOrder,OrderLots(),Ask,10,Blue);
   if VerkaufOrderGeschlossen==true) VerkaufOrder=0;
   }
  }
//Kauforder eröffen
    while (KaufOrder<=0);
    {
    KaufOrder = OrderSend(Symbol(),OP_BUY,Handelslots,Ask,10,0,0,"MAXing LONG",MagciNummer,0,Green);
    }
  }
//Verkaufsignal umsetzen
  if(VerkaufSignalSignal == true);
  {
    //Evtl. Kauforder schließen
  if(KaufOrder>0)
  {
   if(OrderSelect(KaufOrder,SELECT_BY_TICKET)==true);
   {
   bool KaufOrderGeschlossen = OrderClose(KaufOrder,OrderLots(),Bid,10,Blue);
   if KaufOrderGeschlossen==true) KaufOrder=0;
   }
  }
  //Verkauforder eröffnen
    while (VerkaufOrderOrder<=0);
    {
    VerkaufOrderOrder = OrderSend(Symbol(),OP_SELL,Handelslots,Bid,10,0,0,"MAXing SHORT",MagciNummer,0,Red);
    }
 
//SL Kauf Deals setzen
  if(OrderSelect(KaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderCloseTime()==0 && OrderStopLoss()==0)
  {
  double StoppLoos= NormalizeDouble (OrderOpenPrice()/(1+ SL_Prozent/100)),Digits);
  bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoos,OrderTakeProfit(),0,Yellow);
  }
  }     
 //SL Verkauf Deals setzen
  if(OrderSelect(VerkaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderCloseTime()==0 && OrderStopLoss()==0)
  {
  StoppLoos= NormalizeDouble (OrderOpenPrice()*(1+ SL_Prozent/100)),Digits);
  OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoos,OrderTakeProfit(),0,Yellow);
  }
  }
  //Takeprofit Kauf Deals setzen
  if(OrderSelect(KaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderCloseTime()==0 && OrderTakeProfit()==0)
  {
  double TakeProfit= NormalizeDouble (OrderOpenPrice()*(1+ TP_Prozent/100)),Digits);
  OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
  }
  }
  //Takeprofit Verkauf Deals setzen
  if(OrderSelect(VerkaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderCloseTime()==0 && OrderTakeProfit()==0)
  {
  TakeProfit= NormalizeDouble (OrderOpenPrice()/(1+ TP_Prozent/100)),Digits);
  OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
  }
 
   }
  //Ticketnummer nach Schließen auf Null zurücksetzen
  if(OrderSelect(KaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderTicket()>0 && OrderCloseTime()>0) KaufOrder =0;
  }
  if(OrderSelect(VerkaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderTicket()>0 && OrderCloseTime()>0) VerkaufOrder =0;
  }
 
 
 
  //-
  
 
 
 
//+------------------------------------------------------------------+

diese Fehler bekomme ich

possible loss of data due to type conversion ADXCross.mq4 59 30

'if' - expressions are not allowed on a global scope ADXCross.mq4 65 4

'{' - function definition unexpected ADXCross.mq4 66 4
'else' - expressions are not allowed on a global scope ADXCross.mq4 72 4

')' - expressions are not allowed on a global scope ADXCross.mq4 73 4

'while' - expressions are not allowed on a global scope ADXCross.mq4 111 5

empty controlled statement found ADXCross.mq4 51 36

Carl Schreiber
7663
Carl Schreiber  
  1. Bitte formatiere Dein Code-Posting mit dem SRC-Knopf!
  2. Statt die Fehlermeldung mit Zeilenzahl bitte den Fehler selbst - wer soll 100 Zeilen durchzählen?
  3. "possible loss of data due to type conversion" kann meistens mit einem type-cast vermieden werden zB.: (string)
  4. Dazu hast Du einen Klammerfehler - musst aber selber durchgehen!
  5. Du lernst wahrscheinlich viel schneller, wenn  Du einen bestehenden Indikator nimmst und den abänderst - es gibt so viele, auch für/mit dem ADX!
Lars Rompe
1693
Lars Rompe  

Da ist der SRC Knopf, den Du vielleicht auch noch nicht kennst...

SRC

Uwe Goetzke
1649
Uwe Goetzke  

Ganz unabhängig wegen der Formatierung:

global scope heißt, dass der void OnStart() Block durch eine } schon vorher  geschlossen wurde und if oder while außerhalb des Blockes ist.

Verwende man im Editor unter Tools den Styler, so wird der Code recht gut formatiert und man sieht wo die falsche Klammer gesetzt wurde.

Hier ist wohl gleich am Anfang nach  else(NeuerPeriodenBeginn=false);

KeineAhnung
27
KeineAhnung  
#property copyright "Copyright 2017, Norbert Heine"
#property link      ""
#property version   "1.00"
#property strict
//Variable zum Eingeben
input double ADX = 27;
input double RSI = 14;
input double SL_Prozent = 0.5;
input double Handelslots = 0.01;
input int MagicNummer = 12345;
input double TP_Prozent = 1.5;

//Variable vom Progarmm feststellen
datetime PeriodenStartZeit;
bool NeuerPeriodenBeginn;
bool KaufSignal;
bool VerkaufSignal;
int KaufOrder;
int VerkaufOrder;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PeriodenStartZeit = Time[0];
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
//Überprüfen ob neuer Periodenbeginn vorliegt
   if(PeriodenStartZeit != Time[0]);
   {
   NeuerPeriodenBeginn = true;
   PeriodenStartZeit = Time[0];
   }
   else (NeuerPeriodenBeginn =false);
 }
//Marktdaten ermitteln
   double mADX = iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MAIN,1);
   double mADXVorperiode = iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MAIN,2);
   double mRSI = iRSI(NULL,0,RSI,PRICE_CLOSE,1);
   double mRSIVorperiode = iRSI(NULL,0,RSI,PRICE_CLOSE,2);
  
//Handelssignal ermitteln
   if(NeuerPeriodenBeginn == true);
   {
//Kaufsignal
   if(iADX(NULL,0,ADX,PRICE_CLOSE,MODE_PLUSDI,1)>iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MINUSDI,1));
   {
        KaufSignal = true;
   }
   else KaufSignal =false;
   }
   }
   if(iRSI(NULL,0,RSI,PRICE_CLOSE,1)<60);
   {
       KaufSignal = true;
   }
   if(iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MAIN,1)>20);
   {
       KaufSignal = true;
   }
   else KaufSignal =false;
   }
 
//VerkaufSignal
   if(iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MINUSDI,1)>iADX(NULL,0,ADX,PRICE_CLOSE,MODE_PLUSDI,1));
   {
        VerkaufSignal = true;
   }
   if(iRSI(NULL,0,RSI,PRICE_CLOSE,1)>30);
   {
        VerkaufSignal = true;
   }
   if(iADX(NULL,0,ADX,PRICE_CLOSE,MODE_MAIN,1)>20);  
  }
 
//Kaufsignal umsetzen
  if(KaufSignal == true);
  {
//Evtl. Verkauforder schließen
  if(VerkaufOrder>0)
  {
   if(OrderSelect(VerkaufOrder,SELECT_BY_TICKET)==true);
   {
   bool VerkaufOrderGeschlossen = OrderClose(VerkaufOrder,OrderLots(),Ask,10,Blue);
   if VerkaufOrderGeschlossen==true) VerkaufOrder=0;
   }
  }
//Kauforder eröffen
    while (KaufOrder<=0);
    {
    KaufOrder = OrderSend(Symbol(),OP_BUY,Handelslots,Ask,10,0,0,"MAXing LONG",MagciNummer,0,Green);
    }
  }
//Verkaufsignal umsetzen
  if(VerkaufSignalSignal == true);
  {
    //Evtl. Kauforder schließen
  if(KaufOrder>0)
  {
   if(OrderSelect(KaufOrder,SELECT_BY_TICKET)==true);
   {
   bool KaufOrderGeschlossen = OrderClose(KaufOrder,OrderLots(),Bid,10,Blue);
   if KaufOrderGeschlossen==true) KaufOrder=0;
   }
  }
  //Verkauforder eröffnen
    while (VerkaufOrderOrder<=0);
    {
    VerkaufOrderOrder = OrderSend(Symbol(),OP_SELL,Handelslots,Bid,10,0,0,"MAXing SHORT",MagciNummer,0,Red);
    }
 
//SL Kauf Deals setzen
  if(OrderSelect(KaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderCloseTime()==0 && OrderStopLoss()==0)
  {
  double StoppLoos= NormalizeDouble (OrderOpenPrice()/(1+ SL_Prozent/100)),Digits);
  bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoos,OrderTakeProfit(),0,Yellow);
  }
  }     
 //SL Verkauf Deals setzen
  if(OrderSelect(VerkaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderCloseTime()==0 && OrderStopLoss()==0)
  {
  StoppLoos= NormalizeDouble (OrderOpenPrice()*(1+ SL_Prozent/100)),Digits);
  OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoos,OrderTakeProfit(),0,Yellow);
  }
  }
  //Takeprofit Kauf Deals setzen
  if(OrderSelect(KaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderCloseTime()==0 && OrderTakeProfit()==0)
  {
  double TakeProfit= NormalizeDouble (OrderOpenPrice()*(1+ TP_Prozent/100)),Digits);
  OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
  }
  }
  //Takeprofit Verkauf Deals setzen
  if(OrderSelect(VerkaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderCloseTime()==0 && OrderTakeProfit()==0)
  {
  TakeProfit= NormalizeDouble (OrderOpenPrice()/(1+ TP_Prozent/100)),Digits);
  OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
  }
 
   }
  //Ticketnummer nach Schließen auf Null zurücksetzen
  if(OrderSelect(KaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderTicket()>0 && OrderCloseTime()>0) KaufOrder =0;
  }
  if(OrderSelect(VerkaufOrder,SELECT_BY_TICKET)==true)
  {
  if(OrderTicket()>0 && OrderCloseTime()>0) VerkaufOrder =0;
  }
 
 
 
  //-
  
 
 
 
//+------------------------------------------------------------------+

KeineAhnung
27
KeineAhnung  

Ihr habt mir sehr geholfen, jetzt hab ich nur mehr zwei Fehler

'{' - unbalanced parentheses

';' - unexpected end of program


Danke

Carl Schreiber
7663
Carl Schreiber  
Ihr habt mir sehr geholfen

Naja, offenbar noch nicht genug :(

  1. Den SRC Knopf hast Du wohl noch nicht entdeckt! Würde sonst so ausschauen!
  2. Wie Uwe und ich gesagt haben, Du hast ein Klammerfehler!
    a) Finde zu jeder 'Klammer-Auf' die 'Klammer-Zu' dann sollte sich der Fehler zeigen!
    b) Um so etwas zu verhindern bzw leicht zu finden benutzt man Einrückungen!
    c) Der Editor hat übrigens einen Styler (unter Tools) - versuch das mal!
  3. Allerdings verwechselt MT4 mitunter die Klammern { und ( bei der Fehlermeldung -feststellung.
  4. Ich verwende dazu Notepad++, nicht nur hat er ein Plugin zum Über- und Ersetzen russischer Texte, er kann auch Klammern zählen - hilft beim Suchen!
KeineAhnung
27
KeineAhnung  

Ich hab den SRC Knopf schon gefunden, aber wie geht es dann weiter

Carl Schreiber
7663
Carl Schreiber  
KeineAhnung:

Ich hab den SRC Knopf schon gefunden, aber wie geht es dann weiter

Wenn'sten drückst öffnet sich ein Fenster in dem Du Deinen Code tippst oder 'pastest'.

Er wird aber nur bunt, die Einrückungen musst Du vorher selber machen!

KeineAhnung
27
KeineAhnung  
Carl Schreiber:

Wenn'sten drückst öffnet sich ein Fenster in dem Du Deinen Code tippst oder 'pastest'.

Er wird aber nur bunt, die Einrückungen musst Du vorher selber machen!

Okay werde ich machen
KeineAhnung
27
KeineAhnung  

Hallo

KeineAhnung:
Okay werde ich machen
Ich drücke den SRC Knopf das Fenster geht auf, und wenn ich den Code einfüge wird der nicht bunt.
12
Einloggen oder registrieren, um einen Kommentar zu schreiben