Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Tipps und Tricks für Backtest und Optimierung von Strategien

Geschrieben

So,

hier möchte ich mich mal über das richtige Backtesten und Optimieren auslassen.

Vielleicht erspare ich so dem einen oder anderen ein Haufen Arbeit und Zeit.

 

Zunächst brauch man eine Strategie. Man kann sich auch aus den vorgefertigen Strategieschnipels selbst eine zusammenstellen. Das soll jetzt aber nicht das Thema hier sein.

 

Zum Thema:

Je genauer die Datenhistorie, desto besser werden die Backtests.

In der Regel kann man immer M1 - Close - Daten beim Broker downloaden. Bei MBT für ein halbes Jahr etwa, bei IB 1 Jahr.

Für viele Strategien reicht eine Datenauflösung von M1 aus. Dazu öffnet man einfach einen Chart in MC und stellt die darzustellende Zeit (zB vom 1.1.2010 bis heute) und das Timeframe auf M1. Nun werden die Daten geladen.

Aus den M1-Daten bastelt sich MC automatisch auch M30, H1, H4 und alle anderen Daten.

 

Man sollte, um sich selbst eine Datenbank aufzubauen, alle interessanten Quotes aller Instrumente selbst aufnehmen. Dazu nimmt man den Quote Manager.

Im Quote Manager kann man einstellen, welche Daten bei welchem Broker recorded werden sollen, und in welcher Auflösung. Ich empfehle, lieber zu viele Instrumente einzustellen als zu wenig. Ein alter Lappi und eine normale DSL-Verbindung schafft es problemlos, alle Tick/M1 und je Bid/Ask/Close-Daten von allen FX-pairs bei MBT aufzunehmen. Welche Daten recordet werden sollen, stellt man ein indem man auf das Instrument klickt und dann "Fields to collect", dann erscheint das Fenster:

 

HowToBacktest1.JPG

 

 

Mit Klick auf "Apply to all symbols" wird das für alle übernommen.

Anschließend markiert man alle "blau" und klickts rechts und dann auf "Connect...".

 

Nun recordet der QM alle Daten. Schließt man den QM (am Wochenende), dann überträgt er die Daten vom Cache in die richtige Datenbank.

Das sollte man wissen, wenn man ab und an die Datenbank auf einen anderen Rechner kopiert, um mit MC im Offlinemodus Backtests durchzuführen.

 

Wichtig ist noch die Einstellung der richtigen Timezones. Ich habe mir im QM eine eigene "Exchange & ECN" - Vorlage erstellt für MBT, um die Daten aufzunehmen.

 

HowToBacktest2.JPG

 

 

 

Haben wir eine gute Datenbasis aufgebaut, können wir richtig backtesten.

 

Den Portfolio Backtester würde ich persönlich nicht nutzen. Er unterstützt (noch) kein IOG (IntraBarOrdergeneration) und auch keinen Bar Magnifer. Stattdessen lieber aus dem Chart heraus backtesten. Bei einem Backtest wird MC blockiert, man kann nichts anderes mehr machen. Deshalb ist es ratsam, für längere Optimierungen eine 2. Instanz von MC auf demselben Rechner aufzumachen (das geht und ist erlaubt).

 

 

So, wir haben jetzt eine einfache Strategie, welche auf M30 basiert. Die Einstiegsorders werden alle auf M30 generiert. Die Ausstiege, sofern Pipbasiert oder Profit/Lostbasiert, sollen aber auch innerhalb der Bars passieren.

 

Wenn wir das jetzt backtesten, werden die Ausstiege aber erst zum nächsten vollen Bar "abgerechnet". Das fühlt zu Fehlergebnissen.

Deshalb ist es wichtig, die Strategie von Anfang an richtig zu coden.

 

Hilfreich sind die internen MC-Befehle (Auszug):

setprofittarget(Profit);
setstoploss(SL);
setpercenttrainling(Profit, Percenttrailing);

 

Die Befehle sind automatisch intrabar-basiert.

Die Befehle sind aber ungünstig wenn man Pipbasiert arbeiten möchte.

Also als Ausstiegsorders lieber nehmen:

 


if MarketPosition = 1 then Sell ("TPlong") next bar entryprice + (TP * 0.0001) limit;
if MarketPosition = 1 then Sell ("SLlong") next bar entryprice - (SL * 0.0001) stop;

if MarketPosition = -1 then buytocover ("TPshort") next bar entryprice - (TP * 0.0001) limit;
if MarketPosition = -1 then buytocover ("SLshort") next bar entryprice + (SL * 0.0001) stop;

 

Auch diese limit/stop-orders sind intrabarbasiert. Sie werden punktgenau generiert, auch wenn man diesen Kurs nicht zur Verfügung hat.

 

Jetzt kommt aber das Problem bei M30 und relativ engen TP und SL: Innerhalb des M30-Kurses weiß man nur die Daten: OHLC (Open, High, Low, Close). Wann welcher Kurs genau erreicht wird, kann nicht gesagt werden. Es kann also sein, dass die Startegie erst den TP abrechnet obwohl ein enger SL vorher getroffen worden ist auf live. Genaueres dazu, als Beschreibung für Ninjatrafder aber auch für MC gültig, findet man auf DarthTraders Blog.

 

Jetzt gibt es eine Möglichkeit, in MC die Genauigkeit zu erhöhen:

Aktivierung des "Bar magnifers" - siehe Bild unten.

 

HowToBacktest3.JPG

 

 

Man sollte mindestens M1 einstellen. Jetzt rechnet MC also trotz des M30 intern mit M1. Sofern Ticks vorhanden sind, auch diese nehmen!

 

Im Bild sieht man auch gleich oben die Möglichkeit, nicht nur auf Close zu backtesten, sondern auch auf getrennten Bid/Ask-Linien. Das macht Sinn bei Scalpern wenn man die entsprechenden Daten vorher recordet hat.

Voraussetzung ist noch, dass man im Chart das 1. Instrument als Ask einstellt und ein 2. Instrument drüberlegt mit Bid.

 

HowToBacktest4.JPG

 

 

Im Idealfall also backtestet man mit getrennten Ask/Bid-Linien und mit dem "Bar Magnifer 1 Tick". genauer gehts nicht. Entsprechend länger dauert jedoch das Backtesten. Nun wird jedoch der tatsächliche Spread mit einkalkuliert!

 

Intern wird so gerechnet:

Auf den Closedaten der Einstieg, und dann, sofern eine Posi offen ist, wird mit genaueren Ticks der Ausstieg berechnet. Das ist insgesamt recht zeitsparend, da nicht immer alle Ticks durchkalkuliert werden (wenn keine Posi offen ist).

 

 

Möchte man, dass die Einstiege unabhängig vom TF errechnet werden, aktiviert man IntraBarOrderGeneration (In den Parametereinstellungen der letzte Reiter)

 

HowToBacktest5.JPG

 

 

Das macht NUR Sinn, wenn die Einstiege nicht auf den Closedaten basieren sollen, sondern zB rein nach Kursen oder bestimmten, krummen Zeiten etc.

IOG kann man auch fest im Code aktivieren indem man ganz oben reinschreibt:

[intraBarOrderGeneration=true]

 

 

Auch IOG macht nur Sinn mit entsprechend genauen Daten aus dem Bar Magnifer.

Achtung: Nun dauert ein Backtest wesentlich länger, da immer Tickbasiert (oder was man im Bar Magnifer eingestellt hat) gerechnet wird.

 

In den Einstellungen zum Chart noch die Kommission einstellen. Bei FX und MBT ist das zB 0.0000295 $ per share.

Wenn man nicht mit getrennten Bid/Ask-Linien backtestet, noch einen üblichen Spread dazuaddieren (oder bei Slippage dazuaddieren).

 

 

Zusammenfassung:

  • Aus dem Chart heraus backtesten und optimieren
  • Bar Magnifer aktivieren und auf kleinstmögliche TF stellen
  • ggf. getrennt mit Bid/Ask-Kursen backtesten
  • Den Code von Anfang an so schreiben dass er fürs backtesten geeignet ist

 

EDIT:

Danke an Siscop für den Hinweis!

Wichtig ist noch zu wissen, dass Variablen innerhalb eines Bars nicht aktualisiert werden! Will man, dass innerhalb eines Bars Variablen geändert und gespeichert werden, muss man im Code das dieser Variable explizit sagen.

Zu Beginn des Codes legt man ja die Variablen fest, zB

 

Variables:

Lotsize(10000),
Beispielvariable1(true);

 

Will man, dass die Variablen auch innerhalb eines Bars aktualisiert und gespeichert werden, schreibt man vor der Variable folgendes: IntraBarPersist

 

 

Variables:

Lotsize(10000),
IntraBarPersist Beispielvariable1(true);

 

Dasselbe mit Arrays.

Das ist insbesondere bei aktivierten IOG wichtig!

 

 

Hier gehts zu Teil 1: Tipps und Tricks um eine Strategie zu aktivieren

Featured Replies

Geschrieben
Spitzenarbeit :top: wenn du so weitermachst ist das Deutsche MC Handbuch schneller fertig als die MQL Übersetzung :tv:
  • 1 Jahr später...
Geschrieben

Hi Henrik,

 

werde gerade Fan von Dir!

 

Mal ein paar aktuelle Fragen, die Du vielleicht beantworten kannst:

 

1) Mit dem Portfolio-Backtester kann man keine IOG und Bar-Magnifier verwenden? Oder doch?

2) Der Backtester (Chart) nimmt immer Slippage an, auch wenn man nur mit Limitorders arbeitet?

3) Sind Deine MBT Daten wirklich brauchbare, ich habe IB und Zen-Fire im Einsatz,

IB-Daten sind zumindest beim FDAX eine Katastrophe.

 

Gruß,

 

bs.trader

Geschrieben
  • Autor

Hi bstrader!

Schön dass die meine Anleitung gefällt.

 

Zu 1.) Nein, kann man leider noch nicht. Abhilfe schafft es, wenn man den Code der Strategie etwas umschreibt auf zwei Timeframes, eins auf M1 (oder besser, wenn man die Daten hat) und das andere auf das, was man eigentlich benutzt. Man munkelt, dass mit Einführung von MC 64 Bit (angeblich Ende des Jahres) auch IOG und Bar-Magnifer im PB verfügbar sein werden.

 

Zu 2.) Das weiß ich nicht genau, da habe ich nicht drauf geachtet. Einfach mal etwas backtesten und dann Limit und Ausführung vergleichen. Vom logischen her solle er das nicht machen, aber ich denke er macht es bei allen Orders. In Backtests kann man aber nicht genug Slippage raufpacken als kleine Kompensierung der Idealtrades.

 

Zu 3.)MBT ist OK. IB ist ne Katastrophe was historische Daten angeht, übrigens auch was der Livedatenfeed angeht. IB ist in erster Linie ein Broker. IB + Zenfire ist eigentlich das beste, was man bekommen kann.

  • 2 Wochen später...
Geschrieben

Auch von mir ein dickes Danke für dein sehr gut geschriebenes Tutorial zum Backtesting.

Ich fange gerade erst an, mich mit MC zu beschäftigen, und da kommt so verständlich geschriebenes Hintergrundwissen wie gerufen!

Kompliment dafür - und nochmal vielen Dank!

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.