|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Expert-Advisors Expert-Advisors für Metatrader 4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Ungleiche Funtion bei unterschiedlichen Forex-Paaren
Guten Tag in die Runde,
Ich habe eine grundsätzliche Frage an die Experten unter Euch. Hier die Einzelheiten: Das habe ich gemacht: Ich habe EAs programmiert, die eine Position eröffnen sollen, wenn sich zwei EMAs schneiden (eigentlich keine Raketenwissenschaft). Diese EAs habe ich mit den Parametern von Minor-Forexpaaren versehen und über ein VPS mehrere Tage laufen lassen. Ich habe ein Demokonto bei IC-Markets und nutze einen VPS von mql5.com. In diesen Tagen hat alles korrekt funktioniert. Danach habe ich die selben EAs mit den Parametern von Major-Paaren versehen. Alle anderen Teile der EAs blieben unverändert. Ergebnis: - einige Positionen wurden korrekt eröffnet - einige Positionen wurden eröffnet, ohne daß sich die EMAs schnitten - einige Postionen werden einige Zeit nach oder vor (bis 25 Minuten) einem Schneiden eröffnet Dieses Ergebnis ist mir unerklärlich. Hier meinen Fragen: - Weiß jemand, ob sich der Handel von Major-Paaren von dem Handel von Minor-Paaren unterscheidet (evtl. Manipulation)? - Warum laufen identische EAs mit unterschiedlichen Währungs-Paaren nicht gleich? - Weiß jemand Abhilfe? Hier exemplarisch ein EA: | void OnTick() { if(OldTime != Time[0]) { emas=iMA("USDJPY",60,20,0,1,0,0); emal=iMA("USDJPY",60,50,0,1,0,0); if(odty==1) { if(emas>emal) { odty=0; tpbuy=NormalizeDouble((Ask+0.200),3); int o=OrderSend("USDJPY",0,0.05,Ask,4,0,tpbuy,0,0,clrG reen); } } if(odty==0) { if(emas<emal) { odty=1; tpsell=NormalizeDouble((Bid-0.200),3); int p=OrderSend("USDJPY",1,0.05,Bid,4,0,tpsell,0,0,clr Green); } } OldTime = Time[0]; } } Für Eure Antworten bin ich dankbar. Viele Grüße aus Norddeutschland. |
|
|||
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]; } } 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. |
Lesezeichen |
Stichworte |
ema, majorpaare, minorpaare |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|