Dieser Artikel ist eine Fortsetzung der Reihe über den quantitativen Handel, die mit Beginner's Guide und Strategy Identification begann.
Algorithmisches Backtesting erfordert Kenntnisse in vielen Bereichen, einschließlich Psychologie, Mathematik, Statistik, Softwareentwicklung und Markt-/Austauschmikrostruktur. Ich konnte nicht hoffen, alle diese Themen in einem Artikel abzudecken, also werde ich sie in zwei oder drei kleinere Teile aufteilen. Was werden wir in diesem Abschnitt diskutieren? Ich werde mit der Definition von Backtesting beginnen und dann die Grundlagen beschreiben, wie es durchgeführt wird. Dann werde ich die Vorurteile aufklären, die wir im Beginner Guide to Quantitative Trading angesprochen haben. Als nächstes werde ich einen Vergleich der verschiedenen verfügbaren Backtesting-Softwareoptionen vorstellen.
In den folgenden Artikeln werden wir uns die Einzelheiten der Strategieimplementierungen ansehen, die oft kaum erwähnt oder ignoriert werden. Wir werden auch prüfen, wie wir den Backtesting-Prozess realistischer gestalten können, indem wir die Eigenheiten einer Handelsbörse einbeziehen. Dann werden wir die Transaktionskosten diskutieren und wie sie in einer Backtestumgebung korrekt modelliert werden können. Wir werden mit einer Diskussion über die Leistung unserer Backtests enden und schließlich ein Beispiel für eine gemeinsame Quant-Strategie liefern, die als durchschnittlich umkehrende Paare bekannt ist.
Lassen Sie uns damit beginnen, zu diskutieren, was Backtesting ist und warum wir es in unserem algorithmischen Handel durchführen sollten.
Algorithmischer Handel unterscheidet sich von anderen Arten von Anlageklassen, weil wir aufgrund der reichhaltigen Datenverfügbarkeit zuverlässiger Erwartungen an zukünftige Performance aus vergangenen Performance liefern können.
Einfach ausgedrückt, wird Backtesting durchgeführt, indem Ihr spezieller Strategie-Algorithmus einem Strom historischer Finanzdaten ausgesetzt wird, was zu einer Reihe von Handelssignalen führt. Jeder Handel (den wir hier als eine Rundreise von zwei Signalen bezeichnen) hat einen damit verbundenen Gewinn oder Verlust. Die Anhäufung dieses Gewinns / Verlustes während der Dauer Ihres Strategie-Backtests führt zum Gesamtgewinn und Verlust (auch bekannt als
Was sind die wichtigsten Gründe für den Backtest einer algorithmischen Strategie?
Backtesting bietet eine Vielzahl von Vorteilen für den algorithmischen Handel. Es ist jedoch nicht immer möglich, eine Strategie unkompliziert zurück zu testen. Im Allgemeinen wird es mit zunehmender Häufigkeit der Strategie schwieriger, die Mikrostruktur-Effekte des Marktes und der Börsen korrekt zu modellieren. Dies führt zu weniger zuverlässigen Backtests und damit zu einer schwierigen Bewertung einer gewählten Strategie. Dies ist ein besonderes Problem, bei dem das Ausführungssystem der Schlüssel zur Strategieleistung ist, wie bei Ultra-Hochfrequenz-Algorithmen.
Leider ist das Backtesting voller Vorurteile aller Art. Einige dieser Fragen haben wir in früheren Artikeln angesprochen, aber wir werden sie jetzt eingehend erörtern.
Es gibt viele Verzerrungen, die die Leistung einer zurückgetesteten Strategie beeinflussen können. Leider neigen diese Verzerrungen dazu, die Leistung zu erhöhen, anstatt sie zu beeinträchtigen. Daher sollten Sie einen Rücktest immer als eine idealisierte obere Grenze für die tatsächliche Leistung der Strategie betrachten. Es ist fast unmöglich, Verzerrungen aus dem algorithmischen Handel zu beseitigen, daher ist es unsere Aufgabe, sie so gut wie möglich zu minimieren, um fundierte Entscheidungen über unsere algorithmischen Strategien zu treffen.
Es gibt vier große Vorurteile, über die ich sprechen möchte: Optimierungsvorurteile, Zukunftsvorurteile, Überlebensvorurteile und psychologische Toleranzvorurteile.
Dies ist wahrscheinlich die heimtückischste aller Backtest-Voreingenommenheiten. Es beinhaltet die Anpassung oder Einführung zusätzlicher Handelsparameter, bis die Strategieleistung auf dem Backtest-Datensatz sehr attraktiv ist.
Optimierungsverzerrung ist schwer zu beseitigen, da algorithmische Strategien oft viele Parameter beinhalten.
Eine Methode, um diese Verzerrung zu mildern, ist die Durchführung einer Sensibilitätsanalyse. Dies bedeutet, die Parameter schrittweise zu variieren und eine "Oberfläche" der Leistung zu zeichnen. Eine fundierte, grundlegende Argumentation für die Parameterwahl sollte bei Berücksichtigung aller anderen Faktoren zu einer glatteren Parameteroberfläche führen. Wenn Sie eine sehr sprunghafte Leistungsoberfläche haben, bedeutet dies oft, dass ein Parameter kein Phänomen widerspiegelt und ein Artefakt der Testdaten ist. Es gibt eine umfangreiche Literatur zu mehrdimensionalen Optimierungsalgorithmen und es ist ein sehr aktiver Forschungsbereich. Ich werde mich hier nicht damit beschäftigen, aber behalte es im Hinterkopf, wenn du eine Strategie mit einem fantastischen Backtest findest!
Ein Look-ahead-Bias wird in ein Backtesting-System eingeführt, wenn zukünftige Daten versehentlich an einem Punkt in der Simulation aufgenommen werden, an dem diese Daten nicht tatsächlich verfügbar gewesen wären. Wenn wir den Backtest chronologisch ausführen und den Zeitpunkt N erreichen, tritt ein Look-ahead-Bias auf, wenn Daten für einen beliebigen Punkt N + k aufgenommen werden, wo k>0.
Wie bei der Optimierung Bias, muss man äußerst vorsichtig sein, um seine Einführung zu vermeiden.
Überlebensverzerrung ist ein besonders gefährliches Phänomen und kann für bestimmte Strategientypen zu signifikant aufgeblähter Leistung führen. Es tritt auf, wenn Strategien auf Datensätzen getestet werden, die nicht das gesamte Universum früherer Vermögenswerte umfassen, die zu einem bestimmten Zeitpunkt ausgewählt worden sein könnten, sondern nur diejenigen berücksichtigen, die
Als Beispiel betrachten wir die Prüfung einer Strategie auf einer zufälligen Auswahl von Aktien vor und nach dem Marktcrash von 2001. Einige Technologie-Aktien gingen in Konkurs, während andere es geschafft haben, über Wasser zu bleiben und sogar zu gedeihen. Wenn wir diese Strategie nur auf Aktien beschränkt hätten, die es durch die Marktrückziehungsperiode geschafft hätten, würden wir eine Überlebensverzerrung einführen, weil sie bereits ihren Erfolg für uns gezeigt haben.
Es gibt zwei Möglichkeiten, Überlebensverzerrungen in den Strategie-Backtests zu verringern:
Wir werden nun einige psychologische Phänomene betrachten, die Ihre Handelsleistung beeinflussen können.
Dieses Phänomen wird im Kontext des quantitativen Handels nicht häufig diskutiert. Es wird jedoch in Bezug auf diskretionäre Handelsmethoden ausführlich diskutiert. Es hat verschiedene Namen, aber ich habe beschlossen, es "psychologische Toleranzverzerrung" zu nennen, weil es das Wesen des Problems erfasst. Bei der Erstellung von Backtests über einen Zeitraum von 5 Jahren oder mehr ist es einfach, eine aufwärts gerichtete Aktienkurve zu betrachten, die zusammengesetzte jährliche Rendite, die Sharpe-Ratio und sogar die Ziehungsmerkmale zu berechnen und mit den Ergebnissen zufrieden zu sein. Zum Beispiel könnte die Strategie einen maximalen relativen Ziehungsgrad von 25% und eine maximale Ziehungsdauer von 4 Monaten aufweisen. Dies wäre für eine Dynamikstrategie nicht atypisch. Es ist jedoch einfach, sich davon zu überzeugen, dass es leicht ist, solche Verlustperioden zu tolerieren, da das Gesamtbild rosig ist. In der Praxis ist es jedoch viel schwieriger!
Wenn historische Drawdowns von 25% oder mehr in den Backtests auftreten, dann werden Sie mit hoher Wahrscheinlichkeit Perioden ähnlicher Drawdowns im Live-Trading sehen. Diese Drawdown-Perioden sind psychologisch schwer zu ertragen. Ich habe aus erster Hand beobachtet, wie ein erweiterter Drawdown in einem institutionellen Umfeld sein kann, und es ist nicht angenehm - auch wenn die Backtests darauf hindeuten, dass solche Perioden auftreten werden. Der Grund, warum ich es als
Die Software-Landschaft für Strategie-Backtesting ist riesig. Lösungen reichen von vollständig integrierter institutioneller hochentwickelter Software bis hin zu Programmiersprachen wie C++, Python und R, in denen fast alles von Grund auf neu geschrieben werden muss (oder geeignete Plugins erhalten werden). Als Quant-Trader sind wir daran interessiert, das Gleichgewicht zwischen unserem Trading-Technologie-Stack und der Geschwindigkeit und Zuverlässigkeit unserer Entwicklungsmethodik zu finden. Hier sind die wichtigsten Überlegungen für die Softwarewahl:
Nun, da wir die Kriterien aufgelistet haben, mit denen wir unsere Software-Infrastruktur auswählen müssen, möchte ich einige der beliebtesten Pakete durchgehen und wie sie sich vergleichen:
Hinweis: Ich werde nur Software aufnehmen, die den meisten Einzelhändlern und Softwareentwicklern zur Verfügung steht, da dies die Leserschaft der Website ist.
Vergleiche von Backtesting-Software
Beschreibung: WYSIWYG (what-you-see-is-what-you-get) Tabellenkalkulation. Sehr verbreitet in der Finanzindustrie. Daten und Algorithmen sind eng miteinander verbunden.
Ausführung: Ja, Excel kann mit den meisten Maklern verknüpft werden.
Anpassung: VBA-Makros ermöglichen eine fortschrittlichere Funktionalität auf Kosten einer versteckten Implementierung.
Strategie Komplexität: Fortgeschrittene statistische Werkzeuge sind schwieriger zu implementieren, ebenso wie Strategien mit vielen hundert Vermögenswerten.
Bias-Minimalisierung: Look-ahead-Bias kann leicht über die Zell-Highlighting-Funktion (vorausgesetzt keine VBA) erkannt werden.
Entwicklungsgeschwindigkeit: Schnelle Umsetzung grundlegender Strategien.
Ausführungsgeschwindigkeit: Langsame Ausführungsgeschwindigkeit - nur für Strategien mit niedriger Frequenz geeignet.
Kosten: Billig oder kostenlos (je nach Lizenz).
Alternativen: OpenOffice
Beschreibung: Programmierumgebung, ursprünglich für computergestützte Mathematik, Physik und Ingenieurwesen entwickelt. Sehr gut geeignet für vektorisierte Operationen und solche mit numerischer linearer Algebra. Bietet eine breite Palette von Plugins für den Quant-Handel. In breiter Anwendung in quantitativen Hedgefonds.
Ausführung: Keine native Ausführungsfähigkeit, MATLAB erfordert ein separates Ausführungssystem.
Anpassung: Eine riesige Reihe von Community-Plugins für fast alle Bereiche der Rechenmathematik.
Strategie Komplexität: Viele fortgeschrittene statistische Methoden sind bereits verfügbar und gut erprobt.
Bias-Minimalisierung: Schwieriger, um Blick-vorwärts-Vorurteile zu erkennen, erfordert umfangreiche Tests.
Entwicklungsgeschwindigkeit: Kurze Skripte können einfach anspruchsvolle Backtests erstellen.
Ausführungsgeschwindigkeit: Unter der Annahme eines vektorisierten/parallelisierten Algorithmus ist MATLAB sehr optimiert.
Kosten: ~ 1.000 USD für eine Lizenz.
Alternativen: Octave, SciLab
Beschreibung: Eine Sprache auf hohem Niveau, die für die Geschwindigkeit der Entwicklung konzipiert wurde. Eine breite Palette von Bibliotheken für fast jede denkbare programmatische Aufgabe. Erlangt breitere Akzeptanz in der Hedgefonds- und Investmentbank-Community. Nicht ganz so schnell wie C / C ++ für die Ausführungsgeschwindigkeit
Ausführung: Python-Plugins existieren für größere Broker, wie Interactive Brokers. Daher können Backtest und Ausführungssystem alle Teil desselben
Anpassung: Python verfügt über eine sehr gesunde Entwicklergemeinschaft und ist eine reife Sprache.
Strategie Komplexität: Viele Plugins existieren für die wichtigsten Algorithmen, aber nicht ganz so eine große Quantengemeinschaft wie für MATLAB.
Bias Minimization: Es gibt dieselben Probleme mit der Bias Minimization wie bei jeder Sprache auf hohem Niveau.
Entwicklungsgeschwindigkeit: Der Hauptvorteil von Python ist die Entwicklungsgeschwindigkeit, mit robusten integrierten Testfunktionen.
Ausführungsgeschwindigkeit: Nicht ganz so schnell wie C++, aber wissenschaftliche Rechenkomponenten sind optimiert und Python kann mit bestimmten Plugins mit nativem C-Code sprechen.
Kosten: Kostenlos/Open Source
Alternativen: Ruby, Erlang, Haskell
Beschreibung: Umgebung für fortgeschrittene statistische Methoden und Zeitreihenanalyse.
Ausführung: R verfügt über Plugins für einige Broker, insbesondere Interactive Brokers.
Anpassung: R kann mit jedem Paket angepasst werden, aber seine Stärken liegen in den Bereichen Statistik/Ökonometrie.
Strategie Komplexität: Vor allem nützlich bei der Durchführung von ökonometrischen, statistischen oder maschinellen Lernstrategien aufgrund der verfügbaren Plugins.
Bias Minimisation: Ähnliche Ausmaß der Bias-Möglichkeit für jede Hochleistungssprache wie Python oder C++. Daher müssen Tests durchgeführt werden.
Entwicklungsgeschwindigkeit: R ist schnell für das Schreiben von Strategien, die auf statistischen Methoden basieren.
Ausführungsgeschwindigkeit: R ist langsamer als C++, bleibt aber für vektorisierte Operationen (wie bei MATLAB) relativ optimiert.
Kosten: Kostenlos/Open Source
Alternativen: SPSS, Stata
Beschreibung: Reife, hochwertige Sprache, die für die Ausführungsgeschwindigkeit entwickelt wurde. Weite Palette an quantitativen Finanzen und numerischen Bibliotheken. Schwieriger zu debuggen und oft länger zu implementieren als Python oder MATLAB. Extrem verbreitet sowohl auf der Kauf- als auch auf der Verkaufsseite.
Ausführung: Die meisten Brokerage-APIs sind in C++ und Java geschrieben.
Anpassung: C/C++ ermöglicht direkten Zugriff auf den zugrunde liegenden Speicher, wodurch Ultra-Hochfrequenzstrategien implementiert werden können.
Strategie Komplexität: C++ STL bietet eine breite Palette von optimierten Algorithmen. Fast jeder spezialisierte mathematische Algorithmus verfügt über eine kostenlose, Open-Source-C/C++ Implementierung im Web.
Bias Minimization: Look-ahead-Bias kann schwierig zu beseitigen sein, aber nicht schwieriger als andere Hochleistungssprachen.
Entwicklungsgeschwindigkeit: C++ ist im Vergleich zu Python oder MATLAB für denselben Algorithmus ziemlich sprachreich.
Ausführungsgeschwindigkeit: C/C++ hat eine extrem schnelle Ausführungsgeschwindigkeit und kann für bestimmte Rechenarchitekturen gut optimiert werden.
Kosten: Verschiedene Compiler: Linux/GCC ist kostenlos, MS Visual Studio hat unterschiedliche Lizenzen.
Alternativen: C#, Java, Scala
HFT- und UHFT-Strategien werden in C/C++ geschrieben (heute werden sie häufig auf GPUs und FPGAs ausgeführt), während niedrigfrequente Richtungs-Equity-Strategien aufgrund der
Meine persönliche Vorliebe ist für Python, da es den richtigen Grad an Anpassung, Entwicklungsgeschwindigkeit, Testfähigkeit und Ausführungsgeschwindigkeit für meine Bedürfnisse und Strategien bietet. Wenn ich etwas Schnelleres brauche, kann ich direkt aus meinen Python-Programmen in C++ einsteigen. Eine Methode, die von vielen Quant-Tradern bevorzugt wird, ist, ihre Strategien in Python zu prototypieren und dann die langsameren Ausführungsbereiche iterativ in C++ zu konvertieren. Letztendlich wird das gesamte Algo in C++ geschrieben und kann
In den nächsten Artikeln über Backtesting werden wir einige spezielle Fragen rund um die Implementierung eines algorithmischen Handels-Backtesting-Systems untersuchen, sowie wie wir die Auswirkungen von Handelsbörsen einbeziehen können.