Der Beitrag ist für alle geeignet, die mit dem quantitativen Handel beginnen, sowie für diejenigen, die bereits Erfahrung mit dem Bereich haben.
Es wird auch die verschiedenen Arten von Backtesting-Mechanismen sowie die Software-Landschaft, die diese Ansätze implementiert, untersucht.
Schließlich diskutieren wir die Ein- und Ausgänge eines ereignisgesteuerten Backtesting-Systems, ein Thema, das ich in früheren Beiträgen häufig auf QuantStart behandelt habe.
Ein Backtest ist die Anwendung von Handelsstrategieregeln auf eine Reihe historischer Preisdaten. Das heißt, wenn wir eine Reihe von Mechanismen für den Ein- und Ausstieg in ein Vermögenswertportfolio definieren und diese Regeln auf historische Preisdaten dieser Vermögenswerte anwenden, können wir versuchen, die Leistung dieser "Handelsstrategie" zu verstehen, die in der Vergangenheit erreicht worden sein könnte.
Es wurde einmal gesagt, dass
Backtests helfen uns letztendlich zu entscheiden, ob es sich lohnt, eine Reihe von Strategieregeln live zu handeln. Es gibt uns eine Vorstellung davon, wie eine Strategie in der Vergangenheit funktioniert haben könnte. Im Wesentlichen ermöglicht es uns, schlechte Strategieregeln auszufiltern, bevor wir echtes Kapital zuweisen.
Es ist einfach, Backtests zu erzeugen. Leider sind Backtest-Ergebnisse keine Live-Handelsergebnisse. Sie sind stattdessen ein Modell der Realität. Ein Modell, das normalerweise viele Annahmen enthält.
Es gibt zwei Haupttypen von Software-Backtest - die
Bei der Entwicklung von Backtesting-Software gibt es immer einen Kompromiss zwischen Genauigkeit und Implementierungskomplexität.
Es gibt viele Fallstricke, die mit dem Backtesting verbunden sind. Sie alle beziehen sich auf die Tatsache, dass ein Backtest nur ein Modell der Realität ist.
Es gibt einige subtilere Probleme mit dem Backtesting, die nicht so oft diskutiert werden, aber trotzdem unglaublich wichtig zu berücksichtigen sind.
Es wurde viel über die Probleme des Backtesting geschrieben.
Ein For-Loop Backtester ist die einfachste Art von Backtesting-System und die Variante, die am häufigsten in Quant-Blog-Posts zu sehen ist, rein wegen ihrer Einfachheit und Transparenz.
Im Wesentlichen wird das For-Loop-System über jeden Handelstag (oder OHLC-Bar) wiederholt, führt eine Berechnung im Zusammenhang mit dem Preis der Vermögenswerte durch, wie z. B. einen gleitenden Durchschnitt des Schließens, und geht dann lang oder kurz einen bestimmten Vermögenswert (oft zum gleichen Schließpreis, aber manchmal am Tag darauf). Die Iteration geht dann weiter. Die ganze Zeit wird das Gesamtkapital verfolgt und gespeichert, um später eine Eigenkapitalkurve zu erzeugen.
Hier ist der Pseudo-Code für einen solchen Algorithmus:
for each trading bar:
do_something_with_prices();
buy_sell_or_hold_something();
next_bar();PythonCopy
Wie Sie sehen können, ist das Design eines solchen Systems unglaublich einfach. Dies macht es attraktiv, um einen ersten Blick auf die Leistung eines bestimmten Strategie-Regels zu werfen.
For-Loop-Backtester sind in fast jeder Programmiersprache einfach zu implementieren und sehr schnell auszuführen.
Der Hauptnachteil von For-Loop-Backtestern ist, dass sie ziemlich unrealistisch sind. Sie haben oft keine Transaktionskostenfähigkeit, es sei denn, sie werden speziell hinzugefügt. Normalerweise werden Aufträge sofort
Es gibt eine minimale Code-Wiederverwendung zwischen dem Backtesting-System und dem Live-Trading-System. Dies bedeutet, dass der Code oft zweimal geschrieben werden muss, was die Möglichkeit mehrer Fehler einführt.
For-Loop-Backtester sind anfällig für Look-Ahead-Bias aufgrund von Fehlern bei der Indexierung.
For-Loop-Backtester sollten wirklich nur als Filtermechanismus verwendet werden. Sie können sie verwenden, um die offensichtlich schlechten Strategien zu eliminieren, aber Sie sollten skeptisch gegenüber starker Performance bleiben. Weitere Forschung ist oft erforderlich. Strategien leisten selten besser im Live-Handel als in Backtests!
Event-Driven Backtesters liegen am anderen Ende des Spektrums. Sie sind viel mehr verwandt mit Live-Trading-Infrastrukturimplementierungen. Als solche sind sie oft realistischer im Unterschied zwischen Backtested und Live-Trading-Performance.
Solche Systeme laufen in einer großen
Wenn ein bestimmtes Ereignis identifiziert wird, wird es an die entsprechenden Module der Infrastruktur weitergeleitet, die das Ereignis verarbeiten und dann möglicherweise neue Ereignisse generieren, die in die Warteschlange zurückkehren.
Der Pseudo-Code für ein Event-Driven-Backtesting-System lautet wie folgt:
while event_queue_isnt_empty():
event = get_latest_event_from_queue();
if event.type == "tick":
strategy.calculate_trading_signals(event);
else if event.type == "signal":
portfolio.handle_signal(event);
else if event.type == "order":
portfolio.handle_order(event);
else if event.type == "fill":
portfolio.handle_fill(event)
sleep(600); # Sleep for, say, 10 minsPythonCopy
Wie Sie sehen können, ist das Modul Portfolio-Handler stark abhängig.
Es gibt viele Vorteile, einen Event-Driven Backtester zu verwenden:
Während die Vorteile klar sind, gibt es auch einige erhebliche Nachteile bei der Verwendung eines solch komplexen Systems:
In diesem Abschnitt werden wir Software (sowohl Open-Source- als auch kommerzielle) betrachten, die sowohl für For-Loop- als auch für Event-Driven-Systeme existiert.
Für For-Loop-Backtester sind die wichtigsten verwendeten Programmiersprachen/Software Python (mit der Pandas-Bibliothek), R (und der Quantmod-Bibliothek) und MatLab.
Der Markt für Event-Driven-Systeme ist viel größer, da Kunden/Nutzer oft wünschen, dass die Software sowohl Backtesting als auch Live-Handel in einem Paket ermöglicht.
Zu den teuren kommerziellen Angeboten gehören Deltix und QuantHouse.
Quantpian ist ein Beispiel für eine ausgereifte webbasierte Einrichtung für Backtesting und Live-Handel.
Institutionelle Quanten entwickeln häufig auch eigene Software, was auf eine Mischung aus regulatorischen Einschränkungen, Investor-Beziehungen/Berichterstattung und Prüfbarkeit zurückzuführen ist.
Einzelhandelsquants haben die Wahl zwischen der Verwendung des
In Bezug auf Open-Source-Software gibt es viele Bibliotheken. Sie sind meist in Python geschrieben (aus Gründen, die ich unten skizzieren werde) und umfassen Zipline (Quantopian), PyAlgoTrade, PySystemTrade (Rob Carver/Investment Idiocy) und QSTrader (QuantStart
Einer der wichtigsten Aspekte ist jedoch, dass unabhängig davon, welche Software Sie letztendlich verwenden, sie mit einer gleich soliden Quelle finanzieller Daten kombiniert werden muss.
Während Software sich um die Details für uns kümmert, verbirgt sie uns viele Implementierungsdetails, die oft entscheidend sind, wenn wir unsere Komplexität unserer Handelsstrategie erweitern möchten.
Trotz meines Hintergrunds als quantitativer Softwareentwickler interessiere ich mich nicht persönlich für
Wir sollten uns nur für das interessieren, was funktioniert.
Python ist eine extrem einfach zu erlernende Programmiersprache und oft die erste Sprache, mit der Menschen in Kontakt kommen, wenn sie sich entscheiden, Programmieren zu lernen.
Es verfügt über einige außergewöhnliche Quant/Data Science/Machine Learning (ML) -Bibliotheken in NumPy, SciPy, Pandas, Scikit-Learn, Matplotlib, PyMC3 und Statsmodels.
Es ist ideal für den Aufbau von For-Loop- und Event-Driven-Backtesting-Systemen. In der Tat ist es vielleicht eine der wenigen Sprachen, die end-to-end-Recherche, Backtesting, Bereitstellung, Live-Handel, Berichterstattung und Überwachung ermöglicht.
Sein größter Nachteil ist vielleicht, dass er im Vergleich zu anderen Sprachen wie C++ recht langsam ausgeführt wird. Allerdings wird daran gearbeitet, dieses Problem zu verbessern, und mit der Zeit wird Python schneller.
R ist eine statistische Programmierumgebung, eher als eine vollwertige
Es wird häufig für For-Loop-Backtesting verwendet, oft über die Quantmod-Bibliothek, ist jedoch nicht besonders gut für Event-Driven-Systeme oder Live-Handel geeignet.
C++ hat den Ruf, extrem schnell zu sein. Fast alle wissenschaftlichen Hochleistungsrechner werden entweder in Fortran oder C++ durchgeführt. Dies ist sein Hauptvorteil. Wenn Sie also den Hochfrequenzhandel in Betracht ziehen oder an älteren Systemen in großen Organisationen arbeiten, dann ist C++ wahrscheinlich eine Notwendigkeit.
Leider ist es schmerzhaft für die Durchführung von Strategieforschung. Aufgrund der statischen Typisierung ist es ziemlich schwierig, Daten im Vergleich zu Python oder R leicht zu laden, zu lesen und zu formatieren.
Trotz des verhältnismäßigen Alters wurde es mit der Einführung von C++11/C++14 und weiteren Standardverbesserungen in letzter Zeit wesentlich modernisiert.
Vielleicht möchten Sie sich auch Java, Scala, C#, Julia und viele der funktionellen Sprachen ansehen.
Antwort: Ja!
Es ist eine großartige Lernerfahrung, ein eigenes Event-Driven-Backtesting-System zu schreiben. Erstens zwingt es Sie, alle Aspekte Ihrer Handelsinfrastruktur zu berücksichtigen, nicht nur stundenlang an einer bestimmten Strategie zu arbeiten.
Selbst wenn Sie das System nicht für den Live-Handel verwenden, wird es Ihnen eine große Anzahl von Fragen geben, die Sie Ihren kommerziellen oder FOSS-Backtesting-Anbietern stellen sollten.
Zum Beispiel: Wie unterscheidet sich Ihr aktuelles Live-System von Ihrer Backtest-Simulation in Bezug auf:
Während Event-Driven-Systeme nicht schnell oder einfach zu schreiben sind, wird die Erfahrung später in Ihrer Quant-Trading-Karriere enorme pädagogische Dividenden zahlen.
Wie schreibt man ein solches System?
Der beste Weg, um damit anzufangen, ist einfach Zipline, QSTrader, PyAlgoTrade, PySystemTrade usw. herunterzuladen und die Dokumentation und den Code zu lesen. Sie sind alle in Python geschrieben (wegen der Gründe, die ich oben beschrieben habe) und zum Glück ist Python sehr ähnlich wie das Lesen von Pseudo-Code. Das heißt, es ist sehr einfach zu folgen.
Ich habe auch viele Artikel über Event-Driven Backtest Design geschrieben, die Sie hier finden können, die Sie durch die Entwicklung jedes Moduls des Systems führen.
Denken Sie daran, dass Sie an Tag 1 kein Experte sein müssen. Sie können es langsam, Tag für Tag, Modul für Modul machen. Wenn Sie Hilfe benötigen, können Sie mich oder andere bereitwillige Quant-Blogger kontaktieren. Siehe Ende des Artikels für meine Kontakt-E-Mail.
Ich werde nun die Module diskutieren, die häufig in vielen Event-Driven-Backtesting-Systemen zu finden sind.
Hier werden alle historischen Preisdaten gespeichert, zusammen mit Ihrer Handelsgeschichte, sobald Sie live sind.
Stattdessen verwenden wir eine
Idealerweise wollen wir Tick-Level-Daten erhalten und speichern, da dies uns eine Vorstellung von Handelsspreads gibt.
Wir sollten uns stets der Handhabung von Unternehmensaktionen (z. B. Aktienspaltungen und Dividenden), Überlebensverzerrungen (Aktienentfernung) sowie der Verfolgung der Zeitzonenunterschiede zwischen verschiedenen Börsen bewusst sein.
Einzelpersonen/Einzelhändler können hier konkurrieren, da viele Datenbanktechnologien mit Produktionsqualität ausgereift, kostenlos und Open Source sind.
Es gibt immer noch viele Märkte und Strategien, die zu klein sind, um von den großen Fonds interessiert zu sein.
Das Handelsstrategie-Modul in einem Event-Driven-System führt im Allgemeinen eine Art Vorhersage- oder Filtermechanismus auf neue Marktdaten aus.
Es erhält Bar- oder Tickdaten und verwendet diese Mechanismen dann, um ein Handelssignal zu produzieren, um einen Vermögenswert zu longen oder zu shorten.
95% der Quant-Blog-Diskussion dreht sich in der Regel um Handelsstrategien. Ich persönlich glaube, dass es mehr wie 20% sein sollte. Dies liegt daran, dass ich denke, dass es viel einfacher ist, die erwarteten Renditen zu erhöhen, indem man die Kosten durch ein angemessenes Risikomanagement und eine Positionsgröße reduziert, anstatt Strategien mit
Das Herzstück eines Event-Driven Backtesters ist das Portfolio & Order Management-System.
Ziel dieses Systems ist es, vom aktuellen Portfolio zum gewünschten Portfolio zu gelangen, wobei das Risiko und die Transaktionskosten minimiert werden.
Das Modul verknüpft die Strategie, das Risiko, die Positionsgröße und die Auftragsausführungsfähigkeiten des Systems und bearbeitet die Positionsberechnungen während des Backtestings, um die eigenen Berechnungen einer Brokerage nachzuahmen.
Der Hauptvorteil der Verwendung eines solchen komplexen Systems besteht darin, dass eine Vielzahl von Finanzinstrumenten unter einem einzigen Portfolio gehandhabt werden kann. Dies ist für institutionelle Portfolios mit Absicherung notwendig. Eine solche Komplexität ist sehr schwierig in einem For-Loop-Backtesting-System zu programmieren.
Das Modul kann Bestellungen, die aus dem Portfolio gesendet werden, ändern, hinzufügen oder ein Veto einlegen.
Insbesondere kann das Risikomodul Absicherungen hinzufügen, um die Marktneutralität zu erhalten. Es kann die Auftragsgrößen aufgrund von Sektorenexposition oder ADV-Limits reduzieren. Es kann einen Handel vollständig verweigern, wenn der Spread zu groß ist oder die Gebühren im Verhältnis zur Handelsgröße zu groß sind.
Ein separates Positionsgrößenmodul kann Volatilitätsschätzung und Positionsgrößenregeln wie Kelly-Leverage implementieren.
Solche Themen sind in der Quant-Blogosphäre nicht gut vertreten. Dies ist jedoch wahrscheinlich der größte Unterschied zwischen der Art und Weise, wie Institutionen und einige Einzelhändler über ihren Handel nachdenken.
Im wirklichen Leben ist es nie garantiert, dass wir einen Markt in der Mitte haben!
Wir müssen Transaktionsfragen wie Kapazität, Spread, Gebühren, Schlupf, Marktwirkung und andere algorithmische Ausführungsbedenken berücksichtigen, sonst werden unsere Rückprüfungsergebnisse wahrscheinlich stark überbewertet sein.
Der modulare Ansatz eines Event-Driven-Systems ermöglicht es uns, den BacktestExecutionHandler leicht mit dem LiveExecutionHandler auszuwechseln und auf den Remote-Server zu implementieren.
Wir können auch leicht mehrere Brokerages hinzufügen, die das OOP-Konzept von
Es gibt viele solche Module, die es leicht machen, mit Maklern zu sprechen, aber es ist notwendig, eigene Tests durchzuführen. Stellen Sie sicher, dass Sie mit diesen Bibliotheken vollkommen zufrieden sind, bevor Sie umfangreiches Kapital investieren, sonst könnten Sie einfach aufgrund von Fehlern in diesen Modulen viel Geld verlieren.
Einzelhandelsquanten können und sollten die von institutionellen quanten verwendeten anspruchsvollen Berichtstechniken übernehmen. Zu diesen Instrumenten gehören Live-Dashboards des Portfolios und der entsprechenden Risiken, eine
Es sollte eine konsequente schrittweise Verbesserung dieser Infrastruktur vorgenommen werden. Dies kann die langfristigen Renditen wirklich verbessern, indem einfach Fehler beseitigt und Probleme wie die Handelsverzögerung verbessert werden.
Die WGS wird schließlich aufgrund von
Die Optimierung der Infrastruktur mag zwar "langweiliger" sein als die Strategieentwicklung, aber sie wird deutlich weniger langweilig, wenn die Renditen verbessert werden!
Die Bereitstellung eines Remote-Servers und die umfangreiche Überwachung dieses Remote-Systems sind für institutionelle Systeme von entscheidender Bedeutung.
Ein robustes System muss entfernt in der Cloud bereitgestellt oder in der Nähe einer Börse platziert werden. Zuhause Breitband, Stromversorgung und andere Faktoren bedeuten, dass die Verwendung eines Heimdesktops / Laptops zu unzuverlässig ist. Oft versagen die Dinge genau zu der schlimmsten Zeit und führen zu erheblichen Verlusten.
Zu den Hauptproblemen bei der Berücksichtigung einer Remote-Bereitstellung gehören: Überwachung von Hardware wie CPU, RAM/Swap, Festplatten- und Netzwerk-E/Ausgabe, hohe Verfügbarkeit und Redundanz von Systemen, ein gut durchdachter Backup- UND Wiederherstellungsplan, umfangreiche Protokollierung aller Aspekte des Systems sowie kontinuierliche Integration, Unit-Tests und Versionskontrollen.
Erinnern Sie sich an Murphys Gesetz. Wenn es scheitern kann, wird es scheitern.
Es gibt viele Anbieter, die relativ einfache Cloud-Bereitstellungen anbieten, darunter Amazon Web Services, Microsoft Azure, Google und Rackspace.
Leider gibt es im Quant-Trading keine "schnelle Lösung". Es erfordert viel harte Arbeit und Lernen, um erfolgreich zu sein.
Ein großer Stolperstein für Anfänger (und einige Zwischenquanten!) ist vielleicht, dass sie sich zu sehr auf die beste
Es lohnt sich auch, viel Zeit in Ihre Handelsinfrastruktur zu investieren. Verbringen Sie Zeit mit Themen wie Bereitstellung und Überwachung. Versuchen Sie immer, die Transaktionskosten zu reduzieren, da die Rentabilität ebenso viel mit der Reduzierung der Kosten zu tun hat wie mit der Gewinnung von Handelsumsätzen.
Ich empfehle, ein eigenes Backtesting-System zu schreiben, um es einfach zu lernen. Sie können es entweder verwenden und kontinuierlich verbessern oder Sie können einen Anbieter finden und ihm dann alle Fragen stellen, die Sie entdeckt haben, als Sie Ihr eigenes erstellt haben.
Schließlich, immer lesen, lernen und verbessern. Es gibt eine Fülle von Lehrbüchern, Fachzeitschriften, akademischen Zeitschriften, Quant Blogs, Foren und Zeitschriften, die alle Aspekte des Handels diskutieren. Für fortschrittlichere Strategie-Ideen empfehle ich SSRN und arXiv - Quantitative Finance.