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