Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3822
Beiträge: 36928
Benutzer: 6.071
Aktive Benutzer: 494
Links: 80
Wir begrüßen unseren neuesten Benutzer: Roerich
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 3 Stunden
- Roerich
vor 3 Stunden
- John_Liver...
vor 3 Stunden
- harry1001
vor 19 Stunden
- supadog
vor einem Tag
- POCJonah7

Onlineuser
'Wer ist online' anzeigen Benutzer: 3
Gäste: 86
Gesamt: 89
Team: 0
Team:  
Benutzer:  Dennis605, Domke01, traderdoc
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 05.10.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 11
Trader93 befindet sich auf einem aufstrebenden Ast
Question 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.
Mit Zitat antworten
  #2 (permalink)  
Alt 05.10.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.873
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 05.10.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 11
Trader93 befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #4 (permalink)  
Alt 07.10.17
mat mat ist offline
Neues Mitglied
 
Registriert seit: Oct 2017
Beiträge: 16
mat befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #5 (permalink)  
Alt 09.10.17
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 11
Trader93 befindet sich auf einem aufstrebenden Ast
Standard

Hey Mat,
vielen Dank für deinen (sehr guten) Hinweis. Je kürzer und einfacher es am Ende ist, desto besser
Mit Zitat antworten
  #6 (permalink)  
Alt 09.10.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.873
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
fehler, fehlermeldung, mql4, programmierung, programmierung metatrader, programmierung mql4


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------