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)
-   -   EA dreier MA crossover (http://www.expert-advisor.com/forum/showthread.php?t=3550)

Postbote 12.03.14 11:57

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

fxdaytrader 12.03.14 13:18

hänge den EA doch mal hier mit dran, ...

antikythera 12.03.14 15:17

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

Postbote 12.03.14 18:35

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?

antikythera 12.03.14 19:07

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) . . .

fxdaytrader 13.03.14 02:39

Liste der Anhänge anzeigen (Anzahl: 2)
simples Teil, s. Anhang, da öffnet er zumindest trades ...

traderdoc 13.03.14 12:58

Zitat:

Zitat von antikythera (Beitrag 25617)
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

antikythera 13.03.14 17:40

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

Sorry:D

traderdoc 13.03.14 18:39

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

Postbote 23.03.14 11:06

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

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


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