Kapitel 1. Python und Algorithmischer Handel
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Bei Goldman [Sachs] ist die Zahl der Mitarbeiter, die sich mit dem Aktienhandel beschäftigen, von einem Höchststand von 600 im Jahr 2000 auf heute nur noch zwei gesunken.1
Der Wirtschaftswissenschaftler
Dieses Kapitel bietet Hintergrundinformationen und einen Überblick über die Themen, die in diesem Buch behandelt werden. Python für den algorithmischen Handel ist zwar eine Nische an der Schnittstelle von Python-Programmierung und Finanzwesen, aber eine schnell wachsende Nische, die so unterschiedliche Themen wie Python-Einsatz, interaktive Finanzanalysen, maschinelles und tiefes Lernen, objektorientierte Programmierung, Socket-Kommunikation, Visualisierung von Streaming-Daten und Handelsplattformen berührt.
Für eine schnelle Auffrischung wichtiger Python-Themen solltest du zuerst den Anhang A lesen.
Python für Finanzen
Die Programmiersprache Python entstand 1991 mit der ersten Veröffentlichung einer Version mit der Bezeichnung 0.9.0 durch Guido van Rossum. Im Jahr 1994 folgte die Version 1.0. Es dauerte jedoch fast zwei Jahrzehnte, bis sich Python als wichtige Programmiersprache und Technologieplattform in der Finanzbranche etablierte. Natürlich gab es frühe Anwender, vor allem Hedgefonds, aber die breite Anwendung begann wahrscheinlich erst um 2011.
Ein großes Hindernis für die Einführung von Python in der Finanzbranche ist die Tatsache, dass die Standardversion von Python, CPython, eine interpretierte Hochsprache ist. Numerische Algorithmen im Allgemeinen und Finanzalgorithmen im Besonderen werden häufig auf der Grundlage von (verschachtelten) Schleifenstrukturen implementiert. Während kompilierte Low-Level-Sprachen wie C oder C++ solche Schleifen sehr schnell ausführen können, ist Python, das auf Interpretation statt auf Kompilierung setzt, in der Regel recht langsam dabei. Folglich erwies sich Python als zu langsam für viele reale Finanzanwendungen, wie z. B. Optionsbewertung oder Risikomanagement.
Python vs. Pseudo-Code
Obwohl Python nie speziell für die Wissenschafts- und Finanzwelt entwickelt wurde, mochten viele Menschen aus diesen Bereichen die Schönheit und Prägnanz der Syntax. Vor nicht allzu langer Zeit galt es noch als gute Tradition, einen (Finanz-)Algorithmus zu erklären und gleichzeitig einen Pseudocode als Zwischenschritt zur richtigen technischen Umsetzung zu präsentieren. Viele waren der Meinung, dass mit Python der Schritt mit dem Pseudocode nicht mehr nötig sein würde. Und sie hatten größtenteils Recht.
Betrachte zum Beispiel die Eulersche Diskretisierung der geometrischen Brownschen Bewegung, wie in Gleichung 1-1.
Gleichung 1-1. Eulersche Diskretisierung der geometrischen Brownschen Bewegung
Die Auszeichnungssprache und der Compiler LaTeX sind seit Jahrzehnten der Goldstandard für das Verfassen wissenschaftlicher Dokumente, die mathematische Formeln enthalten. In vielerlei Hinsicht ähnelt die Latex-Syntax dem Pseudocode, z. B. wenn du Gleichungen aufstellst, wie in Gleichung 1-1. In diesem speziellen Fall sieht die Latex-Version wie folgt aus:
S_T = S_0 \exp((r - 0.5 \sigma^2) T + \sigma z \sqrt{T})
In Python bedeutet das, dass der Code mit den entsprechenden Variablendefinitionen ausführbar ist, was der Finanzformel und der Latex-Darstellung sehr nahe kommt:
S_T
=
S_0
*
exp
((
r
-
0.5
*
sigma
**
2
)
*
T
+
sigma
*
z
*
sqrt
(
T
))
Das Problem der Geschwindigkeit bleibt jedoch bestehen. Eine solche Differenzengleichung als numerische Annäherung an die jeweilige stochastische Differentialgleichung wird in der Regel verwendet, um Derivate durch Monte-Carlo-Simulationen zu bewerten oder um Risikoanalysen und -management auf der Grundlage von Simulationen durchzuführen.2 Diese Aufgaben können wiederum Millionen von Simulationen erfordern, die in angemessener Zeit abgeschlossen werden müssen, oft fast in Echtzeit oder zumindest zeitnah. Python ist eine interpretierte Programmiersprache und wurde nie dafür entwickelt, schnell genug zu sein, um solche rechenintensiven Aufgaben zu bewältigen.
NumPy und Vektorisierung
2006 wurde die Version 1.0 des NumPy
Python-Pakets von Travis Oliphant veröffentlicht. NumPy
steht für numerisches Python und zielt damit auf Szenarien ab, die numerisch anspruchsvoll sind. Der Basis-Python-Interpreter versucht, in vielen Bereichen so allgemein wie möglich zu sein, was oft zu einem ziemlichen Overhead zur Laufzeit führt.3 NumPy
Der Interpreter von Python hingegen nutzt die Spezialisierung als Hauptansatz, um Overheadzu vermeiden und in bestimmtenAnwendungsszenarien so gut und so schnell wie möglich zu sein.
Die Hauptklasse von NumPy
ist das reguläre Array-Objekt, das ndarray
Objekt für n-dimensionales Array genannt wird. Es ist unveränderlich, d.h. seine Größe kann nicht verändert werden, und es kann nur einen einzigen Datentyp beherbergen, der dtype
heißt. Diese Spezialisierung ermöglicht die Implementierung von prägnantem und schnellem Code. Ein zentraler Ansatz in diesem Zusammenhang ist die Vektorisierung. Im Grunde vermeidet dieser Ansatz Schleifen auf Python-Ebene und delegiert die Schleifenbildung an spezialisierten NumPy
Code, der in der Regel in C implementiert und daher recht schnell ist.
Betrachten wir die Simulation von 1.000.000 Werten am Ende der Periode gemäß Gleichung 1-1 mit reinem Python. Der größte Teil des folgenden Codes ist eine for
Schleife mit 1.000.000 Iterationen:
In
[
1
]
:
%
%
time
import
random
from
math
import
exp
,
sqrt
S0
=
100
r
=
0.05
T
=
1.0
sigma
=
0.2
values
=
[
]
for
_
in
range
(
1000000
)
:
ST
=
S0
*
exp
(
(
r
-
0.5
*
sigma
*
*
2
)
*
T
+
sigma
*
random
.
gauss
(
0
,
1
)
*
sqrt
(
T
)
)
values
.
append
(
ST
)
CPU
times
:
user
1.13
s
,
sys
:
21.7
ms
,
total
:
1.15
s
Wall
time
:
1.15
s
Der anfängliche Indexstand.
Die konstante Kurzschlussrate.
Der Zeithorizont in Jahresbruchteilen.
Der konstante Volatilitätsfaktor.
Ein leeres
list
Objekt, um simulierte Werte zu sammeln.Die Hauptschleife
for
.Die Simulation eines einzelnen Periodenendwerts.
Hängt den simulierten Wert an das
list
Objekt an.
Mit NumPy
kannst du Schleifen auf der Python-Ebene durch den Einsatz von Vektorisierung komplett vermeiden. Der Code ist viel prägnanter, lesbarer und etwa um den Faktor acht schneller:
In
[
2
]
:
%
%
time
import
numpy
as
np
S0
=
100
r
=
0.05
T
=
1.0
sigma
=
0.2
ST
=
S0
*
np
.
exp
(
(
r
-
0.5
*
sigma
*
*
2
)
*
T
+
sigma
*
np
.
random
.
standard_normal
(
1000000
)
*
np
.
sqrt
(
T
)
)
CPU
times
:
user
375
ms
,
sys
:
82.6
ms
,
total
:
458
ms
Wall
time
:
160
ms
Vektorisierung ist ein leistungsfähiges Konzept, um prägnanten, leicht zu lesenden und einfach zu wartenden Code im Finanzwesen und im algorithmischen Handel zu schreiben. Mit NumPy
macht vektorisierter Code den Code nicht nur übersichtlicher, sondern kann auch die Codeausführung erheblich beschleunigen (z. B. um den Faktor acht bei der Monte-Carlo-Simulation).
Man kann mit Sicherheit sagen, dass NumPy
maßgeblich zum Erfolg von Python in Wissenschaft und Finanzwesen beigetragen hat. Viele andere beliebte Python-Pakete aus dem sogenannten wissenschaftlichen Python-Stack bauen auf NumPy
als effiziente, leistungsfähige Datenstruktur zum Speichern und Verarbeiten numerischer Daten auf. Tatsächlich ist NumPy
aus dem SciPy
Paketprojekt hervorgegangen, das eine Fülle von Funktionen bietet, die in der Wissenschaft häufig benötigt werden. Das Projekt SciPy
erkannte den Bedarf an einer leistungsfähigeren numerischen Datenstruktur undfasste ältere Projekte wie Numeric
und NumArray
in diesem Bereich zu einer neuen, vereinheitlichenden Struktur in Form von NumPy
zusammen.
Im algorithmischen Handel ist eine Monte-Carlo-Simulation vielleicht nicht der wichtigste Anwendungsfall für eine Programmiersprache. Wenn du jedoch in den Bereich des algorithmischen Handels einsteigst, ist die Verwaltung größerer oder sogar großer Finanzzeitreihendaten ein sehr wichtiger Anwendungsfall. Man denke nur an das Backtesting von (Intraday-)Handelsstrategien oder die Verarbeitung von Tick-Datenströmen während der Handelszeiten. An dieser Stelle kommt das Datenanalysepaketpandas
ins Spiel.
pandas und die DataFrame-Klasse
Die Entwicklung von pandas
wurde 2008 von Wes McKinney begonnen, der damals bei AQR Capital Management arbeitete, einem großen Hedgefonds mit Sitz in Greenwich, Connecticut. Wie für jeden anderen Hedgefonds auch, ist die Arbeit mit Zeitreihendaten für AQR Capital Management von größter Bedeutung, aber damals bot Python keine ansprechende Unterstützung für diese Art von Daten. Wes' Idee war es, ein Paket zu erstellen, das die Fähigkeiten der Statistiksprache R(http://r-project.org) in diesem Bereich nachahmt. Das spiegelt sich zum Beispiel in der Benennung der Hauptklasse DataFrame
wider, deren Gegenstück in R data.frame
heißt. Da es als nicht nah genug am Kerngeschäft der Geldverwaltung angesehen wurde, stellte AQR Capital Management das Projekt pandas
im Jahr 2009 als Open Source zur Verfügung, was den Beginn einer großen Erfolgsgeschichte im Bereich Open Source-basierter Daten und Finanzanalysen markiert.
Nicht zuletzt dank pandas
ist Python zu einer wichtigen Kraft in der Daten- und Finanzanalyse geworden. Viele Leute, die Python von verschiedenen anderen Sprachen übernehmen, nennenpandas
als einen Hauptgrund für ihre Entscheidung an. In Kombination mit offenen Datenquellen wie Quandl ermöglicht pandas
sogar Studierenden, anspruchsvolle Finanzanalysen mit den niedrigsten Einstiegshürden überhaupt durchzuführen: Ein normales Notebook mit Internetanschluss reicht aus.
Angenommen, ein algorithmischer Händler ist daran interessiert, Bitcoin zu handeln, die Kryptowährung mit der größten Marktkapitalisierung. Ein erster Schritt könnte sein, Daten über den historischen Wechselkurs in USD abzurufen. Mit Quandl-Daten und pandas
ist eine solche Aufgabe in weniger als einer Minute erledigt. Abbildung 1-1 zeigt den Plot, der sich aus dem folgenden Python-Code ergibt, der (unter Auslassung einiger mit dem Plotting-Stil zusammenhängender Parametrisierungen) nur aus vier Zeilen besteht. Obwohl pandas
nicht explizit importiert wird, liefert das Quandl Python Wrapper-Paket standardmäßig ein DataFrame
Objekt, das dann verwendet wird, um einen einfachen gleitenden Durchschnitt (SMA) von 100 Tagen hinzuzufügen und die Rohdaten zusammen mit demSMA zu visualisieren:
In
[
3
]
:
%
matplotlib
inline
from
pylab
import
mpl
,
plt
plt
.
style
.
use
(
'
seaborn
'
)
mpl
.
rcParams
[
'
savefig.dpi
'
]
=
300
mpl
.
rcParams
[
'
font.family
'
]
=
'
serif
'
In
[
4
]
:
import
configparser
c
=
configparser
.
ConfigParser
(
)
c
.
read
(
'
../pyalgo.cfg
'
)
Out
[
4
]
:
[
'
../pyalgo.cfg
'
]
In
[
5
]
:
import
quandl
as
q
q
.
ApiConfig
.
api_key
=
c
[
'
quandl
'
]
[
'
api_key
'
]
d
=
q
.
get
(
'
BCHAIN/MKPRU
'
)
d
[
'
SMA
'
]
=
d
[
'
Value
'
]
.
rolling
(
100
)
.
mean
(
)
d
.
loc
[
'
2013-1-1
'
:
]
.
plot
(
title
=
'
BTC/USD exchange rate
'
,
figsize
=
(
10
,
6
)
)
;
Importiert und konfiguriert das Plotting-Paket.
Importiert das Modul
configparser
und liest die Anmeldedaten ein.Importiert das Quandl Python-Wrapper-Paket und liefert den API-Schlüssel.
Ruft die täglichen Daten für den Bitcoin-Wechselkurs ab und gibt ein
pandas
DataFrame
Objekt mit einer einzigen Spalte zurück.Berechnet den SMA für 100 Tage auf vektorisierte Weise.
Wählt Daten ab dem 1. Januar 2013 aus und zeichnet sie auf.
Es liegt auf der Hand, dass NumPy
und pandas
messbar zum Erfolg von Python im Finanzbereich beitragen. Das Python-Ökosystem hat aber noch viel mehr zu bieten, und zwar in Form von zusätzlichen Python-Paketen, die eher grundlegende und manchmal auch spezielle Probleme lösen. In diesem Buch werden wir Pakete für die Datenabfrage und -speicherung (z. B. PyTables
, TsTables
, SQLite
) und für maschinelles und tiefes Lernen (z. B. scikit-learn
, TensorFlow
) nutzen, um nur zwei Kategorien zu nennen. Im Laufe des Projekts werden wir auch Klassen und Module implementieren, die jedes algorithmische Handelsprojekt effizienter machen. Die wichtigsten Pakete, die wir verwenden, sind jedoch NumPy
undpandas
.
Während NumPy
die grundlegende Datenstruktur für die Speicherung numerischer Daten und die Arbeit mit ihnen bereitstellt, bietet pandas
leistungsstarke Funktionen für die Verwaltung von Zeitreihen. Außerdem lassen sich damit Funktionen aus anderen Paketen in eine einfach zu bedienende API einbinden. Das soeben beschriebene Bitcoin-Beispiel zeigt, dass ein einziger Methodenaufruf für ein DataFrame
Objekt ausreicht, um ein Diagramm mit zwei Finanzzeitreihen zu erstellen. Wie NumPy
ermöglicht auch pandas
einen recht prägnanten, vektorisierten Code, der aufgrund der starken Verwendung von kompiliertem Code unter der Haube im Allgemeinen recht schnell ausgeführt wird.
Algorithmischer Handel
Der Begriff " algorithmischer Handel" ist weder eindeutig noch allgemeingültig definiert. Auf einer eher grundlegenden Ebene bezieht er sich auf den Handel mit Finanzinstrumenten, der auf einem formalen Algorithmus basiert. Ein Algorithmus ist eine Reihe von (mathematischen, technischen) Operationen, die in einer bestimmten Reihenfolge ausgeführt werden, um ein bestimmtes Ziel zu erreichen. Es gibt zum Beispiel mathematische Algorithmen, um einen Rubik's Cube zu lösen.4 Ein solcher Algorithmus kann das vorliegende Problem durch ein schrittweises Vorgehen oft perfekt lösen. Ein anderes Beispiel sind Algorithmen, um die Wurzel(n) einer Gleichung zu finden, wenn es sie überhaupt gibt. In diesem Sinne ist das Ziel eines mathematischen Algorithmus oft genau festgelegt und eine optimale Lösung wird oft erwartet.
Aber wie sieht es mit dem Ziel von Finanzhandelsalgorithmen aus? Diese Frage ist im Allgemeinen nicht so einfach zu beantworten. Vielleicht hilft es, einen Moment zurückzutreten und die allgemeinen Motive für den Handel zu betrachten. In Dorn et al. (2008) schreiben:
Der Handel auf den Finanzmärkten ist eine wichtige wirtschaftliche Aktivität. Der Handel ist notwendig, um in den Markt ein- und auszusteigen, um nicht benötigtes Geld in den Markt zu bringen und um es wieder in Bargeld umzuwandeln, wenn das Geld benötigt wird. Sie werden auch benötigt, um Geld innerhalb des Marktes zu bewegen, um einen Vermögenswert gegen einen anderen zu tauschen, um Risiken zu steuern und um Informationen über zukünftige Preisbewegungen zu nutzen.
Die hier vertretene Ansicht ist eher technischer als wirtschaftlicher Natur und konzentriert sich hauptsächlich auf den Prozess selbst und nur teilweise darauf, warum Menschen überhaupt Handel betreiben. Für unsere Zwecke umfasst eine nicht erschöpfende Liste von Finanzhandelsmotiven von Menschen und Finanzinstituten, die ihr eigenes Geld oder das anderer verwalten, diefolgenden:
- Beta-Handel
-
Erzielung von Marktrisikoprämien, indem du z. B. in börsengehandelte Fonds (ETFs) investierst, die die Wertentwicklung des S&P 500 nachbilden.
- Alpha-Generation
-
Erzielung von marktunabhängigen Risikoprämien, indem du z.B. Leerverkäufe von Aktien des S&P 500 oder ETFs auf den S&P 500 tätigst.
- Statische Absicherung
-
Absicherung gegen Marktrisiken, indem du z.B. aus dem Geld liegende Verkaufsoptionen auf den S&P 500 kaufst.
- Dynamische Absicherung
-
Absicherung gegen Marktrisiken, die sich auf Optionen auf den S&P 500 auswirken, z. B. durch den dynamischen Handel mit Futures auf den S&P 500 und geeigneten Bargeld-, Geldmarkt- oder Zinsinstrumenten.
- Aktiv-Passiv-Management
-
Handel mit S&P 500-Aktien und ETFs, um Verbindlichkeiten zu decken, die sich z. B. aus dem Abschluss von Lebensversicherungen ergeben.
- Market Making
-
Sie sorgen zum Beispiel für Liquidität bei Optionen auf den S&P 500, indem sie Optionen zu unterschiedlichen Geld- und Briefkursen kaufen und verkaufen.
All diese Arten von Geschäften können sowohl diskretionär umgesetzt werden,wobei menschliche Händler/innen ihre Entscheidungen hauptsächlich selbst treffen, als auch auf der Grundlage von Algorithmen, die den/die menschliche/n Händler/in unterstützen oder ihn/sie sogar vollständig imEntscheidungsprozess ersetzen. In diesem Zusammenhang spielt die Computerisierung des Finanzhandels natürlich eine wichtige Rolle. Während in den Anfängen des Finanzhandels der Parketthandel mit einer großen Gruppe von Menschen, die sich gegenseitig anschreien ("open outcry"), die einzige Möglichkeit war, Geschäfte abzuwickeln, haben die Computerisierung und das Aufkommen von Internet- und Webtechnologien den Handel in der Finanzbranche revolutioniert. Das Zitat zu Beginn dieses Kapitels veranschaulicht dies eindrucksvoll anhand der Anzahl der Personen, die im Jahr 2000 und im Jahr 2016 bei Goldman Sachs aktiv mit Aktien handeln. Es handelt sich um einen Trend, der schon vor 25 Jahren vorhergesehen wurde, wie Solomon und Corso (1991) betonen:
Computer haben den Handel mit Wertpapieren revolutioniert und der Aktienmarkt befindet sich derzeit inmitten eines dynamischen Wandels. Es ist klar, dass der Markt der Zukunft nicht mit den Märkten der Vergangenheit vergleichbar sein wird.
Die Technologie hat es möglich gemacht, dass Informationen über Aktienkurse in Sekundenschnelle in die ganze Welt gesendet werden können. Heutzutage leiten Computer Aufträge weiter und führen kleine Geschäfte direkt vom Terminal des Maklerunternehmens an die Börse aus. Computer verbinden jetzt verschiedene Börsen miteinander, was dazu beiträgt, einen einzigen globalen Markt für den Handel mit Wertpapieren zu schaffen. Die fortschreitende Verbesserung der Technologie wird es möglich machen, Geschäfte weltweit über elektronische Handelssysteme auszuführen.
Interessanterweise findet sich einer der ältesten und am weitesten verbreiteten Algorithmen im dynamischen Hedging von Optionen. Bereits mit der Veröffentlichung der bahnbrechenden Papiere über die Bewertung europäischer Optionen von Black und Scholes (1973) und Merton (1973) wurde der Algorithmus, der Delta-Hedging genannt wird, verfügbar gemacht, lange bevor der computerisierte und elektronische Handel überhaupt begann. Delta-Hedging als Handelsalgorithmus zeigt, wie man alle Marktrisiken in einer vereinfachten, perfekten, kontinuierlichen Modellwelt absichern kann. In der realen Welt mit Transaktionskosten, diskretem Handel, unvollkommen liquiden Märkten und anderen Unzulänglichkeiten ("Imperfektionen") hat der Algorithmus - vielleicht etwas überraschend - seine Nützlichkeit und Robustheit unter Beweis gestellt. Er ermöglicht es zwar nicht, Marktrisiken bei Optionen perfekt abzusichern, aber er ist nützlich, um sich dem Ideal anzunähern, und wird daher in der Finanzbranche immer noch in großem Umfang eingesetzt.5
Dieses Buch konzentriert sich auf den algorithmischen Handel im Kontext von Alpha-generierenden Strategien. Es gibt zwar anspruchsvollere Definitionen für Alpha, aber für die Zwecke dieses Buches wird Alpha als die Differenz zwischen der Rendite einer Handelsstrategie über einen bestimmten Zeitraum und der Rendite der Benchmark (einzelne Aktie, Index, Kryptowährung usw.) betrachtet. Wenn beispielsweise der S&P 500 im Jahr 2018 eine Rendite von 10 % erzielt und eine algorithmische Strategie 12 %, dann beträgt Alpha +2 %-Punkte. Wenn die Strategie 7 % abwirft, beträgt das Alpha -3 %-Punkte. Im Allgemeinen werden solche Zahlen nicht um das Risiko bereinigt, und andere Risikomerkmale, wie der maximale Drawdown (Zeitraum), werden in der Regel als zweitrangig betrachtet, wenn sie überhaupt eine Rolle spielen.
Dieses Buch konzentriert sich auf Alpha-generierende Strategien oder Strategien, die versuchen, unabhängig von der Marktentwicklung positive Renditen (über einer Benchmark) zu erzielen. Alpha wird in diesem Buch (auf die einfachste Art und Weise) als die Überschussrendite einer Strategie gegenüber der Wertentwicklung des Benchmark-Finanzinstruments definiert.
Es gibt noch andere Bereiche, in denen handelsbezogene Algorithmen eine wichtige Rolle spielen. Einer davon ist der Hochfrequenzhandel (High Frequency Trading, HFT), bei dem Geschwindigkeit in der Regel die Disziplin ist, in der die Akteure konkurrieren.6 Die Motive für HFT sind vielfältig, aber Market Making und Alpha-Generierung spielen wahrscheinlich eine wichtige Rolle. Ein weiterer Bereich ist die Handelsausführung, bei der Algorithmen eingesetzt werden, um bestimmte, nicht standardisierte Handelsgeschäfte optimal auszuführen. Zu den Motiven in diesem Bereich könnte die Ausführung großer Aufträge (zu bestmöglichen Preisen) oder die Ausführung eines Auftrags mit möglichst geringen Auswirkungen auf den Markt und den Preis gehören. Ein subtileres Motiv könnte darin bestehen, einen Auftrag zu verschleiern, indem er an verschiedenen Börsenplätzen ausgeführt wird.
Eine wichtige Frage bleibt zu klären: Gibt es einen Vorteil, Algorithmen für den Handel zu verwenden, anstatt menschliche Forschung, Erfahrung und Ermessensspielraum? Diese Frage lässt sich kaum allgemeingültig beantworten. Sicherlich gibt es menschliche Händler/innen und Portfoliomanager/innen, die über längere Zeiträume hinweg im Durchschnitt mehr als ihre Benchmark für Investoren verdient haben. Das Paradebeispiel in dieser Hinsicht ist Warren Buffett. Andererseits zeigen statistische Analysen, dass die Mehrheit der aktiven Portfoliomanager/innen die relevanten Benchmarks nur selten dauerhaft schlagen. Mit Bezug auf das Jahr 2015 schreibt Adam Shell:
Im vergangenen Jahr, als der Standard & Poor's 500-Aktienindex beispielsweise eine mickrige Gesamtrendite von 1,4 % (einschließlich Dividenden) verzeichnete, erzielten 66 % der aktiv verwalteten Aktienfonds für große Unternehmen geringere Renditen als der Index... Die längerfristigen Aussichten sind ebenso düster: 84 % der Large-Cap-Fonds erzielten in den letzten fünf Jahren geringere Renditen als der S&P 500 und 82 % fielen in den letzten zehn Jahren zurück, so die Studie.7
In einer empirischen Studie, die im Dezember 2016 veröffentlicht wurde, schreiben Harvey et al:
Wir analysieren und vergleichen die Leistung von diskretionären und systematischen Hedgefonds. Systematische Fonds verwenden regelbasierte Strategien, bei denen der Mensch kaum oder gar nicht eingreift....Wir stellen fest, dass systematische Aktienmanager im Zeitraum 1996-2014 bei den unbereinigten (rohen) Renditen hinter ihren diskretionären Pendants zurückbleiben, dass aber die risikobereinigte Performance nach Bereinigung um bekannte Risikofaktoren ähnlich ist. Im Makrobereich schneiden systematische Fonds sowohl auf unbereinigter als auch auf risikobereinigter Basis besser ab als diskretionäre Fonds.
Tabelle 1-0 gibt die wichtigsten quantitativen Ergebnisse der Studie von Harvey et al. (2016) wieder.8 Zu den Faktoren in der Tabelle gehören traditionelle Faktoren (Aktien, Anleihen usw.), dynamische Faktoren (Value, Momentum usw.) und Volatilität (Kauf von Puts und Calls am Geld). Die bereinigte Renditebewertungsquote teilt Alpha durch die bereinigte Renditevolatilität. Weitere Details und Hintergründe findest du in der Originalstudie.
Die Ergebnisse der Studie zeigen, dass systematische ("algorithmische") Makro-Hedgefonds als Kategorie am besten abschneiden, sowohl unbereinigt als auch risikobereinigt. Sie erwirtschaften über den untersuchten Zeitraum ein annualisiertes Alpha von 4,85%-Punkten. Dabei handelt es sich um Hedgefonds, die Strategien umsetzen, die in der Regel global und vermögensübergreifend sind und oft politische und makroökonomische Elemente beinhalten. Systematische Aktien-Hedgefonds schlagen ihre diskretionären Pendants nur bei der bereinigten Renditebeurteilung (0,35 gegenüber 0,25).
|
Systematischer Makro |
Diskretionäres Makro |
Systematisches Eigenkapital |
Frei verfügbares Eigenkapital |
---|---|---|---|---|
Durchschnittliche Rendite |
5.01% | 2.86% | 2.88% | 4.09% |
Rendite, die auf Faktoren zurückzuführen ist |
0.15% | 1.28% | 1.77% | 2.86% |
Durchschnittliche adj. Rendite (Alpha) |
4.85% | 1.57% | 1.11% | 1.22% |
Adj. Rendite Volatilität |
0.93% | 5.10% | 3.18% | 4.79% |
Adj. Rendite Beurteilungsquote |
0.44 | 0.31 | 0.35 | 0.25 |
Im Vergleich zum S&P 500 war die Performance von Hedgefonds im Jahr 2017 insgesamt recht mager. Während der S&P 500-Index 21,8 % abwarf, brachten Hedgefonds den Anlegern nur 8,5 % ein (siehe diesen Artikel in Investopedia). Das zeigt, wie schwer es ist, selbst mit millionenschweren Budgets für Forschung und Technologie Alpha zu generieren.
Python für den algorithmischen Handel
Python wird in vielen Bereichen der Finanzbranche eingesetzt, ist aber im Bereich des algorithmischen Handels besonders populär geworden. Dafür gibt es ein paar gute Gründe:
- Fähigkeiten zur Datenanalyse
-
Eine wichtige Voraussetzung für jedes algorithmische Handelsprojekt ist die Fähigkeit, Finanzdaten effizient zu verwalten und zu verarbeiten. Python, in Kombination mit Paketen wie
NumPy
undpandas
, macht das Leben in dieser Hinsicht für jeden algorithmischen Händler einfacher als die meisten anderen Programmiersprachen. - Umgang mit modernen APIs
-
Moderne Online-Handelsplattformen wie die von FXCM und Oanda bieten RESTful Application Programming Interfaces (APIs) und Socket (Streaming) APIs für den Zugriff auf historische und Live-Daten. Python ist im Allgemeinen gut geeignet, um effizient mit solchen APIs zu interagieren.
- Dedizierte Pakete
-
Zusätzlich zu den Standard-Datenanalysepaketen gibt es mehrere Pakete, die speziell für den algorithmischen Handel entwickelt wurden, wie z.B.
PyAlgoTrade
undZipline
für das Backtesting von Handelsstrategien undPyfolio
für die Durchführung von Portfolio- und Risikoanalysen. - Vom Verkäufer gesponserte Pakete
-
Immer mehr Anbieter in diesem Bereich veröffentlichen Open-Source-Python-Pakete, um den Zugang zu ihren Angeboten zu erleichtern. Dazu gehören Online-Handelsplattformen wie Oanda sowie die führenden Datenanbieter wie Bloomberg und Refinitiv.
- Dedizierte Plattformen
-
Quantopian zum Beispiel bietet eine standardisierte Backtesting-Umgebung als webbasierte Plattform, bei der die Sprache der Wahl Python ist und bei der man sich über verschiedene soziale Netzwerkfunktionen mit Gleichgesinnten austauschen kann. Seit seiner Gründung bis 2020 hat Quantopian mehr als 300.000 Nutzer/innen angezogen.
- Einführung auf der Buy- und Sell-Side
-
Immer mehr institutionelle Akteure setzen Python ein, um die Entwicklungsarbeit in ihren Handelsabteilungen zu rationalisieren. Das wiederum erfordert immer mehr Mitarbeiter, die Python beherrschen, so dass sich das Erlernen von Python lohnt.
- Bildung, Ausbildung und Bücher
-
Voraussetzung für die breite Einführung einer Technologie oder Programmiersprache sind akademische und professionelle Aus- und Weiterbildungsprogramme in Kombination mit Fachbüchern und anderen Ressourcen. Das Python-Ökosystem hat in letzter Zeit einen enormen Zuwachs an solchen Angeboten erlebt, die immer mehr Menschen in der Nutzung von Python für den Finanzbereich schulen und ausbilden. Es ist zu erwarten, dass dies den Trend zur Einführung von Python im Bereich des algorithmischen Handels noch verstärken wird.
Zusammenfassend lässt sich sagen, dass Python im algorithmischen Handel bereits eine wichtige Rolle spielt und in Zukunft noch wichtiger werden dürfte. Python ist daher eine gute Wahl für jeden, der in diesen Bereich einsteigen möchte, sei es als ambitionierter "Retail"-Händler oder als Profi, der bei einem führenden Finanzinstitut beschäftigt ist, das systematischen Handel betreibt.
Schwerpunkt und Voraussetzungen
Der Schwerpunkt dieses Buches liegt auf Python als Programmiersprache für den algorithmischen Handel. Das Buch setzt voraus, dass der Leser bereits einige Erfahrung mit Python und gängigen Python-Paketen für die Datenanalyse hat. Gute Einführungsbücher sind z. B. Hilpisch (2018), McKinney (2017) und VanderPlas (2016), die alle herangezogen werden können, um eine solide Grundlage in Python für Datenanalyse und Finanzen zu schaffen. Außerdem wird erwartet, dass der Leser einige Erfahrung mit typischen Tools für interaktive Analysen mit Python hat, wie z. B. IPython
, zu dem VanderPlas (2016) ebenfalls eine Einführung gibt.
In diesem Buch wird Python-Code vorgestellt und erklärt, der auf die jeweiligen Themen angewandt wird, wie Backtesting von Handelsstrategien oder die Arbeit mit Streaming-Daten. Es kann keine umfassende Einführung in alle Pakete bieten, die an verschiedenen Stellen verwendet werden. Es versucht jedoch, die Fähigkeiten der Pakete hervorzuheben, die für die Darstellung von zentraler Bedeutung sind (z. B. die Vektorisierung mit NumPy
).
Das Buch kann auch keine gründliche Einführung und keinen Überblick über alle finanziellen und operativen Aspekte bieten, die für den algorithmischen Handel relevant sind. Stattdessen konzentriert sich der Ansatz auf die Verwendung von Python, um die notwendige Infrastruktur für automatisierte algorithmische Handelssysteme aufzubauen. Natürlich stammen die meisten Beispiele aus dem Bereich des algorithmischen Handels. Wenn es jedoch z. B. um Momentum- oder Mean-Reversion-Strategien geht, werden sie mehr oder weniger einfach verwendet, ohne dass eine (statistische) Überprüfung oder eine eingehende Diskussion ihrer Feinheiten erfolgt. Wann immer es sinnvoll erscheint, wird auf Quellen verwiesen, die sich mit Fragen befassen, die während der Darstellung offen geblieben sind.
Alles in allem ist dieses Buch für Leser geschrieben, die sowohl mit Python als auch mit dem (algorithmischen) Handel etwas Erfahrung haben. Für diese Leser ist das Buch ein praktischer Leitfaden für die Erstellung von automatisierten Handelssystemen mit Python und zusätzlichen Paketen.
Dieses Buch verwendet eine Reihe von Python-Programmieransätzen (z. B. objektorientierte Programmierung) und Paketen (z. B. scikit-learn
), die nicht im Detail erklärt werden können. Der Schwerpunkt liegt auf der Anwendung dieser Ansätze und Pakete auf verschiedene Schritte in einem algorithmischen Handelsprozess. Es wird daher empfohlen, dass diejenigen, die noch nicht genügend Erfahrung mit Python (für Finanzen) haben, zusätzlich einführende Python-Texte zu Rate ziehen.
Handelsstrategien
In diesem Buch werden vier verschiedene algorithmische Handelsstrategien als Beispiele verwendet. Sie werden in den folgenden Abschnitten kurz vorgestellt und in Kapitel 4 etwas ausführlicher behandelt. Alle diese Handelsstrategien können hauptsächlich als Alphastrategien eingestuft werden, da ihr Hauptziel darin besteht, unabhängig von der Marktrichtung positive, über dem Markt liegende Erträge zu erzielen. Kanonische Beispiele für gehandelte Finanzinstrumente in diesem Buch sind ein Aktienindex, eine einzelne Aktie oder eine Kryptowährung (in einer Fiat-Währung). Das Buch behandelt keine Strategien, bei denen mehrere Finanzinstrumente gleichzeitig gehandelt werden (Paarhandelsstrategien, Strategien, die auf Körben basieren, usw.). Außerdem werden nur Strategien behandelt, deren Handelssignale aus strukturierten, finanziellen Zeitreihendaten abgeleitet werden und nicht etwa aus unstrukturierten Datenquellen wie Nachrichten oder Social Media Feeds. Dadurch bleiben die Diskussionen und die Python-Implementierungen übersichtlich und leichter verständlich, ganz im Sinne des bereits erwähnten Ansatzes, sich auf Python für den algorithmischen Handel zu konzentrieren.9
Der Rest dieses Kapitels gibt einen kurzen Überblick über die vier Handelsstrategien, die in diesem Buch verwendet werden.
Einfache gleitende Durchschnitte
Die erste Art der Handelsstrategie stützt sich auf einfache gleitende Durchschnitte (SMAs), um Handelssignale und Marktpositionierungen zu generieren. Diese Handelsstrategien wurden von so genannten technischen Analysten oder Chartisten populär gemacht. Der Grundgedanke ist, dass ein kürzerfristiger SMA, der höher ist als ein längerfristiger SMA, eine Long-Position am Markt signalisiert, während das gegenteilige Szenario eine neutrale oder Short-Position am Markt signalisiert.
Momentum
Der Grundgedanke hinter Momentum-Strategien ist, dass man davon ausgeht, dass sich ein Finanzinstrument für eine gewisse Zeit so entwickeln wird wie in den letzten Jahren. Wenn z. B. ein Aktienindex in den letzten fünf Tagen im Durchschnitt eine negative Rendite erzielt hat, wird davon ausgegangen, dass seine Wertentwicklung auch morgen noch negativ sein wird.
Mittlere Umkehrung
Bei Mean-Reversion-Strategien wird davon ausgegangen, dass ein Finanzinstrument zu einem Mittelwert oder Trendniveau zurückkehrt, wenn es derzeit weit genug von einem solchen Niveau entfernt ist. Nehmen wir zum Beispiel an, dass eine Aktie 10 USD unter ihrem 200-Tage-SMA-Niveau von 100 gehandelt wird. Dann wird davon ausgegangen, dass der Aktienkurs bald zu seinem SMA-Niveau zurückkehren wird.
Maschinelles und tiefes Lernen
Bei Algorithmen für maschinelles und tiefes Lernen wird in der Regel ein Blackbox-Ansatz gewählt, um Marktbewegungen vorherzusagen. Der Einfachheit und Reproduzierbarkeit halber stützen sich die Beispiele in diesem Buch hauptsächlich auf historische Renditebeobachtungen als Merkmale zum Trainieren von Machine- und Deep-Learning-Algorithmen zur Vorhersage von Aktienmarktbewegungen.
Dieses Buch führt nicht systematisch in den algorithmischen Handel ein. Da der Schwerpunkt auf der Anwendung von Python in diesem faszinierenden Bereich liegt, sollten Leser, die mit dem algorithmischen Handel nicht vertraut sind, spezielle Ressourcen zu diesem Thema konsultieren, von denen einige in diesem und den folgenden Kapiteln zitiert werden. Sei dir aber bewusst, dass die Welt des algorithmischen Handels im Allgemeinen sehr geheimnisvoll ist und dass fast jeder, der erfolgreich ist, seine Geheimnisse nur ungern preisgibt, um seine Erfolgsquellen (d.h. sein Alpha) zu schützen.
Schlussfolgerungen
Python ist bereits eine feste Größe im Finanzwesen im Allgemeinen und auf dem Weg, auch im algorithmischen Handel eine wichtige Rolle zu spielen. Es gibt eine Reihe guter Gründe, Python für den algorithmischen Handel zu verwenden, darunter das leistungsstarke Ökosystem von Paketen, die eine effiziente Datenanalyse oder den Umgang mit modernen APIs ermöglichen. Es gibt auch eine Reihe guter Gründe, Python für den algorithmischen Handel zu lernen, vor allem die Tatsache, dass einige der größten Buy- und Sell-Side-Institutionen Python in ihren Handelsgeschäften stark nutzen und ständig nach erfahrenen Python-Experten suchen.
Dieses Buch konzentriert sich auf die Anwendung von Python auf die verschiedenen Disziplinen des algorithmischen Handels, wie das Backtesting von Handelsstrategien oder die Interaktion mit Online-Handelsplattformen. Es kann weder eine gründliche Einführung in Python selbst noch in den Handel im Allgemeinen ersetzen. Es verbindet jedoch systematisch diese beiden faszinierenden Welten, um eine wertvolle Quelle für die Generierung von Alpha auf den umkämpften Finanz- und Kryptowährungsmärkten von heute zu bieten.
Referenzen und weitere Ressourcen
In diesem Kapitel zitierte Bücher und Artikel:
1 "Too Squid to Fail". The Economist, 29. Oktober 2016.
2 Für Details siehe Hilpisch (2018, Kap. 12).
3 Zum Beispiel sind list
Objekte nicht nur veränderbar, was bedeutet, dass sie in ihrer Größe verändert werden können, sondern sie können auch fast jede andere Art von Python-Objekten enthalten, wie int
, float
, tuple
oder list
Objekte selbst.
4 Siehe The Mathematics of the Rubik's Cube oder Algorithmen zum Lösen des Rubik's Cube.
5 Siehe Hilpisch (2015) für eine detaillierte Analyse von Delta-Hedging-Strategien für europäische und amerikanische Optionen mit Python.
6 Siehe das Buch von Lewis (2015) für eine nicht-technische Einführung in HFT.
7 Quelle: "66% der Fondsmanager können die S&P-Ergebnisse nicht erreichen". USA Today, 14. März 2016.
8 Annualisierte Performance (über dem kurzfristigen Zinssatz) und Risikokennzahlen für Hedgefonds-Kategorien, die insgesamt 9.000 Hedgefonds im Zeitraum von Juni 1996 bis Dezember 2014 umfassen.
9 Siehe das Buch von Kissel (2013) für einen Überblick über Themen im Zusammenhang mit dem algorithmischen Handel, das Buch von Chan (2013) für eine ausführliche Diskussion über Momentum- und Mean-Reversion-Strategien oder das Buch von Narang (2013) für eine Behandlung des quantitativen und HFT-Handels im Allgemeinen.
Get Python für den algorithmischen Handel now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.