Strategiebildungsprozess (E-mini S&P 500 Futures)

Aufbau einer profitablen Emini-Strategie für ES / TF / EMD

von Mark Fric
In diesem Artikel erkläre ich den kompletten Schritt-für-Schritt-Prozess zum Aufbau einer profitablen, robusten Strategie für ES (E-mini S&P 500 Futures), einschließlich mehrere Stufen verschiedener Robustheitstests.
Dies ist eine Variation meines älteren Artikels über Strategieentwicklungsprozess für Forex.

Bei der Verwendung von Techniken des maschinellen Lernens wie der genetischen Programmierung ist es relativ einfach, Strategien mit schön aussehenden Aktienkurven zu entwickeln. Die Gefahr liegt in der Kurvenanpassung, also der wichtigste Teil des Strategieentwicklungsprozesses ist die Prüfung der Strategie auf ihre Robustheit um sicherzustellen, dass sie nicht an die historischen Daten angepasst ist.
In diesem Artikel erkläre ich, wie ich den doppelten OOS-Filter plus Robustheitstests plus Walk-Forward-Matrix-Test verwende.

Dies ist das Ergebnis

Zur Motivation poste ich die Ergebnisse einer gut funktionierenden Strategie für ES / TF / EMD, die ich mit dem unten beschriebenen Verfahren gefunden habe.

Strategie 238433 für ES/TF/EMD

Die obige Strategie ist in unserem Forum (nur für lizenzierte Benutzer von StrategyQuant) hier veröffentlicht:
https://strategyquant.com/forum/topic/1688-emini-strategy-for-es-tf-emd/
zum Herunterladen zur Verfügung.


Eingaben

Die einzigen Eingaben, die ich verwende, sind meine Erwartungen an die Strategie - ich möchte eine Strategie für ES (E-mini S&P 500) mit einem Zeitrahmen von 15 Minuten erstellen, die profitabel ist und so wenig Drawdowns wie möglich hat. Ich möchte, dass die Strategie robust genug ist, so dass es auch auf andere Futures (TF, EMD) funktioniert, und ich möchte, dass es Walk-Forward-Matrix-Test passieren, um sicherzustellen, dass Re-Optimierung auf dieser Strategie funktioniert.


Prozess der Strategieentwicklung

  1. Beschaffung der Daten
  2. Generierung eines großen Pools potenzieller Kandidaten
  3. Erster Filter - Prüfung auf Nichtvorhandensein einer Probe (OOS)
  4. Zweiter Filter - erneuter Test und zweite OOS-Prüfung
  5. Dritter Filter - GBPUSD-Prüfung
  6. Vierter Filter - Robustheitstests
  7. Fünfter Filter - Walk-Forward-Matrix-Test

1. Beschaffung der Daten

Es gibt einige Unterschiede zwischen Futures und Forex. Zunächst einmal ist die Beschaffung von Daten für Futures etwas schwieriger und teurer. Es gibt keine kostenlosen Datenquellen, und die meisten Broker stellen keine Historie zur Verfügung, die länger als ein paar Monate ist.
Sie können die Daten von einem Broker beziehen, der sie anbietet (Tradestation, wenn Sie deren Kunde sind), oder Sie müssen sich für einen Live-Datenservice anmelden, z. B. Kinetick oder iqFeed.
Es gibt auch einige spezielle Dienste, die keine Live-Daten anbieten, sondern historische Futures-Daten verkaufen. Um sie zu finden, suchen Sie einfach bei Google nach "historical intraday furtures data".

Der zweite Unterschied besteht darin, dass Futures-Kontrakte ein Verfallsdatum haben. Die Kontrakte werden in der Regel nur für 3-4 Monate gehandelt und dann durch eine neuere Version desselben Futures-Kontrakts ersetzt.
Um die Zukunftsdaten für die Strategieentwicklung nutzen zu können, benötigen wir mindestens einige Jahre an Daten in Form von Daueraufträge. Die meisten Datendienste bieten diese Option an, so dass es nur noch darum geht, den Datendienst zu abonnieren und die Daten auf Ihre Handelsplattform herunterzuladen.

Exportieren der Daten aus NinjaTrader
Wenn Sie bereits Daten in Ihrem NinjaTrader haben, müssen Sie diese auch in StrategyQuant kopieren, damit es die generierten Strategien texten kann. Dazu müssen wir die Daten aus NinjaTrader exportieren und in StrategyQuant importieren. Um die Daten zu exportieren, müssen wir den Chart für ES 15 Min öffnen. Stellen Sie sicher, dass Sie die richtige Handelssitzung einstellen. Ich verwende CME US Index Futures RTH Sitzung in diesem Beispiel.
Wenn das Diagramm geöffnet ist, suchen Sie einfach nach SQDataExport Indikator und platzieren Sie ihn auf dem Diagramm. Es exportiert die Daten des aktuell geöffneten Charts in eine Textdatei.

Wiederholen Sie den gleichen Vorgang auch für TF (Mini Russel 2000 Futures) und EMD (E-mini S & P Midcap 400), ebenfalls auf dem 15-Minuten-Zeitrahmen mit der richtigen Handelssitzung.
Wir werden diese Daten später verwenden, um unsere Strategien auf anderen Symbolen als eine Art Robustheitstest zu testen.

Öffnen Sie dann StrategyQuant und erstellen Sie neue Symbole für ES, TF und EMD und importieren Sie die entsprechenden Datendateien. Das Importieren von Daten aus NinjaTrader wird auch in der Benutzerhandbuch.


2. Schaffung eines großen Pools an potenziellen Kandidaten

Im ersten Schritt der Generierung muss ich einfach einen großen Pool von potenziell "guten" Strategien generieren, die ich später auf ihre Robustheit prüfen werde. Ich möchte, dass alle meine anfänglichen Strategien profitabel und (bis zu einem gewissen Grad) robust sind, daher setze ich auch in dieser ersten Phase mehrere Filter ein.

Meine Einstellungen für diesen Schritt
Sie können die Einstellungen, die ich in diesem Schritt verwende, über den unten stehenden Link herunterladen. Klicken Sie mit der rechten Maustaste auf den Link und wählen Sie Link speichern unter...
In StrategyQuant verwenden Sie dann Einstellungen laden, um diese Einstellungsdatei in das Programm zu laden.

build_emini_strategy.xml

Beachten Sie, dass Sie, wenn Sie Ihre Symbole in StrategyQuant anders benannt haben, die Daten manuell einstellen müssen.

Einstellungen erklärt
Zunächst einmal erstelle ich alle meine Strategien für mehrere Symbole. Mein Ziel ist es, eine gute Strategie für ES zu finden, aber ich möchte, dass meine Strategie robust ist - ich möchte also, dass sie auch auf EMD profitabel ist. Ich füge EMD zu den zusätzlichen Daten hinzu, so dass die Strategie jetzt für beide Symbole getestet wird.

Abbildung 1: Einstellung der Daten

Ich werde Daten vom 2.1.2003 bis zum 31.12.2012 verwenden, also 10 Jahre. Der Rest der Daten wird später für weitere OOS-Tests zur Verfügung stehen.

Ich werde den Modus Genetische Evolution verwenden. Die Idee ist, eine Population von 200 Strategien zu erstellen, sie über 30 Generationen zu entwickeln und dann wieder von vorne zu beginnen. Auf diese Weise vermeide ich, dass ich während der Evolution in eine Sackgasse gerate, und die besten Strategien werden kontinuierlich in der Datenbank gespeichert.
Sie können auch sehen, dass die einzige Bedingung für die Ausgangspopulation darin besteht, dass sie mindestens 100 Geschäfte machen muss. Sie muss nicht profitabel sein - die genetische Evolution sollte in der Lage sein, sie zu verbessern.

Abbildung 2: Genetische Optionen

Wir könnten auch die Zufallsgenerierung ohne Evolution verwenden, aber die Evolution sollte die profitablen Strategien schneller finden.

Der letzte wichtige Teil der Einstellung sind die Ranking-Optionen. Ich habe die Datenbank so eingestellt, dass sie die 2000 besten Strategien speichert, weil ich eine gute Grundlage für den weiteren Auswahlprozess haben möchte. Außerdem habe ich als Auswahlkriterium das Verhältnis von Rendite und Drawdown eingestellt - das ist mein Favorit. Sie können auch andere Auswahlkriterien verwenden, vielleicht erhalten Sie dann bessere Ergebnisse.


Abbildung 3: Ranking-Optionen

Eines der wichtigsten Dinge ist es, die anfänglichen Filterkriterien für Strategien in Databank festzulegen. Ich möchte nur Strategien berücksichtigen, die mindestens $2000 im Gewinn sind, ein Return/DD-Verhältnis > 3 haben, mindestens 300 Trades UND ein Return/DD-Verhältnis eines Portfolios von mindestens 2,5.

Da ich die Strategien für zwei Symbole - ES und EMD - teste, werden auch die Portfolioergebnisse für die Strategien berechnet. Mit dieser Bedingung lege ich einfach fest, dass die Portfolioperformance nicht viel schlechter sein darf als die Performance nur für ES, und das Programm wird alle Strategien mit schlechter Portfolioperformance ausschließen.

Jetzt müssen wir nur noch die Start und lassen Sie das Programm die Arbeit machen.
Denken Sie daran, dass wir mindestens 2000 "gute" Strategien generieren wollen, bevor wir mit dem Filterprozess fortfahren.

Je nach den Einstellungen und der Geschwindigkeit Ihres Computers kann es mehrere Stunden oder sogar Tage dauern, haben Sie also Geduld. Wenn das Programm für eine sehr lange Zeit keine Strategie liefert, sollten wir vielleicht zu einem höheren Zeitrahmen wechseln - 30 Minuten, 1 Stunde - oder die Beschränkungen weniger restriktiv gestalten.


3. Erster Filter - Prüfung auf Nichtvorhandensein einer Probe (OOS)

Wenn ich 2000 potenziell gute Strategien in der Datenbank habe, stoppe ich die Generierung und beginne mit dem Filterungsprozess.
Ich wende den ersten Filter an, indem ich alle Systeme mit schlechter Out of Sample-Performance entferne. Ich kann das schnell tun, indem ich die Strategien in der Datenbank sortiere und diejenigen lösche, deren OOS-Gewinn kleiner als $3000 ist.


Abbildung 4 Datenbank mit einem Pool von Strategien, sortiert nach OOS-Nettogewinn

In diesem ersten Schritt wird in der Regel ein großer Teil der Strategien entfernt, so dass wir von ursprünglich 2000 Kandidaten auf etwa 1700 zurückgehen.


2. Zweiter Filter - erneuter Test und zweite OOS-Prüfung

In diesem Schritt werde ich alle Strategien erneut testen über den unbekannten Zeitraum außerhalb der Stichprobe und ich werde einen Test mit TF-Daten hinzufügen.

Das erneute Testen der Strategien ist ganz einfach: Ich wähle einfach alle Strategien in der Datenbank aus und klicke auf die Schaltfläche Erneut testen. Dadurch werden alle Strategien auf eine Registerkarte "Retest" verschoben. Ich bestätige auch den Dialog mit der Frage, ob die Build-Einstellungen für den Retest verwendet werden sollen

Ich werde dann den Datenzeitraum bis zum Ende der verfügbaren Daten verlängern. Die Strategien wurden auf der Grundlage von Daten vom 2.1.2003 bis zum 31.12.2012 generiert. Ich werde die Strategien nun erneut auf Daten bis zum 31.12.2013 testen (ein weiteres Jahr, das bei der Generierung nicht verwendet wurde) und den Zeitraum "Out of Sample" vom 31.12.2012 bis zum 31.12.2012 festlegen.
Beachten Sie, dass dadurch die Strategien erneut mit den vollständigen Daten getestet werden und der OOS-Teil die Leistung der Strategie während des letzten Jahres der zuvor ungenutzten Daten zeigt.


Abbildung 5: Einstellungen für die Wiederholungsprüfung

Da ich auch historische Daten für TF habe, werde ich sie zu den zusätzlichen Daten hinzufügen, um die Performance aller drei Eminis zu vergleichen.

Der Test kann einige Zeit in Anspruch nehmen, und danach werde ich erneut alle Systeme entfernen, die eine schlechte Out of Sample Performance aufweisen. Wieder kann ich die Strategien in der Datenbank nach Nettogewinn (OOS) sortieren und diejenigen löschen, die einen OOS-Gewinn von weniger als $1500 haben.


3. Dritter Filter - EMD, TF-Prüfung

Der dritte Filter ist visuell - ich überprüfe die Leistung der Strategien für die Symbole EMD und TF. Ich gehe zu Ergebnisse -> Aktienchart, schalte den Chart auf Portfolio um und gehe die Strategien eine nach der anderen durch und betrachte die Aktienkurven für EMD und TF.


Abbildung 6: Beispiel für gute und schlechte EMD / TF-Leistung

Wonach suchen wir? Da diese Eminis stark korreliert sind, möchte ich, dass die Strategie auf allen drei Symbolen profitabel ist, genau wie im ersten Beispiel. Wir können auf dem zweiten Beispiel sehen, dass die Leistung auf TF ist sehr schlecht im Vergleich zu ES und EMD, seine Equity-Kurve ist nicht grodwing, so dass ich solche Strategien zu entlassen.

Es kann auch ein anderes Extrem geben - dass die Leistung auf TF und/oder EMD viel besser ist als die Leistung auf ES. Das ist in Ordnung, es kommt oft vor, dass Strategien auf TF besser abschneiden als auf ES.

Wir sollten nicht nur auf die endgültige Performance achten, sondern auch auf die Aktienkurven. Wir sollten alle Aktienkurven ablehnen, die lange Phasen der Stagnation oder große Drawdowns aufweisen.

Auf diese Weise können wir die Filterung sehr sorgfältig vornehmen. Am Ende sollten nicht mehr als 10-20 Top-Strategien für den nächsten Schritt übrig bleiben.


4. Vierter Filter - Robustheitstests

Nachdem ich alle Strategien mit schlechter EMD / TF-Performance entfernt habe, bleiben weniger als 20 Strategien übrig, die eine gute IS- und OOS-Performance sowie eine zufriedenstellende EMD / TF-Performance aufweisen. Ich werde die Strategien jetzt noch einmal mit Robustheitstests und Money Management testen, um zu sehen, wie jede der Strategien mit kleinen Änderungen der Inputs umgeht und um die Strategien miteinander vergleichen zu können.

Ich werde die Geldverwaltung von einer festen Größe auf einen festen Betrag umstellen, so dass jede Strategie $500 pro Handel riskiert. Dies ermöglicht eine bessere Strategien Vergleich, weil sie den gleichen Betrag pro Handel riskieren.


Bild 7: Einstellung der Geldverwaltung auf einen festen Betrag

Bei Robustheitstests verwende ich mindestens 20 Simulationen und teste die Strategie für alle Arten von Stresssituationen. Nachdem ich den Robustheitstest konfiguriert habe, teste ich die Strategien erneut.
Diesmal wird es schnell gehen, denn es sind nur noch wenige Strategien in der Datenbank vorhanden.


Abbildung 8: Robustheitstests

Wie man Robustheitstests auswertet
Robustheitstests zeigen uns, wie sich die Strategie in der Realität verhalten kann, wenn es verpasste Trades, unterschiedliche historische Daten usw. gibt. Ich suche nach Strategien, die akzeptable Werte für Nettogewinn und Drawdown auf dem Konfidenzniveau 95% aufweisen.


Abbildung 9: Ergebnisse der Robustheitstests

Im obigen Beispiel sehen wir die Robustheitsergebnisse für zwei Strategien. Die Strategie auf der linken Seite hat einen akzeptablen Gewinn, aber der Drawdown hat sich im Vergleich zum ursprünglichen Ergebnis mehr als verdoppelt.
Die Strategie auf der rechten Seite hat ebenfalls einen Gewinn in akzeptabler Höhe und der Drawdown war fast unverändert.

In diesem Schritt wähle ich nur 1-3 endgültige Strategien aus, die dem nächsten Test der Robustheit unterzogen werden.
Diese endgültigen Strategien werden nach den besten Ergebnissen in den Robustheitstests, der Gesamtrentabilität und auch der Einfachheit ausgewählt - ich möchte, dass die Strategieregeln so einfach wie möglich sind, und die Handelsregeln sollten einen gewissen Sinn ergeben.


5. Fünfter Filter - Walk-Forward-Matrix-Test

Es bleiben nur wenige Strategien übrig, und wir können den ultimativen Test auf Robustheit durchführen - den Walk-Forward-Matrix-Test. Die WF-Matrix ist einfach eine Matrix von Walk-Forward-Optimierungen mit unterschiedlicher Anzahl von Durchläufen und Laufperioden.

Wenn die Strategie den Walk-Forward-Matrix-Test besteht, bedeutet dies, dass die Strategie mit Hilfe der Parameter-Re-Optimierung ist an eine große Bandbreite von Marktbedingungen anpassbar UND auch, dass die Strategie nicht an bestimmte Daten angepasst ist - denn mit der Re-Optimierung funktioniert sie in vielen verschiedenen Zeiträumen.

Darüber hinaus gibt der WF-Matrix-Test auch Aufschluss darüber, ob die Strategie permanent reoptimiert werden sollte und welches der optimale Reoptimierungszeitraum ist.

Der Walk-Forward-Matrix-Test muss für jede Strategie einzeln durchgeführt werden. Ich lade meine Strategie in den Optimizer und wähle die Option "Walk-Forward Matrix". Ich wähle auch Schritte für Läufe und OOS-Prozentsätze. StrategyQuant wird all diese Kombinationen durchgehen und die Walk-Forward-Optimierung der Strategie durchführen.


Abbildung 10: Aufbau einer Walk-Forward-Matrix

Einstellung der Parameter für die Optimierung
Damit eine Optimierung sinnvoll ist, müssen Sie die Strategieparameter festlegen, die optimiert werden sollen. Jede Strategie verwendet eine andere Logik und hat andere Parameter, so dass Sie die Optimierung unterschiedlich konfigurieren müssen.


Abbildung 11: Optimierungsparameter

Da diese Strategie relativ einfach ist, optimiere ich nur den Stop-Loss-Wert und den Stop-Trailing-Koeffizienten.
Es ist nicht notwendig, alle Parameter zu optimieren, sondern nur die, die den größten Einfluss auf die Leistung der Strategie haben.

Auswertung der Walk-Forward-Matrix
Wenn die Optimierung abgeschlossen ist, klicke ich in Databank auf das Ergebnis der Walk-Forward-Matrix, um die Details zu sehen.

Ich möchte, dass der Optimierer mir eine klare Antwort darauf gibt, ob die Strategie den Walk-Forward-Optimierungstest bestanden hat, also muss ich Bewertungskriterien festlegen.
Dies sind einfache Kriterien, die erfüllt sein müssen, damit die Strategie den Test besteht.


Abbildung 13: Ergebnisse der Walk-Forward-Matrix

Das Endergebnis ist, dass die Strategie den Walk-Forward-Matrix-Test für Robustheit bestanden hat. Das 3D-Punktediagramm zeigt uns, dass 19 von 24 Kombinationen unsere Kriterien erfüllt haben (bei Verwendung der Standardeinstellungen).
Die Strategie muss nicht für jede Kombination erfolgreich sein, ich suche nach einem 2×2 oder 3×3 Bereich, in dem die meisten Kombinationen erfolgreich sind - dies ist die Gruppe der besten Reoptimierungskombinationen. In diesem Fall kann ich sehen, dass 10 Durchläufe mit 30% Out of Sample eine der besten Kombinationen ist, weil sie von anderen Kombinationen umgeben ist, die ebenfalls bestanden haben.

Wenn ich das Walk-Forward-Optimierungsdiagramm überprüfe, kann ich sehen, dass die Strategie auch während der Re-Optimierung profitabel bleibt. Der Rückgang der Rentabilität steht im Einklang mit den Tests, die wir bei der Monte-Carlo-Robustheitsanalyse erhalten haben, aber die Strategie ist immer noch rentabel.


Abbildung 14: Walk-Forward-Optimierungsdiagramm


Zusammenfassung

Ich habe meinen gesamten Arbeitsprozess mit StrategyQuant beschrieben, der zu einigen interessanten neuen Strategien geführt hat.

Diese Strategien sind nur Beispiele und es hat mich weniger als 2 Tage SQ-Laufzeit und etwa 1-2 Stunden meiner Zeit gekostet, sie mit Hilfe von StrategyQuant zu finden.
Sie können es selbst ausprobieren, sich inspirieren lassen und den Prozess möglicherweise mit Ihren eigenen Ideen verbessern, die Sie auf unserer Website veröffentlichen können. Forum.

Mögliche Verbesserungen des Prozesses - Sie können versuchen, nach Strategien für die Long- und Short-Richtung getrennt zu suchen. Jede Richtung hat ihre eigene Dynamik, und unterschiedliche Strategien für Long und Short könnten bessere Ergebnisse liefern.
Ich habe nicht erwähnt Verbesserer - Es ist ein leistungsfähiges Instrument, mit dem Sie nach besseren Varianten Ihrer bestehenden Strategie suchen können, wenn Sie mit der Leistung noch nicht zufrieden sind.

Denken Sie daran, dass es nicht darum geht, eine Strategie zu finden, die auf der Grundlage historischer Daten perfekt ist. Dies ist ein Rezept für eine Katastrophe, weil übermäßig optimierte Strategie ist garantiert in den realen Handel zu scheitern.
Unser Ziel sollte es sein, eine Strategie zu finden, die über verschiedene Daten und/oder Symbole hinweg robust ist, denn das bedeutet, dass sie einen echten Vorteil gegenüber dem Markt hat.

Abonnieren
Benachrichtigen Sie mich bei
0 Kommentare
Inline-Rückmeldungen
Alle Kommentare anzeigen

Lesen Sie weiter