Hallo zusammen,
Hat damit jemand Erfahrung? Woran könnte das liegen?Vergleich doch mal die historischen Positionseröffnungen Deines Echt-Kontos mit denen bei einem Debugging mit historischen Kursen..
Daran rätsle ich auch schon lange herum.
An den Bar-Daten liegt es jedenfalls nicht.
Kleines Testprogramm und dessen Ergebnisse:
MqlRates rates[]; int toCopy = 2; int toPrint=10; int OnInit() { ArraySetAsSeries(rates,true); return(INIT_SUCCEEDED); } void OnTick() { if(!isNewBar()) return; if(CopyRates(_Symbol,_Period,0,toCopy,rates)!=toCopy) return; Print(" T: ",TimeToString (rates[1].time ), " O: ",DoubleToString(rates[1].open ,_Digits), " H: ",DoubleToString(rates[1].high ,_Digits), " L: ",DoubleToString(rates[1].low ,_Digits), " C: ",DoubleToString(rates[1].close,_Digits)); toPrint--; if(toPrint<=0) ExpertRemove(); } bool isNewBar() { static datetime barTime=NULL; if(barTime==NULL) barTime=iTime(_Symbol,_Period,0); if(barTime==iTime(_Symbol,_Period,0)) return(false); barTime=iTime(_Symbol,_Period,0); return(true); }
Ergebnis realeTicks:
Ergebnis 1M OHLC:
Kann man daraus folgern, daß die Unterschiede also nur in der aktuellen Kerze(Bar) entstehen???
Hier wird beschrieben wie die Ticks generiert werden.
https://www.metatrader5.com/en/terminal/help/algotrading/tick_generation
- www.metatrader5.com
Otto Du vergisst den Schlupf, der zB. bei News ganz besonders groß wird, weil Broker dann keine Kurse stelle für ein paar Momente!
So was macht der Tester nicht, daher zeigt das nur ein Ausführungsvergleich!
Otto Du vergisst den Schlupf, der zB. bei News ganz besonders groß wird, weil Broker dann keine Kurse stelle für ein paar Momente!
So was macht der Tester nicht, daher zeigt das nur ein Ausführungsvergleich!
Da hast du vollkommen recht! Im Extremfall kann das mehrere Sekunden werden!!!
Im Tester habe ich das Delay auf 50ms eingestellt. Das ist aber nicht ausschlaggebend, sondern die Verzögerung beim Broker.
Ich habe die Daten einer einzelnen Bar als Dateien extrahiert. Wer sich die Mühe machen möchte das zu analysieren ist herzlich dazu eingeladen.
1M_OHC:
T: 2019.01.04 00:00 O: 1.26334 H: 1.26334 L: 1.26334 C: 1.26334 T: 2019.01.04 00:00 O: 1.26334 H: 1.26334 L: 1.26323 C: 1.26323 T: 2019.01.04 00:00 O: 1.26334 H: 1.26364 L: 1.26323 C: 1.26364 T: 2019.01.04 00:00 O: 1.26334 H: 1.26364 L: 1.26323 C: 1.26354 T: 2019.01.04 00:00 O: 1.26334 H: 1.26364 L: 1.26323 C: 1.26356 T: 2019.01.04 00:00 O: 1.26334 H: 1.26364 L: 1.26323 C: 1.26348 T: 2019.01.04 00:00 O: 1.26334 H: 1.26366 L: 1.26323 C: 1.26366 T: 2019.01.04 00:00 O: 1.26334 H: 1.26366 L: 1.26323 C: 1.26360 T: 2019.01.04 00:00 O: 1.26334 H: 1.26366 L: 1.26323 C: 1.26360 T: 2019.01.04 00:00 O: 1.26334 H: 1.26366 L: 1.26323 C: 1.26356 T: 2019.01.04 00:00 O: 1.26334 H: 1.26366 L: 1.26323 C: 1.26365 T: 2019.01.04 00:00 O: 1.26334 H: 1.26366 L: 1.26323 C: 1.26361 T: 2019.01.04 00:00 O: 1.26334 H: 1.26366 L: 1.26323 C: 1.26364 T: 2019.01.04 00:00 O: 1.26334 H: 1.26366 L: 1.26323 C: 1.26360 T: 2019.01.04 00:00 O: 1.26334 H: 1.26370 L: 1.26323 C: 1.26370 T: 2019.01.04 00:00 O: 1.26334 H: 1.26370 L: 1.26323 C: 1.26370 T: 2019.01.04 00:00 O: 1.26334 H: 1.26370 L: 1.26323 C: 1.26368 T: 2019.01.04 00:00 O: 1.26334 H: 1.26370 L: 1.26323 C: 1.26370 T: 2019.01.04 00:00 O: 1.26334 H: 1.26370 L: 1.26323 C: 1.26357 T: 2019.01.04 00:00 O: 1.26334 H: 1.26370 L: 1.26323 C: 1.26365
Und reale Ticks: Die hänge ich als Datei dran, sind fast 1700 Zeilen(Ticks)!!!
Otto, Ticks sind OHLC sind zwei verschiedene Dinge!
Du kriegst NIE alle Ticks(*), vorallem nicht, "Wenn's schnell geht"! Aber in OHLC schaut es so aus als hättest Du sie bekommen.
Das führt dazu, dass zB. plötzlich ein High in der 1M-Bar existiert, dessen Tick Du nie bekommen hast!
Du müsstest die Ticks einzeln mitschreiben und dann mit OHLC vergleichen - ein Demokonto liefert dafür wahrscheinlich auch nicht das, was der Broker auf dem Echtgeldkonten macht!
------------------------------
Otto, Ticks sind OHLC sind zwei verschiedene Dinge!
Du kriegst NIE alle Ticks(*), vorallem nicht, "Wenn's schnell geht"! Aber in OHLC schaut es so aus als hättest Du sie bekommen.
Das führt dazu, dass zB. plötzlich ein High in der 1M-Bar existiert, dessen Tick Du nie bekommen hast!
Du müsstest die Ticks einzeln mitschreiben und dann mit OHLC vergleichen - ein Demokonto liefert dafür wahrscheinlich auch nicht das, was der Broker auf dem Echtgeldkonten macht!
------------------------------
Und was macht dann der 1 Minute OHLC-Tester? Nimmt der immer die "optimalen" Kurse?
Das ist der Tester mit 1 Minute OHLC-Modelling bei einem M5 Chart
Das ist die gleiche Sequenz in M5 mit einem realen Tick-Modelling und einer aktiven isNewBar()-Funktion:
Scheinbar war der EA zu der Zeit als Low-Kurs-Tick erreicht war in der Tick-Simulation gerade inaktiv, da noch kein neuer Bar angebrochen war, während das 1 Minute OHLC-Modelling scheinbar auch Low-Kurse in der laufenden Minute berücksichtigt, was die isNewBar()-Funktion ja nicht kann.
Damit handelt das Minute OHLC-Modelling natürlich deutlich besser, wie wir in der Grafik erkennen. Die Frage ist also:
Kann man eine isNewBar()-Funktion basteln, die das auch so macht???
Wenn ich jetzt keinem Denkfehler unterliege dürfte das ja unmöglich sein, da der High und der Low ja dann noch nicht bekannt sind wenn ein neuer
Bar anbricht...das 1 Minute OHLC-Modelling wäre demnach für die Tonne...
Und was macht dann der 1 Minute OHLC-Tester? Nimmt der immer die "optimalen" Kurse?
Das ist der Tester mit 1 Minute OHLC-Modelling bei einem M5 Chart
Das ist die gleiche Sequenz in M5 mit einem realen Tick-Modelling und einer aktiven isNewBar()-Funktion:
Scheinbar war der EA zu der Zeit als Low-Kurs-Tick erreicht war in der Tick-Simulation gerade inaktiv, da noch kein neuer Bar angebrochen war, während das 1 Minute OHLC-Modelling scheinbar auch Low-Kurse in der laufenden Minute berücksichtigt, was die isNewBar()-Funktion ja nicht kann.
Damit handelt das Minute OHLC-Modelling natürlich deutlich besser, wie wir in der Grafik erkennen. Die Frage ist also:
Kann man eine isNewBar()-Funktion basteln, die das auch so macht???
Wenn ich jetzt keinem Denkfehler unterliege dürfte das ja unmöglich sein, da der High und der Low ja dann noch nicht bekannt sind wenn ein
neuer Bar anbricht...das 1 Minute OHLC-Modelling wäre demnach für die Tonne...
Du könntest OHLC der aktuellen, noch nicht fertigen Bar verwenden, dann "sieht" der EA auch die High/Low-Ticks, die er nicht bekopmmen oder
die er ignoriert hat (um immer mit dem letzten Tick zu arbeiten).
Du könntest OHLC der aktuellen, noch nicht fertigen Bar verwenden, dann "sieht" der EA auch die High/Low-Ticks, die er nicht bekopmmen
oder die er ignoriert hat (um immer mit dem letzten Tick zu arbeiten).
Nein, auch die aktuelle unvollständige Kerze (nach alter Zählung mit Index 0) haben ein Open,High, Low,Close, die letzten drei können sich allerdings ändern.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo zusammen,
ich habe mein System im Tester mit mit dem "1 Minute OHLC"-Chart entwickelt, getestet und optimiert, da der über längere Zeiträume von >1Jahr deutlich schneller durchläuft. Leider verhält sich das System in echt bzw. auf Tick-Ebene dann ganz und gar nicht so wie in den Tests.
Ich habe deshalb hinter die OnTick() folgende Bedigung geschaltet:
mit
Das heisst, der EA soll auch im Echtbetrieb nur einmal pro Minute bzw. bei einem neu eröffneten Minutenbar durchlaufen werden und dann Handelsentscheidungen treffen, so wie in den Tests, wo er mangels Daten ja nicht anderes machen konnte.
Das tut er jetzt auch, nur weichen die Testergebnisse auf echter Tickbasis mit dieser Funktion jetzt immer noch von den Testergebnissen auf M1-Basis ohne diese Funktion ab.
Hat damit jemand Erfahrung? Woran könnte das liegen?