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)
-   -   Erste Programmierversuche...HILFE Fehlermeldung! (http://www.expert-advisor.com/forum/showthread.php?t=5879)

Trader93 05.10.17 20:43

Erste Programmierversuche...HILFE Fehlermeldung!
 
Hallo liebe MQL4 Experten. Ich benötige bei folgendem Fehler Eure Hilfe.
Ich - ein blutiger Programmieranfänger - kann mit folgendem Fehler leider relativ wenig anfangen... Und jetzt kommt Ihr ins Spiel. Könnt ihr mir verraten, was ich falsch mache?!

// Moving Average
double MAlang = iMA(NULL,0,MA_lang,0,MODE_SMA,PRICE_CLOSE,1);
double MAlangVorperiode = iMA(NULL,0,MA_lang,0,MODE_SMA,PRICE_CLOSE,2);
double MAkurz = iMA(NULL,0,MA_kurz,0,MODE_SMA,PRICE_CLOSE,1);
double MAkurzVorperiode = iMA(NULL,0,MA_kurz,0,MODE_SMA,PRICE_CLOSE,2);
// RSI
double RSI = iRSI(Symbol(),0,RSI_Perioden,PRICE_CLOSE,0);
double RSI1 = iRSI(Symbol(),0,RSI_Perioden,PRICE_CLOSE,1);

// Handelssignale ermitteln
if(NeuePeriodeBegonnen == true)
{
// Buy Signal
if(MAkurz>MAlang && MAkurzVorperiode<=MAlangVorperiode && RSI>RSI_BuyLevel && RSI1<RSI_BuyLevel);
{
LongSignal = true;
}
else LongSignal = false;

Hier erhalte ich beim Kompilieren die Fehlermeldung " 'else' - illegal 'else' without matching 'if' ... Letzten Endes soll der Quote zum Ausdruck bringen: "Wenn die oben genannten Bedingungen erfüllt worden sind, handelt es sich um ein LongSignal. Wenn die Bedingungen nicht vollständig erfüllt sind, gibt es kein entsprechendes LongSignal.

traderdoc 05.10.17 21:02

Code:

// Handelssignale ermitteln
if(NeuePeriodeBegonnen == true) {  // Buy Signal
  if(MAkurz > MAlang && MAkurzVorperiode <= MAlangVorperiode && RSI > RSI_BuyLevel && RSI1 < RSI_BuyLevel) {
      LongSignal = true;
  } else LongSignal = false;
}

Da war ein ; zuviel und eine } zu wenig.

Beim Codeschreiben hier immer den #-Button oben in der Icon-Leiste drücken und vor und nach mathematischen Operationszeichen eine Leerstelle einfügen, damit man den Code besser lesen kann. Desweiteren klar strukturierte Klammern setzen.

traderdoc

Trader93 05.10.17 21:20

Sehr cool traderdoc, danke. Jetzt ist die Fehlermeldung futsch. Wenn die Strategie jetzt noch aufgeht wäre das der Knaller. Aber ein Schritt nach dem anderen :)

mat 07.10.17 20:48

Das if() kannst Du noch sehr schön kürzen:

Code:

LongSignal = ( MAkurz>MAlang && MAkurzVorperiode<=MAlangVorperiode && RSI>RSI_BuyLevel && RSI1<RSI_BuyLevel );
Das ersetzt das komplette if-else, denn in der Klammer steht ja ein boolescher Ausdruck.

Analoges gilt für das äußere if, das Ganze wird zu:

Code:

if( NeuePeriodeBegonnen ) LongSignal = ( MAkurz>MAlang && MAkurzVorperiode<=MAlangVorperiode && RSI>RSI_BuyLevel && RSI1<RSI_BuyLevel );
denn NeuePeriodeBegonnen ist ja schon boolean, das muss nicht mehr mit ›true‹ oder ›false‹ verglichen werden.

LG Mat

Trader93 09.10.17 18:46

Hey Mat,
vielen Dank für deinen (sehr guten) Hinweis. Je kürzer und einfacher es am Ende ist, desto besser :)

traderdoc 09.10.17 19:03

Code:

if( NeuePeriodeBegonnen ) LongSignal = ( MAkurz>MAlang && MAkurzVorperiode<=MAlangVorperiode && RSI>RSI_BuyLevel && RSI1<RSI_BuyLevel );
Das wäre in der Tat die kürzeste Form. Nur ist in de Praxis die kürzeste Form nicht immer diejenige, welche sich am besten lesen lässt. Das hängt aber auch wieder vom Übungsgrad des Programmieres ab.

Der boolean-Vergleich entfällt bei mir auch permanent.
Für die if else-Schleife können man nun auch noch schreiben:

Code:

if (NeuePeriodeBegonnen) {  // Buy Signal
  LongSignal = false;
  if(MAkurz > MAlang && MAkurzVorperiode <= MAlangVorperiode && RSI > RSI_BuyLevel && RSI1 < RSI_BuyLevel) LongSignal = true;
}

Aber das ist alles Geschmackssache. Wichtig ist nur, dass man sich auch nach einem Jahr in seinem eigenen Code wieder gut zurechtfindet.

traderdoc


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