Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 04.06.24
traderdoc traderdoc ist offline
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.738
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Nun ja, die angewendete Programmiermethode des EMA-Schneidens ist prinzipiell nicht korrekt. Wenn nach dem Wechsel einer Kerzenperiode der EMA-Wert mit dem Close der aktuellen Kerze (iMA("USDJPY",60,20,0,1,0,0) ermittelt wird, dann kann es prinzipiell passieren, dass genau zum Kerzenwechsel eine Kreuzung stattgefunden hat, aber am Ende dieser Kerze die EMA sich dann doch nicht mehr kreuzen, weil sich innerhalb des Kerzenaufbaus die EMAs auch ändern.

Die korrekte Programmierung einer Kreuzung sieht wie folgt aus:

Code:
void OnTick() {
   if (OldTime != Time[0]) {
      emas1 = iMA(NULL, 60, 20, 0, 1, 0, 1);
      emas2 = iMA(NULL, 60, 20, 0, 1, 0, 2);
      emal1 = iMA(NULL, 60, 50, 0, 1, 0, 1);
      emal2 = iMA(NULL, 60, 50, 0, 1, 0, 2);

      if (emas2 < emal2  && emas1 > emal1) {
         tpbuy = NormalizeDouble(Ask + 0.2, Digits);
         o = OrderSend(Symbol(), 0, 0.05, Ask, 4, 0, tpbuy, "", 0, 0, clrGreen);
      }
      if (emas2 > emal2  && emas1 < emal1) {
         tpsell = NormalizeDouble(Bid - 0.2, Digits);
         o = OrderSend(Symbol(), 1, 0.05, Bid, 4, 0, tpsell, "", 0, 0, clrBlue);
      } 
      OldTime = Time[0];
   }
}
NULL deshalb, weil dann immer das Währungspaar benutzt wird, auf dessen Chart der EA läuft.
Desweiteren müssen die EMA-Werte der letzten (Kerze 1) und der vorletzten (Kerze 2) Kerze benutzt werden, damit nach dem Wechsel der Kerzenperiode eineindeutig eine Kreuzung detektiert wird oder eben nicht.
Digits, damit, egal ob 3- oder 5-Punkt-Währungspaare, korrekt auf die letzte Stelle gerundet werden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten