- Bitte formatiere Dein Code-Posting mit dem SRC-Knopf!
- Statt die Fehlermeldung mit Zeilenzahl bitte den Fehler selbst - wer soll 100 Zeilen durchzählen?
- "possible loss of data due to type conversion" kann meistens mit einem type-cast vermieden werden zB.: (string)
- Dazu hast Du einen Klammerfehler - musst aber selber durchgehen!
- 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!
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);
#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;
}
//-
//+------------------------------------------------------------------+
Ihr habt mir sehr geholfen, jetzt hab ich nur mehr zwei Fehler
'{' - unbalanced parentheses
';' - unexpected end of program
Danke
Naja, offenbar noch nicht genug :(
- Den SRC Knopf hast Du wohl noch nicht entdeckt! Würde sonst so ausschauen!
- 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! - Allerdings verwechselt MT4 mitunter die Klammern { und ( bei der Fehlermeldung -feststellung.
- 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!
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!
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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