MACD Cross EA

 

Guten Tag,


seit kurzem probiere ich mich im Programmieren von einfachsten EA's. Ich habe lediglich rudimentäre Java-Kenntnisse von früher und bin im Moment ziemlich hilflos. Ich durchstöbere seit Tagen das Internet finde jedoch keine Lösung.

Ich hoffe mir kann hier jemand helfen und bedanke mich im Voraus für die Hilfe :)


Zu meinem Problem: 

Ich möchte einen simplen EA Programmieren, der bspw. Long geht, wenn die MACD-Linie die Signal-Linie von unten nach oben durchstößt. Das ganze aber nur unter der Grundvoraussetzung, dass sich die Linien unter der 0- Linie kreuzen und der Chart unter einem 200er EMA verläuft. Ich habe auch schon etwas verschriftlicht, komme jedoch nicht an den Wert der Signal-Linie....


  #include<Trade\Trade.mqh>
   CTrade trade;

      


void OnTick()
  {
      double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
      double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
      double MyMovingAverage = iMA(_Symbol, _Period, 200, 0, MODE_EMA, PRICE_CLOSE, 0); 
      string signal = "";
      double myPriceArray[];
      int MacdDefinition = iMACD(_Symbol,_Period,12,26,9,PRICE_CLOSE);
      CopyBuffer(MacdDefinition,0,0,3,myPriceArray);
      float MacdValue = (myPriceArray[0]);
      
      
      
      if (MacdValue>0 && MyMovingAverage>Ask)
         signal = "sell";
      
      if (MacdValue<0 && MyMovingAverage<Bid)
         signal = "buy";
      
      if (signal =="sell" && PositionsTotal()<1)
         trade.Sell(0.10,NULL,Bid,(Bid+100 * _Point),(Bid-150 * _Point),NULL);
      
      
      if (signal =="buy" && PositionsTotal()<1)
         trade.Buy(0.10,NULL,Bid,(Bid-100 * _Point),(Bid+150 * _Point),NULL);
      
      Comment ("Das aktuelle Signal ist gerade: ",signal);
  }
 

Bevor Du viel Zeit verlierst, in dem Du alle Fehler ausprobierst hier etwas zu Lesen:

https://www.mql5.com/de/articles/648 Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
https://www.mql5.com/de/articles/650 Das MQL5-Kochbuch: Entwicklung eines mehrwährungsfähigen Expert Advisors mit unbegrenzter Anzahl von Parametern
https://www.mql5.com/de/articles/651 Das MQL5-Kochbuch: Schreiben der Historie von Abschlüssen in eine Datei und Erstellen von Bilanzdiagrammen für jedes Symbol in Excel
https://www.mql5.com/de/articles/496 // Quickstart for newbies

Lies mal den Artikel:
https://www.mql5.com/de/articles/211: Orders, Positions und Abschlüsse in MetaTrader 5


Außerdem Du hast bereits einen EA der nach dem MACD handelt, schu mal hier: ...\Experts\Examples\MACD

Denk dran,, es gibt fast nichts, was nicht schon für MT4/5 programmiert wurde, also erst mal suchen (oben rechts de Lupe).

Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
  • www.mql5.com
In diesem Beitrag wird die Umsetzung einer einfachen Herangehensweise an einen mehrwährungsfähigen Expert Advisor beschrieben. Das heißt, Sie werden in der Lage sein, den Expert Advisor für das Testen/den Handel unter identischen Bedingungen aber mit unterschiedlichen Parametern je Symbol einzurichten. Als Beispiel erstellen wir ein Muster für zwei Symbole auf eine Weise, mit der Sie nach Bedarf zusätzliche Symbole hinzufügen können, indem Sie kleine Änderungen am Code vornehmen.
 
Carl Schreiber:

Bevor Du viel Zeit verlierst, in dem Du alle Fehler ausprobierst hier etwas zu Lesen:

https://www.mql5.com/de/articles/648 Das MQL5-Kochbuch: Mehrwährungsfähiger Expert Advisor – eine einfache, saubere und schnelle Herangehensweise
https://www.mql5.com/de/articles/650 Das MQL5-Kochbuch: Entwicklung eines mehrwährungsfähigen Expert Advisors mit unbegrenzter Anzahl von Parametern
https://www.mql5.com/de/articles/651 Das MQL5-Kochbuch: Schreiben der Historie von Abschlüssen in eine Datei und Erstellen von Bilanzdiagrammen für jedes Symbol in Excel
https://www.mql5.com/de/articles/496 // Quickstart for newbies

Lies mal den Artikel:
https://www.mql5.com/de/articles/211: Orders, Positions und Abschlüsse in MetaTrader 5


Außerdem Du hast bereits einen EA der nach dem MACD handelt, schu mal hier: ...\Experts\Examples\MACD

Denk dran,, es gibt fast nichts, was nicht schon für MT4/5 programmiert wurde, also erst mal suchen (oben rechts de Lupe).

Okay habe mich ein wenig eingelesen. Danke dir :) 
 
Tron183:

Guten Tag,


seit kurzem probiere ich mich im Programmieren von einfachsten EA's. Ich habe lediglich rudimentäre Java-Kenntnisse von früher und bin im Moment ziemlich hilflos. Ich durchstöbere seit Tagen das Internet finde jedoch keine Lösung.

Ich hoffe mir kann hier jemand helfen und bedanke mich im Voraus für die Hilfe :)


Zu meinem Problem: 

Ich möchte einen simplen EA Programmieren, der bspw. Long geht, wenn die MACD-Linie die Signal-Linie von unten nach oben durchstößt. Das ganze aber nur unter der Grundvoraussetzung, dass sich die Linien unter der 0- Linie kreuzen und der Chart unter einem 200er EMA verläuft. Ich habe auch schon etwas verschriftlicht, komme jedoch nicht an den Wert der Signal-Linie....


double         MACDBuffer[];
double         SignalBuffer[];
//--- Eine Variable um Handle des Indikators iMACD zu speichern
int    handle;
//--- Variable für Speicherung
string name=symbol;
//--- Name des Indikators auf dem Chart
string short_name;
//--- die Anzahl der Werte im Indikator Moving Averages Convergence/Divergence gespeichert wird
int    bars_calculated=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Bindung von Arrays zu den Indikator-Puffern
   SetIndexBuffer(0,MACDBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);

Das ist ein Ausschnitt aus der OnInit() des iMACD und hier stehen die Buffernummern. Du machst Dir einen Signal Array und greifst wie gewohnt die Zahlen mit dem Copybuffer und MACD handle ab, nur eben mit der anderen Buffernummer. Was macht denn bei Dir die "12" da?!?

 


Du darfst auch nicht das Handle des Indi in die OnTick geben, und wenn du ArraySetAsSeries nicht verwendest dann gehts auch nicht. 

Schau dir doch mal ein Beispiel in der Codebase an bzw. den fertigen EA der mit MQL5 mitgeliefert wird

 
Tron183:

Guten Tag,


seit kurzem probiere ich mich im Programmieren von einfachsten EA's. Ich habe lediglich rudimentäre Java-Kenntnisse von früher und bin im Moment ziemlich hilflos. Ich durchstöbere seit Tagen das Internet finde jedoch keine Lösung.

Ich hoffe mir kann hier jemand helfen und bedanke mich im Voraus für die Hilfe :)


Zu meinem Problem: 

Ich möchte einen simplen EA Programmieren, der bspw. Long geht, wenn die MACD-Linie die Signal-Linie von unten nach oben durchstößt. Das ganze aber nur unter der Grundvoraussetzung, dass sich die Linien unter der 0- Linie kreuzen und der Chart unter einem 200er EMA verläuft. Ich habe auch schon etwas verschriftlicht, komme jedoch nicht an den Wert der Signal-Linie....


Hmm - probier doch mal sowas hier:

if(
iMACD(NULL,TIME,EMA_KURZ,EMA_LANG,SIGNAL_PERIODEN,PRICE_CLOSE,MODE_MAIN,2) < iMACD(NULL,TIME,EMA_KURZ,EMA_LANG,SIGNAL_PERIODEN,PRICE_CLOSE,MODE_SiGNAL,2)
&& iMACD(NULL,TIME,EMA_KURZ,EMA_LANG,SIGNAL_PERIODEN,PRICE_CLOSE,MODE_MAIN,1) > iMACD(NULL,TIME,EMA_KURZ,EMA_LANG,SIGNAL_PERIODEN,PRICE_CLOSE,MODE_SIGNAL,1)
&& iMACD(NULL,PERIODE,EMA_KURZ,EMA_LANG,SIGNAL_PERIODEN,PRICE_CLOSE,MODE_MAIN,1) < 0
&& iMACD(NULL,PERIODE,EMA_KURZ,EMA_LANG,SIGNAL_PERIODEN,PRICE_CLOSE,MODE_SIGNAL, 1) < 0
&& Ask < iMA(NULL,TIME,SMA_PERIODEN,0,MODE_EMA,PRICE_CLOSE,1) 
)
        {
        Handelsaktion;
        }


###Erläuterungen###
NULL bewirkt, dass das aktuelle Symbol eingesetzt wird,
//im iMACD
TIME ist der TIMEFRAME, z.B. für M5 musst Du PERIOD_M5 einsetzen
EMA_KURZ / EMA_LANG sind die Periodenzahlen der entsprechenden EMAs des MACD
SIGNAL_PERIODEN ist die Periodenanzahl des MACD-SIGNALS
PRICE_CLOSE bedeutet, dass es auf den Schlusskurs berechnet wird
MODE_MAIN bewirkt, dass der Histogrammbalken ausgelesen wird, MODE_SIGNAL entsprechend der Signalwert (die Linie)
Die 1 bzw. 2 bewirkt, dass die vorletzte oder vorvorletzte Kerze ausgelesen wird. Die werden von hinten abgezählt, 0 ist die aktuelle Kerze.
//im iMA
TIME s.o.
Die erste 0 nicht verändern, die Verschiebung stellst Du auch hier mit der letzten Zahl ein.
SMA_PERIODEN wären hier deine 200
MODE_EMA stellt das auf EMA ein, gibt auch z.B. MODE_SMA
PRICE_CLOSE s.o.

Die ersten beiden Bedingungen prüfen, ob der Schnitt eintritt, Bedingung 3 und 4 prüfen, ob alles unter der 0-Linier liegt, Zeile 5 schaut, 
ob der aktuelle Ask-Kurs unter dem EMA200 liegt.
Handelsaktion musst Du dann noch selber entwickeln, aber da muss dann Deine Long-Order geschrieben werden.

Viel Spaß beim Implementieren.

Grüße

McGirg

Grund der Beschwerde: