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)
-   -   Fehlermeldungen im Editor (http://www.expert-advisor.com/forum/showthread.php?t=5553)

30acker.investing 19.03.17 18:07

Fehlermeldungen im Editor
 
Hallo schaue mir auf Youtube immer wieder Videos an vom Programmieren. Mache auch alles so wie es dort aufgeführt wird. Der Metaeditor mault aber immer etwas anderes. Ich bin schon am Verzweifeln und das geht ziemlich auf die Fingernägel. Hab den Code hier genau eingegeben.

void OnTick()
{

//aktuelle Kerze Langsame EMA
double LangsamerMovingAverage = iMA(NULL,0,18,0,MODE_EMA,PRICE_CLOSE,0);

// letzte Kerze Langsame EMA
double LetzteLangsamerMovingAverage = iMA(NULL,0,18,0,MODE_EMA,PRICE_CLOSE,1);

//aktuelle Kerze Schnelle EMA
double SchnelleMovingAverage = iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,0);

//letzte schnelle EMA
double LetzteSchnelleMovingAverage = iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,1)


//wenn der Schnelle Moving Average jetzt oben ist
if ((LetzteSchnelleMovingAverage < LetzteLangsamerMovingAverage)&&(SchnelleMovingAver age> LangsamerMovingAverage));

// Chart Ausgabe Kaufen
Comment ("Kaufen");

//wenn der Schnelle Moving Average jetzt unten ist
if ((LetzteSchnelleMovingAverage > LetzteLangsamerMovingAverage)&&(SchnelleMovingAver age< LangsamerMovingAverage));

// Chart Ausgabe Verkaufen
Comment ("Verkaufen");

}

Er sagt mir aber immer wieder
'if' - semicolon expected EMA 7-18 Crossover.mq4 22 2
empty controlled statement found EMA 7-18 Crossover.mq4 22 116
empty controlled statement found EMA 7-18 Crossover.mq4 28 116
1 error(s), 2 warning(s) 2 3

Was ist nun schon wieder falsch?
Danke für eure Tipps.

MA-EA 19.03.17 20:24

Zitat:

Zitat von 30acker.investing (Beitrag 38122)
//letzte schnelle EMA
double LetzteSchnelleMovingAverage = iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,1)

Da fehlt nen ; am Ende.

Bei den Bedingungen müssten insgesamt 4 Klammern weg können.
Zitat:

Zitat von 30acker.investing (Beitrag 38122)
//wenn der Schnelle Moving Average jetzt oben ist
if (LetzteSchnelleMovingAverage < LetzteLangsamerMovingAverage&&SchnelleMovingAverag e> LangsamerMovingAverage);

// Chart Ausgabe Kaufen
Comment ("Kaufen");

//wenn der Schnelle Moving Average jetzt unten ist
if (LetzteSchnelleMovingAverage > LetzteLangsamerMovingAverage&&SchnelleMovingAverag e< LangsamerMovingAverage);

// Chart Ausgabe Verkaufen
Comment ("Verkaufen");

}


KeepItEasy 19.03.17 21:36

Nee! So wie der Code hier steht, wird der Comment zwar auch ausgeführt, aber unabhängig von der if-Bedingung. Nach der if-Bedingung steht kein Semikolon, sondern erst nach der 1. auszuführenden Operation, also z.b.

if(a=1) b=2;

Sind mehrere Operationen unter der if-Bedingung auszuführen, müssen die in geschweiften Klammern gefasst werden, z.B.

if(a=1)
{b=2;
c=3;}

Dann muss nach jeder unter der if-Bedingung auszuführenden Operationen ein Semikolon stehen.

if(a=1); nimmt der Compiler zwar auch, es gibt dann aber keine Operation, die unter der if-Bedingung auszuführen wäre.

Alles klar? :)

ping 19.03.17 22:08

Hi 30acker.investing,

ohne es getestet zu haben sollte es so laufen.
Einfach kopieren und ersetzen.
Einmal fehlte ein Semikolon und zweimal war eines zuviel.
Wie schon in den vorhergehenden Beiträgen beschrieben, nach if() kommt kein Semikolon.
Code:

void OnTick()
{ //aktuelle Kerze Langsame EMA
  double LangsamerMovingAverage = iMA(NULL,0,18,0,MODE_EMA,PRICE_CLOSE,0);

  // letzte Kerze Langsame EMA
  double LetzteLangsamerMovingAverage = iMA(NULL,0,18,0,MODE_EMA,PRICE_CLOSE,1);

  //aktuelle Kerze Schnelle EMA
  double SchnelleMovingAverage = iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,0);

  //letzte schnelle EMA
  double LetzteSchnelleMovingAverage = iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,1);

  //wenn der Schnelle Moving Average jetzt oben ist
  if ((LetzteSchnelleMovingAverage <  LetzteLangsamerMovingAverage)&&(SchnelleMovingAverage>  LangsamerMovingAverage))

    // Chart Ausgabe Kaufen
    Comment ("Kaufen");
 
  //wenn der Schnelle Moving Average jetzt unten ist
  if ((LetzteSchnelleMovingAverage >  LetzteLangsamerMovingAverage)&&(SchnelleMovingAverage<  LangsamerMovingAverage))

    // Chart Ausgabe Verkaufen
    Comment ("Verkaufen");
}

ciao ping

MA-EA 19.03.17 22:34

Das ; fehlt aber am Ende der Deklaration dieses MA:
Zitat:

Zitat von 30acker.investing (Beitrag 38122)
//letzte schnelle EMA
double LetzteSchnelleMovingAverage = iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,1)

:confused:

traderdoc 20.03.17 11:19

Ich fasse mal zusammen, was die beiden richtigerweise herausgefunden haben.
Es gibt in diesem Code:

1. einen entscheidenden syntaktischen Fehler durch das Fehlen des ;
nach der Zeile
double LetzteSchnelleMovingAverage = iMA(NULL,0,7,0,MODE_jEMA,PRICE_CLOSE,1)

2. und eine logischen Fehler durch das Weglassen der der Anweisung nach den if-Abfragen, mit oder auch ohne {} Klammern.

Richtig wäre z.B. :

//wenn der Schnelle Moving Average jetzt oben ist
if ((LetzteSchnelleMovingAverage < LetzteLangsamerMovingAverage)&&(SchnelleMovingAver age> LangsamerMovingAverage)) Comment ("Kaufen");

Die inneren () könnte man auch in diesem! Falle weglassen, stören aber weder die Compilierung noch den Prozessablauf.

traderdoc


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