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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43678
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 243
Gesamt: 243
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 12.03.14
Neues Mitglied
 
Registriert seit: Mar 2014
Beiträge: 14
Postbote befindet sich auf einem aufstrebenden Ast
Standard EA dreier MA crossover

Hallo zusammen,

ich bin noch ganz neu in der Mql4-Welt. Dennoch habe ich mal versucht einen einfachen EA über einen dreier MA Crossover zu schreiben.

PHP-Code:
int start()
  {

   
double Ma1 iMA(NULL,0,Ma1,Ma1Shift,Ma1Method,Ma1AppliedTo,1);
   
double Ma2 iMA(NULL,0,Ma2,Ma2Shift,Ma2Method,Ma2AppliedTo,1);
   
double Ma3 iMA(NULL,0,Ma3,Ma3Shift,Ma3Method,Ma3AppliedTo,1);
   
double Ma11 iMA(NULL,0,Ma1,Ma1Shift,Ma1Method,Ma1AppliedTo,2);
   
double Ma21 iMA(NULL,0,Ma2,Ma2Shift,Ma2Method,Ma2AppliedTo,2);
  
   
   if(
Ma1>Ma2)
      if(
Ma1>Ma3)
         if(
Ma2>Ma3)
            if(
Ma11<Ma21)
               if(
OrdersTotal()==0)
                  
OrderSend(Symbol(),OP_BUY,LotSize,Ask,3,Ask-(StopLoss*pips),Ask+(TakeProfit*pips),NULL,MagicNumber,0,Green); 
Hier ist mal der Ausschnitt. Irgendwie habe ich Probleme mit der If-Bedingung. Schreibe ich einen EA für zwei Ma, dann funktioniert alles wie es sein sollte. Erweitere ich den EA um einen weiteren MA, dann wird überhaupt kein Trade mehr ausgeführt.
Ich hätte die Bedingungen auch in einer If-Schleife schreiben können, doch das hat auch nicht funktioniert. Kann mir da jemand weiterhelfen?

Vielen Dank
Postbote
  #2 (permalink)  
Alt 12.03.14
Benutzerbild von fxdaytrader
Premium Mitglied
 
Registriert seit: Dec 2013
Ort: hier und dort
Beiträge: 433
fxdaytrader befindet sich auf einem aufstrebenden Ast
Standard

hänge den EA doch mal hier mit dran, ...
  #3 (permalink)  
Alt 12.03.14
Neues Mitglied
 
Registriert seit: Feb 2014
Ort: Schöneck
Beiträge: 18
antikythera befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
probiers mal hiermit:
Code:
int start() 
  { 

   double Ma1 = iMA(NULL,0,MA_Periode1,Ma1Shift,Ma1Method,Ma1AppliedTo,1); 
   double Ma2 = iMA(NULL,0,MA_Periode2,Ma2Shift,Ma2Method,Ma2AppliedTo,1); 
   double Ma3 = iMA(NULL,0,MA_Periode3,Ma3Shift,Ma3Method,Ma3AppliedTo,1); 
   double Ma11 = iMA(NULL,0,MA_Periode11,Ma1Shift,Ma1Method,Ma1AppliedTo,2); 
   double Ma21 = iMA(NULL,0,MA_Periode21,Ma2Shift,Ma2Method,Ma2AppliedTo,2); 
    
   if(Ma1>Ma2 && Ma1>Ma3 && Ma2>Ma3 && Ma11<Ma21 && OrdersTotal()==0) OrderSend(Symbol(),OP_BUY,LotSize,Ask,3,Ask-(StopLoss*pips),Ask+(TakeProfit*pips),NULL,MagicNumber,0,Green);
habs jetzt nicht überprüft - müsste aber so stimmen.

Gruß
antikythera
  #4 (permalink)  
Alt 12.03.14
Neues Mitglied
 
Registriert seit: Mar 2014
Beiträge: 14
Postbote befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

Danke für die Hilfe.
Genauso hatte ich es im ersten Schritt versucht. Trotzdem wird beim Backtesting kein Trade ausgeführt. Programmiere ich dieses allerdings nur für zwei MA, dann funktioniert alles einwandfrei.
Ich habe irgendwie den Verdacht, dass mit der if-Funktion irgendwas nicht stimmt, aber das sind nur Mutmaßungen eines Anfängers .

Vielleicht weiß jemand mehr?
  #5 (permalink)  
Alt 12.03.14
Neues Mitglied
 
Registriert seit: Feb 2014
Ort: Schöneck
Beiträge: 18
antikythera befindet sich auf einem aufstrebenden Ast
Standard

in Deiner Version sind zwei Fehler:

1. double Ma1 = iMA(NULL,0, >Ma1< ,Ma1Shift,Ma1Method,Ma1AppliedTo,1);
die Variable Ma1 in iMA(..., ..., Ma1 muß durch eine Variable ersetzt werder die die Periode des MA beinhaltet. (sh. oben)

2. die if-Entscheidungen: if(Ma1>Ma2) und if(Ma11<Ma21) heben sich in Deinem Code gegenseitig auf, somit kann das nicht funktionieren

double Ma1 = iMA(NULL,0,Ma1,Ma1Shift,Ma1Method,Ma1AppliedTo,1); <---------
double Ma2 = iMA(NULL,0,Ma2,Ma2Shift,Ma2Method,Ma2AppliedTo,1); <---------
double Ma3 = iMA(NULL,0,Ma3,Ma3Shift,Ma3Method,Ma3AppliedTo,1);
double Ma11 = iMA(NULL,0,Ma1,Ma1Shift,Ma1Method,Ma1AppliedTo,2); <---------
double Ma21 = iMA(NULL,0,Ma2,Ma2Shift,Ma2Method,Ma2AppliedTo,2); <---------

if(Ma1>Ma2) <---------
if(Ma1>Ma3)
if(Ma2>Ma3)
if(Ma11<Ma21) <---------
if(OrdersTotal()==0) . . .
  #6 (permalink)  
Alt 13.03.14
Benutzerbild von fxdaytrader
Premium Mitglied
 
Registriert seit: Dec 2013
Ort: hier und dort
Beiträge: 433
fxdaytrader befindet sich auf einem aufstrebenden Ast
Standard

simples Teil, s. Anhang, da öffnet er zumindest trades ...
Angehängte Dateien
Dateityp: ex4 3ma.test EA.ex4 (6,8 KB, 3x aufgerufen)
Dateityp: mq4 3ma.test EA.mq4 (4,8 KB, 13x aufgerufen)
  #7 (permalink)  
Alt 13.03.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von antikythera Beitrag anzeigen
in Deiner Version sind zwei Fehler:

1. double Ma1 = iMA(NULL,0, >Ma1< ,Ma1Shift,Ma1Method,Ma1AppliedTo,1);
die Variable Ma1 in iMA(..., ..., Ma1 muß durch eine Variable ersetzt werder die die Periode des MA beinhaltet. (sh. oben)

2. die if-Entscheidungen: if(Ma1>Ma2) und if(Ma11<Ma21) heben sich in Deinem Code gegenseitig auf, somit kann das nicht funktionieren

double Ma1 = iMA(NULL,0,Ma1,Ma1Shift,Ma1Method,Ma1AppliedTo,1); <---------
double Ma2 = iMA(NULL,0,Ma2,Ma2Shift,Ma2Method,Ma2AppliedTo,1); <---------
double Ma3 = iMA(NULL,0,Ma3,Ma3Shift,Ma3Method,Ma3AppliedTo,1);
double Ma11 = iMA(NULL,0,Ma1,Ma1Shift,Ma1Method,Ma1AppliedTo,2); <---------
double Ma21 = iMA(NULL,0,Ma2,Ma2Shift,Ma2Method,Ma2AppliedTo,2); <---------

if(Ma1>Ma2) <---------
if(Ma1>Ma3)
if(Ma2>Ma3)
if(Ma11<Ma21) <---------
if(OrdersTotal()==0) . . .
Na ja, es bleibt eigentlich bei nur einem Fehler und das ist der von Dir richtig gefundene Fehler beim Setzen der Periode der MAs. Die sollte in den externen Variablen definiert werden.
Die o.g. 1. und 4. Abfrage (Pfeile) werden sich deshalb nicht "aufheben", weil die Zuweisung der Werte zu Ma1 und MA2 aus den Indikatorabfragen 1 und 2 in die Abfragen 4 bzw. 5 (wieder fälschlicherweise als Periode) eingesetzt werden und daraus die Ma-Werte Ma 11 und Ma21 berechnet werden.
Da die Perioden als int-Werte verarbeitet werden, die o.g. Perioden aber als Double-Werte eingesetzt werden, ist so oder so zweifelhaft, was die Indiaktorabfragen ergeben, wenn aus den Double-Werten durch Abschneiden der Nachkommastelle ein int-Wert reduziert wird.

Also einfach in den externen Variablen den MAs die Perioden zuweisen und alles ist gut.
Die Abfragelogik der Kreuzung ist soweit in Ordnung.

traderdoc
  #8 (permalink)  
Alt 13.03.14
Neues Mitglied
 
Registriert seit: Feb 2014
Ort: Schöneck
Beiträge: 18
antikythera befindet sich auf einem aufstrebenden Ast
Standard

Stimmt, die Ma1/Ma2 und Ma11/Ma21 heben sich nicht gegenseitig auf - hatte die unterschiedlichen Shift Parameter ganz rechts übersehen.

Sorry
  #9 (permalink)  
Alt 13.03.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Die kommen noch dazu. Aber selbst wenn dort auch eine 1 gestanden hätte, würde für Ma11 und Ma21 etwas anderes berechnet werden als für Ma1 und Ma2. Erklärung in meinem vorhergehenden Post.

traderdoc
  #10 (permalink)  
Alt 23.03.14
Neues Mitglied
 
Registriert seit: Mar 2014
Beiträge: 14
Postbote befindet sich auf einem aufstrebenden Ast
Standard

Super, vielen Dank!!! Ist echt nett von Euch!

Es funktioniert alles einwandfrei, genauso wie mir das vorgestellt habe.
Thema geschlossen

Lesezeichen

Stichworte
crossover, dreier ma crossover, ea, expert advisor, ma, ma crossover, moving average, mql4, programmierung, programmierung metatrader

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 11:04 Uhr.





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