Kapitel 1. Warum Python für Finanzen
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Banken sind im Wesentlichen Technologieunternehmen.
Hugo Banziger
Die Programmiersprache Python
Python ist eine hochentwickelte, vielseitig einsetzbare Programmiersprache, die in einer Vielzahl von Bereichen und technischen Gebieten verwendet wird. Auf der Python-Website findest du die folgende Kurzfassung:
Python ist eine interpretierte, objektorientierte High-Level-Programmiersprache mit dynamischer Semantik. Ihre hochentwickelten Datenstrukturen in Kombination mit dynamischer Typisierung und dynamischer Bindung machen sie sehr attraktiv für die schnelle Anwendungsentwicklung sowie für die Verwendung als Skript- oder Klebesprache, um bestehende Komponenten miteinander zu verbinden. Die einfache, leicht zu erlernende Syntax von Python betont die Lesbarkeit und reduziert so die Kosten für die Programmpflege. Python unterstützt Module und Pakete, was die Modularität von Programmen und die Wiederverwendung von Code fördert. Der Python-Interpreter und die umfangreiche Standardbibliothek sind in Quell- oder Binärform für alle wichtigen Plattformen kostenlos erhältlich und können frei verteilt werden.
Das beschreibt ziemlich gut , warum sich Python heute zu einer der wichtigsten Programmiersprachen entwickelt hat. Heutzutage wird Python sowohl von Programmieranfängern als auch von hochqualifizierten Entwicklern in Schulen, Universitäten, Webfirmen, großen Unternehmen und Finanzinstituten sowie in allen wissenschaftlichen Bereichen eingesetzt.
Python hat unter anderem folgende Eigenschaften:
- Offene Quelle
-
Python und die meisten unterstützenden Bibliotheken und Tools sind Open Source und haben in der Regel recht flexible und offene Lizenzen.
- Gedolmetscht
-
Die Referenzimplementierung von CPython ist ein Interpreter der Sprache, der den Python-Code zur Laufzeit in ausführbaren Bytecode übersetzt.
- Multiparadigma
-
Python unterstützt verschiedene Programmier- und Implementierungsparadigmen, wie z.B. Objektorientierung und imperative, funktionale oder prozedurale Programmierung.
- Mehrzweck
-
Python kann sowohl für die schnelle, interaktive Code-Entwicklung als auch für die Erstellung großer Anwendungen verwendet werden; es kann sowohl für Low-Level-Systemoperationen als auch für High-Level-Analyseaufgaben eingesetzt werden.
- Plattformübergreifend
-
Python ist für die wichtigsten Betriebssysteme, wie Windows, Linux und macOS, verfügbar. Es wird zum Erstellen von Desktop- und Webanwendungen verwendet und kann sowohl auf den größten Clustern und leistungsstärksten Servern als auch auf so kleinen Geräten wie dem Raspberry Pi eingesetzt werden.
- Dynamisch typisiert
-
Typen in Python werden im Allgemeinen zur Laufzeit abgeleitet und nicht statisch deklariert wie in den meisten kompilierten Sprachen.
- Einrückung bewusst
-
Im Gegensatz zu den meisten anderen Programmiersprachen verwendet Python Einrückungen zur Kennzeichnung von Codeblöcken anstelle von Klammern, Klammern oder Semikolons.
- Speicherbereinigung
-
Python verfügt über eine automatische Speicherbereinigung, sodass der Programmierer den Speicher nicht mehr verwalten muss.
Wenn es um die Python-Syntax geht und darum, worum es bei Python geht, liefert Python Enhancement Proposal 20 - also das sogenannte "Zen von Python" - die wichtigsten Richtlinien. Es kann von jeder interaktiven Shell aus mit dem Befehl import this
aufgerufen werden:
In [1]: import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Eine kurze Geschichte von Python
Auch wenn Python für manche Menschen immer noch wie etwas Neues wirkt, gibt es es schon ziemlich lange. Tatsächlich begannen die Entwicklungsbemühungen in den 1980er Jahren durch Guido van Rossum aus den Niederlanden. Er ist immer noch in der Python-Entwicklung aktiv und wurde von der Python-Gemeinschaft zum Diktator auf Lebenszeit ernannt. Im Juli 2018 trat van Rossum von dieser Position zurück, nachdem er jahrzehntelang die Python-Kernentwicklung aktiv vorangetrieben hatte. Die folgenden Ereignisse können als Meilensteine in der Entwicklung von Python betrachtet werden:
-
Python 0.9.0 veröffentlicht 1991 (erste Version)
-
Python 1.0 wurde 1994 veröffentlicht
-
Python 2.0 im Jahr 2000 veröffentlicht
-
Python 2.6 im Jahr 2008 veröffentlicht
-
Python 3.0 wurde 2008 veröffentlicht
-
Python 3.1 im Jahr 2009 veröffentlicht
-
Python 2.7 im Jahr 2010 veröffentlicht
-
Python 3.2 im Jahr 2011 veröffentlicht
-
Python 3.3 veröffentlicht im Jahr 2012
-
Python 3.4 im Jahr 2014 veröffentlicht
-
Python 3.5 im Jahr 2015 veröffentlicht
-
Python 3.6 veröffentlicht 2016
-
Python 3.7 veröffentlicht im Juni 2018
Es ist bemerkenswert und für Python-Neulinge manchmal verwirrend, dass es zwei Hauptversionen gibt, die immer noch entwickelt werden und, was noch wichtiger ist, seit 2008 parallel im Einsatz sind. Zum Zeitpunkt der Erstellung dieses Buches wird dies wahrscheinlich noch eine Weile so bleiben, denn ein Großteil des verfügbaren und in Produktion befindlichen Codes ist immer noch Python 2.6/2.7. Während die erste Ausgabe dieses Buches auf Python 2.7 basierte, wird in dieser zweiten Ausgabe durchgehend Python 3.7 verwendet.
Das Python Ökosystem
Ein wichtiges Merkmal von Python als Ökosystem im Vergleich zu einer reinen Programmiersprache ist die Verfügbarkeit einer großen Anzahl von Paketen und Tools. Diese Pakete und Werkzeuge müssen in der Regel importiert werden, wenn sie benötigt werden (z. B. eine Plotting-Bibliothek), oder sie müssen als separater Systemprozess gestartet werden (z. B. eine interaktive Python-Entwicklungsumgebung). Der Import von bedeutet, dass ein Paket für den aktuellen Namensraum und den aktuellen Python-Interpreter-Prozess verfügbar gemacht wird.
Python selbst verfügt bereits über eine große Anzahl von Paketen und Modulen, die den Basisinterpreter in verschiedene Richtungen erweitern, die sogenannte Python Standard Library. So können zum Beispiel grundlegende mathematische Berechnungen ohne Import durchgeführt werden, während speziellere mathematische Funktionen über das Modul math
importiert werden müssen:
In
[
2
]
:
100
*
2.5
+
50
Out
[
2
]
:
300.0
In
[
3
]
:
log
(
1
)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
NameError
Traceback
(
most
recent
call
last
)
<
ipython
-
input
-
3
-
74
f22a2fd43b
>
in
<
module
>
-
-
-
-
>
1
log
(
1
)
NameError
:
name
'
log
'
is
not
defined
In
[
4
]
:
import
math
In
[
5
]
:
math
.
log
(
1
)
Out
[
5
]
:
0.0
Ohne weitere Importe wird ein Fehler ausgelöst.
Nachdem du das Modul
math
importiert hast, kann die Berechnung ausgeführt werden.
Während math
ein Standard-Python-Modul ist, das mit jeder Python-Installation verfügbar ist, gibt es viele weitere Pakete, die optional installiert werden können und die auf die gleiche Weise wie die Standard-Module verwendet werden können. Solche Pakete sind aus verschiedenen (Web-)Quellen erhältlich. Es ist jedoch generell ratsam, einen Python-Paketmanager zu verwenden, der dafür sorgt, dass alle Bibliotheken miteinander konsistent sind (mehr zu diesem Thema in Kapitel 2 ).
Die bisher vorgestellten Codebeispiele verwenden interaktive Python-Umgebungen: IPython bzw. Jupyter. Dies sind wahrscheinlich die am weitesten verbreiteten interaktiven Python-Umgebungen zum Zeitpunkt der Erstellung dieses Artikels. Obwohl IPython ursprünglich nur eine erweiterte interaktive Python-Shell war, verfügt es heute über viele Funktionen, die typischerweise in integrierten Entwicklungsumgebungen (IDEs) zu finden sind, z. B. Unterstützung für Profiling und Debugging. Die Funktionen, die in IPython fehlen, werden normalerweise von fortschrittlichen Text-/Code-Editoren wie Vim bereitgestellt, die ebenfalls in IPython integriert werden können. Daher ist es nicht ungewöhnlich, IPython mit dem Text-/Code-Editor deiner Wahl zu kombinieren, um die grundlegende Werkzeugkette für einen Python-Entwicklungsprozess zu bilden.
IPython erweitert die interaktive Standard-Shell in vielerlei Hinsicht. Unter anderem bietet es verbesserte Funktionen für die Befehlszeilenhistorie und ermöglicht eine einfache Objektinspektion. Zum Beispiel wird der Hilfetext (docstring
) für eine Funktion ausgegeben, indem du einfach ein ?
vor oder nach dem Funktionsnamen hinzufügst (das Hinzufügen von ??
liefert noch mehr Informationen).
IPython gab es ursprünglich in zwei populären Versionen: eine Shell-Version und eine browserbasierte Version (das Notebook). Die Notebook-Variante erwies sich als so nützlich und beliebt, dass sie sich zu einem unabhängigen, sprachunabhängigen Projekt entwickelte, das heute Jupyter heißt. Vor diesem Hintergrund ist es nicht verwunderlich, dass Jupyter Notebook die meisten nützlichen Funktionen von IPython übernommen hat - und noch viel mehr bietet, zum Beispiel bei der Visualisierung.
Weitere Informationen zur Verwendung von IPython findest du in VanderPlas (2016, Kapitel 1).
Das Python-Benutzer-Spektrum
Python richtet sich nicht nur an professionelle Softwareentwickler, sondern ist auch für Gelegenheitsentwickler, Fachexperten und wissenschaftliche Entwickler von Nutzen.
Professionelle Softwareentwickler/innen finden in Python alles, was sie brauchen, um große Anwendungen effizient zu entwickeln. Fast alle Programmierparadigmen werden unterstützt, es gibt leistungsstarke Entwicklungswerkzeuge und jede Aufgabe kann im Prinzip mit Python gelöst werden. Diese Art von Nutzern baut in der Regel ihre eigenen Frameworks und Klassen, arbeitet auch am grundlegenden Python- und Wissenschafts-Stack und ist bestrebt, das Ökosystem optimal zu nutzen.
Wissenschaftliche Entwickler oder Fachexperten sind in der Regel intensive Nutzer bestimmter Pakete und Frameworks, haben ihre eigenen Anwendungen entwickelt, die sie im Laufe der Zeit verbessern und optimieren, und passen das Ökosystem an ihre spezifischen Bedürfnisse an. Diese Nutzergruppen nehmen in der Regel auch an längeren interaktiven Sitzungen teil, in denen sie schnell neue Prototypen entwickeln und ihre Forschungs- und/oder Fachgebietsdatensätze erforschen und visualisieren.
Gelegenheitsprogrammierer nutzen Python im Allgemeinen gerne für bestimmte Probleme, von denen sie wissen, dass Python darin seine Stärken hat. Wenn du zum Beispiel die Galerieseite von matplotlib
besuchst, dort einen bestimmten Visualisierungscode kopierst und ihn an deine eigenen Bedürfnisse anpasst, könnte das ein nützlicher Anwendungsfall für Mitglieder dieser Gruppe sein.
Es gibt noch eine weitere wichtige Gruppe von Python-Nutzern: Programmieranfänger, d.h. diejenigen, die gerade erst mit dem Programmieren anfangen. Heutzutage ist Python eine sehr beliebte Sprache an Universitäten, Hochschulen und sogar Schulen, um Schüler/innen in die Programmierung einzuführen.1 Ein wichtiger Grund dafür ist, dass die grundlegende Syntax leicht zu erlernen und zu verstehen ist, auch für Nicht-Entwickler/innen. Außerdem ist es hilfreich, dass Python fast alle Programmierstile unterstützt.2
Der wissenschaftliche Stapel
Unter gibt es eine bestimmte Gruppe von Paketen, die als wissenschaftlicher Stack bezeichnet wird. Dieser Stack umfasst unter anderem die folgenden Pakete:
NumPy
-
NumPy
stellt ein mehrdimensionales Array-Objekt zur Verfügung, um homogene oder heterogene Daten zu speichern; außerdem bietet es optimierte Funktionen/Methoden, um mit diesem Array-Objekt zu arbeiten. SciPy
-
SciPy
ist eine Sammlung von Unterpaketen und Funktionen, die wichtige Standardfunktionen implementieren, die oft in der Wissenschaft oder im Finanzwesen benötigt werden; zum Beispiel findet man Funktionen für die kubische Splines-Interpolation sowie für die numerische Integration. matplotlib
-
ist das beliebteste Plotting- und Visualisierungspaket für Python, das sowohl 2D- als auch 3D-Visualisierungsfunktionen bietet.
pandas
-
pandas
baut aufNumPy
auf und bietet umfangreichere Klassen für die Verwaltung und Analyse von Zeitreihen und tabellarischen Daten; es ist eng mitmatplotlib
für das Plotten undPyTables
für die Speicherung und Abfrage von Daten integriert. scikit-learn
-
scikit-learn
ist ein beliebtes Paket für maschinelles Lernen (ML), das eine einheitliche Anwendungsprogrammierschnittstelle (API) für viele verschiedene ML-Algorithmen bietet, z. B. für Schätzungen, Klassifizierung oder Clustering. PyTables
-
PyTables
ist ein beliebter Wrapper für dasHDF5
Datenspeicherung; es ist ein Paket zur Implementierung optimierter, plattenbasierter E/A-Operationen auf der Grundlage eines hierarchischen Datenbank-/Dateiformats.
Je nach Fachgebiet oder Problemstellung wird dieser Stack durch zusätzliche Pakete erweitert, die meist gemeinsam haben, dass sie auf einem oder mehreren dieser Grundpakete aufbauen. Der kleinste gemeinsame Nenner oder die grundlegenden Bausteine im Allgemeinen sind jedoch die Klasse NumPy
ndarray
(siehe Kapitel 4) und die Klasse pandas
DataFrame
(siehe Kapitel 5).
Nimmt man nur Python als Programmiersprache, gibt es eine Reihe anderer Sprachen, die wahrscheinlich mit der Syntax und Eleganz von Python mithalten können. Ruby zum Beispiel ist eine beliebte Sprache, die oft mit Python verglichen wird. Auf der Website der Sprache wird Ruby beschrieben als:
Eine dynamische, quelloffene Programmiersprache mit dem Schwerpunkt auf Einfachheit und Produktivität. Sie hat eine elegante Syntax, die natürlich zu lesen und einfach zu schreiben ist.
Die meisten Benutzer von Python würden wahrscheinlich genau der gleichen Aussage über Python selbst zustimmen. Was Python jedoch für viele Benutzer/innen von ebenso attraktiven Sprachen wie Ruby unterscheidet, ist die Verfügbarkeit des wissenschaftlichen Stacks. Das macht Python nicht nur zu einer guten und eleganten Sprache, sondern auch zu einer Sprache, die in der Lage ist, domänenspezifische Sprachen und Toolsets wie Matlab oder R zu ersetzen. Außerdem ist Python eine gute Schnittstelle zu domänenspezifischen Sprachen wie R, so dass die Entscheidung in der Regel nicht zwischen Python und einer anderen Sprachefällt , sonderneher zwischen der Hauptsprache.
Technologie im Finanzwesen
Mit diesen "groben Vorstellungen" davon, worum es bei Python geht, ist es sinnvoll, einen Schritt zurückzutreten und kurz über die Rolle der Technologie im Finanzwesen nachzudenken. So kann man besser einschätzen, welche Rolle Python bereits spielt und - was noch wichtiger ist - wahrscheinlich auch in der Finanzbranche der Zukunft spielen wird.
In gewissem Sinne ist Technologie an sich nichts Besonderes für Finanzinstitute (im Vergleich z. B. zu Biotechnologieunternehmen) oder für die Finanzfunktion (im Vergleich zu anderen Unternehmensfunktionen, wie der Logistik). In den letzten Jahren haben sich Banken und andere Finanzinstitute wie Hedge-Fonds jedoch, angetrieben durch Innovation und Regulierung, mehr und mehr zu Technologieunternehmen entwickelt, anstatt nur Finanzvermittler zu sein. Technologie ist für fast alle Finanzinstitute auf der ganzen Welt zu einem wichtigen Aktivposten geworden, der sowohl zu Wettbewerbsvorteilen als auch zu Nachteilen führen kann. Einige Hintergrundinformationen können die Gründe für diese Entwicklung erhellen.
Technologie-Ausgaben
Banken und Finanzinstitute bilden zusammen die Branche, die jährlich am meisten für Technologie ausgibt. Die folgende Aussage zeigt also nicht nur, dass Technologie für die Finanzindustrie wichtig ist, sondern auch, dass die Finanzindustrie für den Technologiesektor wirklich wichtig ist:
FRAMINGHAM, Massachusetts, 14. Juni 2018 - Die weltweiten Ausgaben für Informationstechnologie (IT) von Finanzdienstleistern werden sich im Jahr 2021 auf fast 500 Milliarden US-Dollar belaufen und damit gegenüber 440 Milliarden US-Dollar im Jahr 2018 steigen.
Vor allem Banken und andere Finanzinstitute liefern sich einen Wettlauf, um ihre Geschäfts- und Betriebsmodelle zu digitalisieren:
Die Ausgaben der Banken für neue Technologien wurden für 2017 in Nordamerika auf 19,9 Milliarden US-Dollar geschätzt.
Die Banken entwickeln aktuelle Systeme und arbeiten an neuen technologischen Lösungen, um ihre Wettbewerbsfähigkeit auf dem globalen Markt zu steigern und Kunden zu gewinnen, die an neuen Online- und Mobiltechnologien interessiert sind. Dies ist eine große Chance für globale Fintech-Unternehmen, die neue Ideen und Softwarelösungen für die Bankenbranche anbieten.
Große multinationale Banken beschäftigen heute in der Regel Tausende von Entwicklern, um bestehende Systeme zu pflegen und neue Systeme zu entwickeln. Große Investmentbanken mit hohen technologischen Anforderungen haben oft Technologiebudgets von mehreren Milliarden USD pro Jahr.
Technologie als Ermöglicher
Die technologische Entwicklung hat auch zu Innovationen und Effizienzsteigerungen im Finanzsektor beigetragen. Typischerweise laufen Projekte in diesem Bereich unter dem Dach der Digitalisierung.
Die Finanzdienstleistungsbranche hat in den letzten Jahren drastische technologiegestützte Veränderungen erlebt. Viele Führungskräfte erwarten von ihren IT-Abteilungen, dass sie die Effizienz steigern und bahnbrechende Innovationen ermöglichen - und dabei gleichzeitig die Kosten senken und Altsysteme weiter unterstützen. In der Zwischenzeit drängen FinTech-Start-ups auf die etablierten Märkte und sind mit kundenfreundlichen Lösungen führend, die von Grund auf neu entwickelt wurden und nicht durch Altsysteme beeinträchtigt sind.
Ein Nebeneffekt der zunehmenden Effizienz ist, dass Wettbewerbsvorteile oft in immer komplexeren Produkten oder Transaktionen gesucht werden müssen. Das wiederum erhöht zwangsläufig die Risiken und macht das Risikomanagement sowie die Aufsicht und Regulierung immer schwieriger. Die Finanzkrise der Jahre 2007 und 2008 ist ein Beispiel für die potenziellen Gefahren, die sich aus solchen Entwicklungen ergeben. In ähnlicher Weise stellen "wildgewordene Algorithmen und Computer" ein potenzielles Risiko für die Finanzmärkte dar; dies zeigte sich dramatisch beim sogenannten Flash Crash im Mai 2010, als automatisierte Verkäufe zu großen Einbrüchen bei bestimmten Aktien und Aktienindizes innerhalb eines Tages führten. Teil IV behandelt Themen rund um den algorithmischen Handel mit Finanzinstrumenten.
Technologie und Talent als Marktzugangshindernisse
Auf werden einerseits durch den technologischen Fortschritt die Kosten im Laufe der Zeit gesenkt, ceteris paribus. Andererseits investieren die Finanzinstitute weiterhin stark in Technologie, um Marktanteile zu gewinnen und ihre Position zu verteidigen. Wer heute in bestimmten Bereichen des Finanzwesens aktiv sein will, muss oft in großem Umfang in Technologie und qualifiziertes Personal investieren. Nehmen wir zum Beispiel den Bereich der Derivate-Analyse:
Über den gesamten Software-Lebenszyklus gerechnet, müssen Unternehmen, die interne Strategien für die Preisgestaltung von OTC-Derivaten anwenden, zwischen 25 und 36 Millionen US-Dollar allein für den Aufbau, die Wartung und die Verbesserung einer kompletten Derivate-Bibliothek investieren.
Ding (2010)
Es ist nicht nur kostspielig und zeitaufwändig, eine vollwertige Derivate-Analytik-Bibliothek aufzubauen, sondern du brauchst auch genügend Experten dafür. Und diese Experten müssen die richtigen Werkzeuge und Technologien zur Verfügung haben, um ihre Aufgaben zu erfüllen. Mit der Entwicklung des Python-Ökosystems sind solche Bemühungen effizienter geworden und die Budgets in dieser Hinsicht können heute deutlich reduziert werden, verglichen mit, sagen wir, vor 10 Jahren. Teil V befasst sich mit der Analyse von Derivaten und baut eine kleine, aber leistungsstarke und flexible Bibliothek für die Preisgestaltung von Derivaten allein mit Python und Standard-Python-Paketen auf.
Ein weiteres Zitat aus den Anfängen von Long-Term Capital Management (LTCM), einem der ehemals angesehensten quantitativen Hedgefonds, der jedoch Ende der 1990er Jahre pleite ging, untermauert diese Erkenntnis über Technologie und Talent:
Meriwether gab 20 Millionen Dollar für ein hochmodernes Computersystem aus und stellte ein hervorragendes Team von Finanzingenieuren ein, um die Show bei LTCM zu leiten, das sich in Greenwich, Connecticut, niederließ. Das war Risikomanagement auf industriellem Niveau.
Patterson (2010)
Die gleiche Rechenleistung, die Meriwether für Millionen von Dollar kaufen musste, ist heute wahrscheinlich schon für Tausende von Dollar erhältlich oder kann von einem Cloud-Provider auf der Grundlage eines flexiblen Gebührenplans gemietet werden. Kapitel 2 zeigt, wie man eine Infrastruktur in der Cloud für interaktive Finanzanalysen, Anwendungsentwicklung und Einsatz mit Python einrichtet. Die Budgets für eine solche professionelle Infrastruktur beginnen bei ein paar USD pro Monat. Auf der anderen Seite sind Handel, Preisgestaltung und Risikomanagement für größere Finanzinstitute so komplex geworden, dass sie heute IT-Infrastrukturen mit Zehntausenden von Rechenkernen einsetzen müssen.
Ständig steigende Geschwindigkeiten, Frequenzen und Datenvolumina
Die eine Dimension der Finanzbranche, die am stärksten vom technologischen Fortschritt beeinflusst wurde, ist die Geschwindigkeit und Häufigkeit, mit der Finanztransaktionen beschlossen und ausgeführt werden. Lewis (2014) beschreibt das sogenannte Flash-Trading, d.h. den Handel mit der höchstmöglichen Geschwindigkeit, sehr anschaulich.
Einerseits macht es die zunehmende Datenverfügbarkeit auf immer kleineren Zeitskalen erforderlich, in Echtzeit zu reagieren. Auf der anderen Seite lässt die zunehmende Geschwindigkeit und Häufigkeit des Handels die Datenmengen weiter ansteigen. Dies führt zu Prozessen, die sich gegenseitig verstärken und die durchschnittliche Zeitskala für Finanztransaktionen systematisch nach unten drücken. Ein Trend, der bereits vor einem Jahrzehnt begonnen hat:
Der Medallion-Fonds von Renaissance legte 2008 um erstaunliche 80 Prozent zu und nutzte die extreme Volatilität des Marktes mit seinen blitzschnellen Computern. Jim Simons war mit 2,5 Milliarden Dollar der Spitzenverdiener unter den Hedgefonds.
Patterson (2010)
Dreißig Jahre tägliche Kursdaten für eine einzige Aktie entsprechen etwa 7.500 Schlusskursen. Auf diese Art von Daten stützt sich der Großteil der heutigen Finanztheorie. Die moderne Portfoliotheorie oder Mean-Variance-Portfolio-Theorie (MPT), das Capital Asset Pricing Model (CAPM) und der Value-at-Risk (VaR) basieren beispielsweise alle auf täglichen Aktienkursdaten.
Im Vergleich dazu kann der Aktienkurs von Apple Inc. (AAPL
) an einem typischen Handelstag während einer einzigen Handelsstunde etwa 15.000 Mal notiert werden - das ist etwa doppelt so viel wie die verfügbaren Tagesschlusskurse in den letzten 30 Jahren (siehe das Beispiel in "Data-Driven and AI-First Finance"). Dies bringt eine Reihe von Herausforderungen mit sich:
- Datenverarbeitung
-
Es reicht nicht aus, Tagesschlusskurse für Aktien oder andere Finanzinstrumente zu berücksichtigen und zu verarbeiten; es passiert "zu viel" während des Tages und für einige Instrumente sogar 24 Stunden lang an 7 Tagen in der Woche.
- Analytik Geschwindigkeit
-
Entscheidungen müssen oft innerhalb von Millisekunden oder sogar noch schneller getroffen werden. Das macht es notwendig, die entsprechenden Analysefähigkeiten aufzubauen und große Datenmengen in Echtzeit zu analysieren.
- Theoretische Grundlagen
-
Obwohl die traditionellen Finanztheorien und -konzepte bei weitem nicht perfekt sind, wurden sie im Laufe der Zeit gut getestet (und manchmal auch gut verworfen). Für die heute wichtigen Milli- und Mikrosekunden-Skalen fehlen noch immer konsistente Finanzkonzepte und -theorien im traditionellen Sinne, die sich im Laufe der Zeit als einigermaßen robust erwiesen haben.
All diese Herausforderungen können im Allgemeinen nur durch moderne Technologie bewältigt werden. Etwas überraschend ist auch, dass der Mangel an konsistenten Theorien oft durch technologische Ansätze behoben wird, indem Hochgeschwindigkeitsalgorithmen Elemente der Marktmikrostruktur (z. B. Auftragsfluss, Geld-Brief-Spannen) ausnutzen, anstatt sich auf eine Art finanzwirtschaftliche Argumentation zu stützen.
Der Aufstieg der Echtzeit-Analytik
gibt es eine Disziplin, die in der Finanzbranche stark an Bedeutung gewonnen hat: die Finanz- und Datenanalyse. Dieses Phänomen steht in engem Zusammenhang mit der Erkenntnis, dass Geschwindigkeit, Häufigkeit und Datenvolumen in der Branche rasant zunehmen. Echtzeit-Analysen können als Antwort der Branche auf diesen Trend betrachtet werden.
Grob gesagt bezieht sich "Finanz- und Datenanalyse" auf die Anwendung von Software und Technologie in Kombination mit (möglicherweise fortschrittlichen) Algorithmen und Methoden, um Daten zu sammeln, zu verarbeiten und zu analysieren, um Erkenntnisse zu gewinnen, Entscheidungen zu treffen oder um z.B. regulatorische Anforderungen zu erfüllen. Beispiele hierfür sind die Abschätzung der Auswirkungen einer Änderung der Preisstruktur für ein Finanzprodukt in der Filiale einer Bank auf den Umsatz oder die groß angelegte Berechnung von Kreditbewertungsanpassungen (CVA) über Nacht für komplexe Portfolios von Derivatgeschäften in einer Investmentbank.
Es gibt zwei große Herausforderungen, denen sich Finanzinstitute in diesem Zusammenhang stellen müssen:
- Große Daten
-
Banken und andere Finanzinstitute hatten schon mit großen Datenmengen zu tun, bevor der Begriff "Big Data" geprägt wurde. Doch die Datenmenge, die bei einzelnen Analyseaufgaben verarbeitet werden muss, hat im Laufe der Zeit enorm zugenommen und erfordert sowohl mehr Rechenleistung als auch immer größere Speicher- und Speicherkapazitäten.
- Wirtschaft in Echtzeit
-
Unter konnten sich die Entscheidungsträger in der Vergangenheit auf strukturierte, regelmäßige Planungs- sowie Entscheidungs- und (Risiko-)Managementprozesse verlassen, während sie heute mit der Notwendigkeit konfrontiert sind, diese Funktionen in Echtzeit zu erledigen; mehrere Aufgaben, die in der Vergangenheit über nächtliche Batch-Läufe im Backoffice erledigt wurden, sind nun ins Frontoffice verlagert worden und werden in Echtzeit ausgeführt.
Auch hier lässt sich ein Wechselspiel zwischen technologischen Fortschritten und finanzieller/wirtschaftlicher Praxis beobachten. Auf der einen Seite besteht die Notwendigkeit, die Analyseansätze durch den Einsatz moderner Technologien in Bezug auf Geschwindigkeit und Leistungsfähigkeit ständig zu verbessern. Andererseits ermöglichen technologische Fortschritte neue Analyseansätze, die vor ein paar Jahren oder sogar Monaten noch als unmöglich (oder aufgrund von Budgetbeschränkungen als nicht durchführbar) galten.
Ein wichtiger Trend im Bereich der Analytik ist der Einsatz von parallelen Architekturen auf der Seite der Zentraleinheit (CPU) und massiv parallelen Architekturen auf der Seite der allgemeinen Grafikverarbeitungseinheit (GPGPU). Aktuelle GPGPUs verfügen über Tausende von Rechenkernen, was ein teilweise radikales Umdenken in Bezug auf die Bedeutung von Parallelität für verschiedene Algorithmen erforderlich macht. Ein Hindernis in dieser Hinsicht ist, dass die Nutzer/innen in der Regel neue Programmierparadigmen und -techniken erlernen müssen, um die Leistung solcher Hardware zu nutzen.
Python für Finanzen
Im vorherigen Abschnitt wurden ausgewählte Aspekte beschrieben, die die Rolle der Technologie im Finanzwesen charakterisieren:
-
Kosten für Technologie in der Finanzbranche
-
Technologie als Wegbereiter für neue Geschäfte und Innovationen
-
Technologie und Talent als Eintrittsbarrieren in der Finanzbranche
-
Steigende Geschwindigkeiten, Frequenzen und Datenmengen
-
Der Aufstieg der Echtzeit-Analytik
In diesem Abschnitt wird analysiert, wie Python dabei helfen kann, einige der damit verbundenen Herausforderungen zu meistern. Zunächst jedoch eine kurze Analyse von Python für das Finanzwesen aus Sicht der Sprache und der Syntax.
Finanzen und Python-Syntax
Die meisten Leute, die ihre ersten Schritte mit Python in einem Finanzkontext machen, gehen ein algorithmisches Problem an. Das ist ähnlich wie bei Wissenschaftlern, die zum Beispiel eine Differentialgleichung lösen, ein Integral auswerten oder einfach nur Daten visualisieren wollen. Im Allgemeinen wird in dieser Phase wenig über Themen wie einen formalen Entwicklungsprozess, Tests, Dokumentation oder Bereitstellung nachgedacht. Dennoch scheint dies die Phase zu sein, in der sich die Menschen in Python verlieben. Ein wichtiger Grund dafür könnte sein, dass die Python-Syntax der mathematischen Syntax, die zur Beschreibung wissenschaftlicher Probleme oder finanzieller Algorithmen verwendet wird, im Allgemeinen sehr ähnlich ist.
Diese kann durch einen Finanzalgorithmus veranschaulicht werden, nämlich die Bewertung einer europäischen Kaufoption durch Monte-Carlo-Simulation. Das Beispiel geht von einem Black-Scholes-Merton (BSM)-Szenario aus, bei dem der zugrunde liegende Risikofaktor der Option einer geometrischen Brownschen Bewegung folgt.
Nimm die folgenden numerischen Parameterwerte für die Bewertung an:
-
Ausgangswert des Aktienindex S0 = 100
-
Ausübungspreis der europäischen Kaufoption K = 105
-
Zeit bis zur Fälligkeit T = 1 Jahr
-
Konstanter, risikoloser Kurzfristzins r = 0,05
-
Konstante Volatilität = 0.2
Im BSM-Modell ist der Indexstand bei Fälligkeit eine Zufallsvariable, die durch Gleichung 1-1 gegeben ist, wobei z eine standardnormalverteilte Zufallsvariable ist.
Gleichung 1-1. Black-Scholes-Merton (1973) Indexstand bei Fälligkeit
Im Folgenden findest du eine algorithmische Beschreibung des Monte-Carlo-Bewertungsverfahrens:
-
Ziehe I Pseudo-Zufallszahlen aus der Standard-Normalverteilung.
-
Berechne alle resultierenden Indexstände bei Fälligkeit für gegebene z(i) und Gleichung 1-1.
-
Berechne alle inneren Werte der Option bei Fälligkeit als hT(i) = max(ST(i) - K, 0).
-
Schätze den Barwert der Option mithilfe des Monte-Carlo-Schätzers gemäß Gleichung 1-2.
Gleichung 1-2. Monte-Carlo-Schätzer für die europäische Option
Dieses Problem und der Algorithmus müssen nun in Python übersetzt werden. Der folgende Code implementiert die erforderlichen Schritte:
In
[
6
]
:
import
math
import
numpy
as
np
In
[
7
]
:
S0
=
100.
K
=
105.
T
=
1.0
r
=
0.05
sigma
=
0.2
In
[
8
]
:
I
=
100000
In
[
9
]
:
np
.
random
.
seed
(
1000
)
In
[
10
]
:
z
=
np
.
random
.
standard_normal
(
I
)
In
[
11
]
:
ST
=
S0
*
np
.
exp
(
(
r
-
sigma
*
*
2
/
2
)
*
T
+
sigma
*
math
.
sqrt
(
T
)
*
z
)
In
[
12
]
:
hT
=
np
.
maximum
(
ST
-
K
,
0
)
In
[
13
]
:
C0
=
math
.
exp
(
-
r
*
T
)
*
np
.
mean
(
hT
)
In
[
14
]
:
(
'
Value of the European call option: {:5.3f}.
'
.
format
(
C0
)
)
Value
of
the
European
call
option
:
8.019
.
NumPy
wird hier als das Hauptpaket verwendet.Die Werte der Modell- und Simulationsparameter werden festgelegt.
Der Startwert für den Zufallszahlengenerator ist festgelegt.
Es werden standardmäßig normalverteilte Zufallszahlen gezogen.
Die Werte am Ende des Zeitraums werden simuliert.
Die Auszahlungen der Optionen bei Fälligkeit werden berechnet.
Der Monte-Carlo-Schätzer wird ausgewertet.
Die daraus resultierende Wertschätzung wird ausgedruckt.
Drei Aspekte sind besonders hervorzuheben:
- Syntax
-
Die Python-Syntax ist der mathematischen Syntax sehr ähnlich, z. B. wenn es um die Zuweisung von Parameterwerten geht.
- Übersetzung
-
Jede mathematische und/oder algorithmische Aussage kann in der Regel in eine einzige Python-Codezeile übersetzt werden.
- Vektorisierung
-
Eine der Stärken von
NumPy
ist die kompakte, vektorisierte Syntax, die z.B. 100.000 Berechnungen in einer einzigen Codezeile ermöglicht.
Dieser Code kann in einer interaktiven Umgebung wie IPython oder Jupyter Notebook verwendet werden. Code, der regelmäßig wiederverwendet werden soll, wird jedoch in der Regel in sogenannten Modulen (oder Skripten) organisiert, die einzelne Python-Dateien (technisch gesehen Textdateien) mit der Endung .py sind. Ein solches Modul könnte in diesem Fall wie Beispiel 1-1 aussehen und als Datei namens bsm_mcs_euro.py gespeichert werden.
Beispiel 1-1. Monte-Carlo-Bewertung einer europäischen Kaufoption
#
# Monte Carlo valuation of European call option
# in Black-Scholes-Merton model
# bsm_mcs_euro.py
#
# Python for Finance, 2nd ed.
# (c) Dr. Yves J. Hilpisch
#
import
math
import
numpy
as
np
# Parameter Values
S0
=
100.
# initial index level
K
=
105.
# strike price
T
=
1.0
# time-to-maturity
r
=
0.05
# riskless short rate
sigma
=
0.2
# volatility
I
=
100000
# number of simulations
# Valuation Algorithm
z
=
np
.
random
.
standard_normal
(
I
)
# pseudo-random numbers
# index values at maturity
ST
=
S0
*
np
.
exp
((
r
-
0.5
*
sigma
**
2
)
*
T
+
sigma
*
math
.
sqrt
(
T
)
*
z
)
hT
=
np
.
maximum
(
ST
-
K
,
0
)
# payoff at maturity
C0
=
math
.
exp
(
-
r
*
T
)
*
np
.
mean
(
hT
)
# Monte Carlo estimator
# Result Output
(
'Value of the European call option
%5.3f
.'
%
C0
)
Das algorithmische Beispiel in diesem Unterabschnitt veranschaulicht, dass Python mit seiner Syntax gut geeignet ist, das klassische Duo der Wissenschaftssprachen Englisch und Mathematik zu ergänzen. Es scheint, als ob Python durch die Aufnahme in die Gruppe der Wissenschaftssprachen noch runder wird. Das hat man dann:
-
Englisch zum Schreiben und Sprechen über wissenschaftliche und finanzielle Probleme etc.
-
Mathematik zur prägnanten, genauen Beschreibung und Modellierung abstrakter Aspekte, Algorithmen, komplexer Größen usw.
-
Python für die technische Modellierung und Implementierung von abstrakten Aspekten, Algorithmen, komplexen Größen usw.
Mathematik und Python-Syntax
gibt es kaum eine Programmiersprache, die der mathematischen Syntax so nahe kommt wie Python. Numerische Algorithmen lassen sich daher in der Regel problemlos von der mathematischen Darstellung in die Python-Implementierung übersetzen. Das macht das Prototyping, die Entwicklung und die Codepflege im Finanzbereich mit Python sehr effizient.
In einigen Bereichen ist es üblich, Pseudocode zu verwenden und damit ein viertes Mitglied der Sprachfamilie einzuführen. Die Aufgabe von Pseudocode ist es, z. B. Finanzalgorithmen auf eine technischere Art und Weise darzustellen, die sowohl noch nahe an der mathematischen Darstellung als auch schon recht nahe an der technischen Umsetzung ist. Neben dem Algorithmus selbst berücksichtigt der Pseudocode auch, wie Computer im Prinzip funktionieren.
Diese Praxis hat in der Regel ihren Grund darin, dass bei den meisten (kompilierten) Programmiersprachen die technische Umsetzung ziemlich "weit weg" von ihrer formalen, mathematischen Darstellung ist. Die meisten Programmiersprachen machen es notwendig, so viele Elemente einzubauen, die nur technisch erforderlich sind, dass es schwer ist, die Gleichwertigkeit zwischen der Mathematik und dem Code zu erkennen.
Heutzutage wird Python oft in Form von Pseudocode verwendet, da seine Syntax fast analog zur Mathematik ist und der technische "Overhead" auf ein Minimum beschränkt ist. Dies wird durch eine Reihe von High-Level-Konzepten in der Sprache erreicht, die nicht nur ihre Vorteile haben, sondern im Allgemeinen auch mit Risiken und/oder anderen Kosten verbunden sind. Es ist jedoch sicher, dass du mit Python, wann immer es nötig ist, die gleichen strengen Implementierungs- und Codierungspraktiken befolgen kannst, die andere Sprachen von vornherein verlangen. In diesem Sinne kann Python das Beste aus beiden Welten bieten: Abstraktion auf hohem Niveau und strenge Implementierung.
Effizienz und Produktivität durch Python
Auf lassen sich die Vorteile der Verwendung von Python in drei Dimensionen messen:
- Effizienz
-
Wie kann Python dabei helfen, schneller Ergebnisse zu erzielen, Kosten und Zeit zu sparen?
- Produktivität
-
Wie kann Python dabei helfen, mit denselben Ressourcen (Menschen, Mittel usw.) mehr zu erreichen?
- Qualität
-
Was kann man mit Python machen, was andere Technologien nicht können?
Eine Diskussion dieser Aspekte kann naturgemäß nicht erschöpfend sein. Sie kann jedoch einige Argumente als Ausgangspunkt hervorheben.
Kürzere Zeit bis zum Ergebnis
Ein Bereich, in dem die Effizienz von Python ganz offensichtlich wird, ist die interaktive Datenanalyse. Dieser Bereich profitiert enorm von leistungsstarken Tools wie IPython, Jupyter Notebook und Paketen wie pandas
.
Nehmen wir einen Finanzstudenten, der seine Masterarbeit schreibt und sich für die Werte des S&P 500 Index interessiert. Er möchte die historischen Indexstände für, sagen wir, ein paar Jahre analysieren, um zu sehen, wie die Volatilität des Index im Laufe der Zeit geschwankt hat, und hofft, Beweise dafür zu finden, dass die Volatilität, im Gegensatz zu einigen typischen Modellannahmen, im Laufe der Zeit schwankt und keineswegs konstant ist. Die Ergebnisse sollen auch visualisiert werden. Die Schüler/innen müssen vor allem Folgendes tun:
-
Abrufen von Daten auf Indexebene aus dem Web
-
Berechne die annualisierte rollierende Standardabweichung der Log-Renditen (Volatilität)
-
Stelle die Daten auf Indexebene und die Volatilitätsergebnisse dar
Diese Aufgaben sind so komplex, dass man sie vor nicht allzu langer Zeit nur als etwas für professionelle Finanzanalysten angesehen hätte. Heute kann sogar der Finanzstudent solche Probleme leicht bewältigen. Der folgende Code zeigt, wie genau das funktioniert - ohne dass wir uns an dieser Stelle um die Details der Syntax kümmern müssen (alles wird in den folgenden Kapiteln ausführlich erklärt):
In
[
16
]
:
import
numpy
as
np
import
pandas
as
pd
from
pylab
import
plt
,
mpl
In
[
17
]
:
plt
.
style
.
use
(
'
seaborn
'
)
mpl
.
rcParams
[
'
font.family
'
]
=
'
serif
'
%
matplotlib
inline
In
[
18
]
:
data
=
pd
.
read_csv
(
'
../../source/tr_eikon_eod_data.csv
'
,
index_col
=
0
,
parse_dates
=
True
)
data
=
pd
.
DataFrame
(
data
[
'
.SPX
'
]
)
data
.
dropna
(
inplace
=
True
)
data
.
info
(
)
<
class
'
pandas
.
core
.
frame
.
DataFrame
'
>
DatetimeIndex
:
2138
entries
,
2010
-
01
-
04
to
2018
-
06
-
29
Data
columns
(
total
1
columns
)
:
.
SPX
2138
non
-
null
float64
dtypes
:
float64
(
1
)
memory
usage
:
33.4
KB
In
[
19
]
:
data
[
'
rets
'
]
=
np
.
log
(
data
/
data
.
shift
(
1
)
)
data
[
'
vola
'
]
=
data
[
'
rets
'
]
.
rolling
(
252
)
.
std
(
)
*
np
.
sqrt
(
252
)
In
[
20
]
:
data
[
[
'
.SPX
'
,
'
vola
'
]
]
.
plot
(
subplots
=
True
,
figsize
=
(
10
,
6
)
)
;
Diese importiert
NumPy
undpandas
.Dies importiert
matplotlib
und konfiguriert den Plotting-Stil und die Vorgehensweise für Jupyter.pd.read_csv()
ermöglicht das Abrufen von remote oder lokal gespeicherten Datensätzen in Form von kommagetrennten Werten (CSV).Eine Teilmenge der Daten wird ausgewählt und die Werte von
NaN
("keine Zahl") eliminiert.Dies zeigt einige Metainformationen über den Datensatz an.
Die Log-Renditen werden vektorisiert berechnet ("keine Schleifenbildung" auf Python-Ebene).
Die rollierende, annualisierte Volatilität wird abgeleitet.
Dies stellt schließlich die beiden Zeitreihen dar.
Abbildung 1-1 zeigt das grafische Ergebnis dieser kurzen interaktiven Sitzung. Es ist fast schon erstaunlich, dass ein paar Codezeilen ausreichen, um drei ziemlich komplexe Aufgaben zu implementieren, die typischerweise in der Finanzanalyse anfallen: das Sammeln von Daten, komplexe und wiederholte mathematische Berechnungen sowie die Visualisierung der Ergebnisse. Das Beispiel zeigt, dass pandas
die Arbeit mit ganzen Zeitreihen fast so einfach macht wie mathematische Operationen mit Fließkommazahlen.
Übertragen auf den professionellen Finanzbereich bedeutet das Beispiel, dass sich Finanzanalysten mit den richtigen Python-Tools und -Paketen, die eine hohe Abstraktionsebene bieten, auf ihr Fachgebiet konzentrieren können und sich nicht mit den technischen Details beschäftigen müssen. Analysten können auch schneller reagieren, wertvolle Erkenntnisse fast in Echtzeit liefern und sicherstellen, dass sie der Konkurrenz einen Schritt voraus sind. Dieses Beispiel einer gesteigerten Effizienz kann sich leicht in messbaren Auswirkungen auf das Endergebnis niederschlagen.
Sicherstellung hoher Leistung
Unter wird allgemein anerkannt, dass Python eine recht prägnante Syntax hat und relativ effizient zu programmieren ist. Da es sich bei Python jedoch um eine interpretierte Sprache handelt, hält sich hartnäckig das Vorurteil, dass Python für rechenintensive Aufgaben im Finanzwesen oft zu langsam ist. In der Tat kann Python, je nach Implementierungsansatz, sehr langsam sein. Aber es muss nicht langsam sein - eskann in fast jedem Anwendungsbereich sehr leistungsfähig sein. Im Prinzip kann man mindestens drei verschiedene Strategien für eine bessere Leistung unterscheiden:
- Idiome und Paradigmen
-
Im Allgemeinen können in Python viele verschiedene Wege zum gleichen Ergebnis führen, allerdings manchmal mit recht unterschiedlichen Leistungsmerkmalen. Die "einfache" Wahl des richtigen Weges (z. B. ein bestimmter Implementierungsansatz, wie die vernünftige Verwendung von Datenstrukturen, die Vermeidung von Schleifen durch Vektorisierung oder die Verwendung eines bestimmten Pakets wie
pandas
) kann die Ergebnisse erheblich verbessern. - Kompilieren
-
Heutzutage gibt es mehrere Performance-Pakete, die kompilierte Versionen wichtiger Funktionen bereitstellen oder die Python-Code statisch oder dynamisch (zur Laufzeit oder zum Zeitpunkt des Aufrufs) in Maschinencode kompilieren, was solche Funktionen um Größenordnungen schneller machen kann als reinen Python-Code; beliebte Pakete sind
Cython
undNumba
. - Parallelisierung
-
Viele Rechenaufgaben, insbesondere im Finanzwesen, können von einer parallelen Ausführung erheblich profitieren; das ist nichts Besonderes an Python, sondern etwas, das sich damit leicht bewerkstelligen lässt.
Performance Computing mit Python
Python ist nicht per se eine Hochleistungsrechnertechnologie. Allerdings hat sich Python zu einer idealen Plattform für den Zugang zu aktuellen Hochleistungstechnologien entwickelt. In diesem Sinne ist Python so etwas wie eine Klebesprache für High-Performance-Computing-Technologien geworden.
Dieser Unterabschnitt beschränkt sich auf ein einfaches, aber dennoch realistisches Beispiel, das alle drei Strategien berührt (in späteren Kapiteln werden die Strategien im Detail erläutert). Eine häufige Aufgabe in der Finanzanalyse besteht darin, komplexe mathematische Ausdrücke auf großen Zahlenfeldern auszuwerten. Zu diesem Zweck bietet Python alles, was man braucht:
In
[
21
]:
import
math
loops
=
2500000
a
=
range
(
1
,
loops
)
def
f
(
x
):
return
3
*
math
.
log
(
x
)
+
math
.
cos
(
x
)
**
2
%
timeit
r
=
[
f
(
x
)
for
x
in
a
]
1.59
s
±
41.2
ms
per
loop
(
mean
±
std
.
dev
.
of
7
runs
,
1
loop
each
)
Der Python-Interpreter braucht in diesem Fall etwa 1,6 Sekunden, um die Funktion f()
2.500.000 Mal auszuwerten. Die gleiche Aufgabe kann mit NumPy
gelöst werden, das optimierte (d.h. vorkompilierte) Funktionen für solche Array-basierten Operationen bereitstellt:
In
[
22
]:
import
numpy
as
np
a
=
np
.
arange
(
1
,
loops
)
%
timeit
r
=
3
*
np
.
log
(
a
)
+
np
.
cos
(
a
)
**
2
87.9
ms
±
1.73
ms
per
loop
(
mean
±
std
.
dev
.
of
7
runs
,
10
loops
each
)
Die Verwendung von NumPy
reduziert die Ausführungszeit erheblich auf etwa 88 Millisekunden. Es gibt sogar ein Paket, das speziell für diese Art von Aufgabe gedacht ist. Es heißt numexpr
, für "numerische Ausdrücke". Es kompiliert den Ausdruck, um die Leistung der allgemeinen NumPy
Funktionalität zu verbessern, indem es zum Beispiel Kopien von ndarray
Objekten im Arbeitsspeicher vermeidet:
In
[
23
]:
import
numexpr
as
ne
ne
.
set_num_threads
(
1
)
f
=
'3 * log(a) + cos(a) ** 2'
%
timeit
r
=
ne
.
evaluate
(
f
)
50.6
ms
±
4.2
ms
per
loop
(
mean
±
std
.
dev
.
of
7
runs
,
10
loops
each
)
Mit diesem spezielleren Ansatz wird die Ausführungszeit weiter auf etwa 50 Millisekunden reduziert. numexpr
verfügt jedoch auch über integrierte Funktionen zur Parallelisierung der Ausführung der jeweiligen Operation. So können wir mehrere Threads einer CPU nutzen:
In
[
24
]:
ne
.
set_num_threads
(
4
)
%
timeit
r
=
ne
.
evaluate
(
f
)
22.8
ms
±
1.76
ms
per
loop
(
mean
±
std
.
dev
.
of
7
runs
,
10
loops
each
)
Durch die Parallelisierung sinkt die Ausführungszeit in diesem Fall weiter auf unter 23 Millisekunden, wenn vier Threads verwendet werden. Insgesamt ist das eine Leistungsverbesserung um mehr als das 90-fache. Besonders bemerkenswert ist, dass eine solche Verbesserung möglich ist, ohne dass das Grundproblem bzw. der Algorithmus geändert werden muss und ohne dass Details über die Kompilierung oder Parallelisierungsansätze bekannt sind. Die Möglichkeiten sind auf hohem Niveau auch für Nicht-Experten zugänglich. Allerdings muss man sich natürlich bewusst sein, welche Möglichkeiten und Optionen es gibt.
Dieses Beispiel zeigt, dass Python eine Reihe von Möglichkeiten bietet, um mehr aus den vorhandenen Ressourcen zu machen, d.h. die Produktivität zu erhöhen. Mit dem parallelen Ansatz können dreimal so viele Berechnungen in der gleichen Zeit durchgeführt werden wie mit dem sequenziellen Ansatz - in diesem Fall einfach dadurch, dass man Python anweist, mehrere verfügbare CPU-Threads statt nur einem zu verwenden.
Vom Prototyping zur Produktion
Effizienz in der interaktiven Analyse und Leistung in Bezug auf die Ausführungsgeschwindigkeit sind sicherlich zwei Vorteile von Python, die man in Betracht ziehen sollte. Ein weiterer großer Vorteil von Python für das Finanzwesen mag auf den ersten Blick etwas subtiler erscheinen; auf den zweiten Blick könnte er sich als wichtiger strategischer Faktor für Finanzinstitute erweisen. Es ist die Möglichkeit, Python durchgängig zu nutzen, vom Prototyping bis zur Produktion.
Die heutige Praxis in Finanzinstituten rund um den Globus ist, wenn es um Finanzentwicklungsprozesse geht, oft noch durch einen getrennten, zweistufigen Prozess gekennzeichnet. Auf der einen Seite gibt es die quantitativen Analysten ("Quants"), die für die Modellentwicklung und das technische Prototyping zuständig sind. Sie nutzen gerne Tools und Umgebungen wie Matlab und R, die eine schnelle, interaktive Anwendungsentwicklung ermöglichen. In diesem Stadium der Entwicklung sind Fragen wie Leistung, Stabilität, Bereitstellung, Zugriffskontrolle und Versionskontrolle nicht so wichtig. In erster Linie geht es um einen Proof of Concept und/oder einen Prototyp, der die wichtigsten gewünschten Eigenschaften eines Algorithmus oder einer ganzen Anwendung zeigt.
Sobald der Prototyp fertig ist, übernehmen die IT-Abteilungen mit ihren Entwicklern die Aufgabe, den vorhandenen Prototyp-Code in zuverlässigen, wartbaren und leistungsfähigen Produktionscode zu übersetzen. In dieser Phase findet in der Regel ein Paradigmenwechsel statt, indem kompilierte Sprachen wie C++ oder Java verwendet werden, um die Anforderungen für den Einsatz und die Produktion zu erfüllen. Außerdem wird in der Regel ein formaler Entwicklungsprozess mit professionellen Tools, Versionskontrolle usw. angewandt.
Dieser zweistufige Ansatz hat eine Reihe von unbeabsichtigten Folgen:
- Ineffizienzen
-
Prototyp-Code ist nicht wiederverwendbar; Algorithmen müssen zweimal implementiert werden; redundanter Aufwand kostet Zeit und Ressourcen; Risiken entstehen bei der Übersetzung
- Vielfältige Fähigkeiten
-
Verschiedene Abteilungen zeigen unterschiedliche Fähigkeiten und verwenden verschiedene Sprachen, um "dieselben Dinge" zu implementieren; Menschen programmieren nicht nur, sondern sprechen auch verschiedene Sprachen
- Legacy-Code
-
Der Code ist in verschiedenen Sprachen verfügbar und muss in verschiedenen Implementierungsstilen gepflegt werden.
Die Verwendung von Python hingegen ermöglicht einen schlanken End-to-End-Prozess von den ersten interaktiven Prototyping-Schritten bis hin zu einem äußerst zuverlässigen und effizient wartbaren Produktionscode. Die Kommunikation zwischen verschiedenen Abteilungen wird einfacher. Auch die Ausbildung der Mitarbeiter/innen wird rationalisiert, da es nur eine Hauptsprache gibt, die alle Bereiche der Erstellung von Finanzanwendungen abdeckt. Außerdem werden Ineffizienzen und Redundanzen vermieden, die entstehen, wenn verschiedene Technologien in unterschiedlichen Phasen des Entwicklungsprozesses eingesetzt werden. Alles in allem kann Python einen konsistenten technologischen Rahmen für fast alle Aufgaben in der Finanzanalyse, der Entwicklung von Finanzanwendungen und der Implementierung von Algorithmen bieten.
Datengesteuerte und KI-gestützte Finanzen
Im Grunde genommen sind alle Beobachtungen zum Verhältnis von Technologie und Finanzindustrie, die 2014 für die erste Ausgabe dieses Buches formuliert wurden, auch im August 2018, zum Zeitpunkt der Aktualisierung dieses Kapitels für die zweite Ausgabe des Buches, noch ziemlich aktuell und wichtig. In diesem Abschnitt werden jedoch zwei wichtige Trends in der Finanzbranche kommentiert, die diese grundlegend umgestalten werden. Diese beiden Trends haben sich vor allem in den letzten Jahren herauskristallisiert.
Datengesteuerte Finanzen
Einige der wichtigsten Finanztheorien, wie die MPT und das CAPM, stammen bereits aus den 1950er und 1960er Jahren. Dennoch sind sie nach wie vor ein Eckpfeiler in der Ausbildung von Studierenden in Fächern wie Wirtschaftswissenschaften, Finanzen, Finanztechnik und Betriebswirtschaft. Das mag überraschen, denn die empirische Unterstützung für die meisten dieser Theorien ist bestenfalls dürftig und die Beweise stehen oft in völligem Gegensatz zu dem, was die Theorien suggerieren und implizieren. Andererseits ist ihre Beliebtheit verständlich, da sie den Erwartungen der Menschen an das Verhalten der Finanzmärkte sehr nahe kommen und da es sich um elegante mathematische Theorien handelt, die auf einer Reihe von ansprechenden, wenn auch im Allgemeinen zu einfachen Annahmen beruhen.
Die wissenschaftliche Methode, z. B. in der Physik, beginnt mit Daten, z. B. aus Experimenten oder Beobachtungen, und geht weiter zu Hypothesen und Theorien, die dann anhand der Daten getestet werden. Fallen die Tests positiv aus, können die Hypothesen und Theorien verfeinert und zum Beispiel in Form einer Forschungsarbeit zur Veröffentlichung niedergeschrieben werden. Fallen die Tests negativ aus, werden die Hypothesen und Theorien verworfen und die Suche nach solchen, die mit den Daten übereinstimmen, beginnt von Neuem. Da physikalische Gesetze im Laufe der Zeit stabil sind, bleibt ein einmal entdecktes und gut getestetes Gesetz im besten Fall für immer bestehen.
Die Geschichte der (quantitativen) Finanzwirtschaft widerspricht in weiten Teilen der wissenschaftlichen Methode. In vielen Fällen wurden Theorien und Modelle auf der Grundlage vereinfachender mathematischer Annahmen "von Grund auf" entwickelt, um elegante Antworten auf zentrale Probleme der Finanzwirtschaft zu finden. Beliebte Annahmen im Finanzwesen sind unter anderem normalverteilte Renditen für Finanzinstrumente und lineare Beziehungen zwischen Zinsgrößen. Da diese Phänomene auf den Finanzmärkten kaum anzutreffen sind, sollte es nicht überraschen, dass empirische Beweise für die eleganten Theorien oft ausbleiben. Viele Finanztheorien und -modelle wurden zuerst formuliert, bewiesen und veröffentlicht und erst später empirisch überprüft. Bis zu einem gewissen Grad liegt das natürlich daran, dass Finanzdaten in den 1950er bis 1970er Jahren oder sogar noch später nicht in der Form zur Verfügung standen, wie es heute der Fall ist, selbst für Studierende, die mit einem Bachelor in Finanzen beginnen.
Die Verfügbarkeit solcher Daten für Finanzinstitute hat seit Anfang bis Mitte der 1990er Jahre drastisch zugenommen, und heute haben sogar Einzelpersonen, die Finanzforschung betreiben oder sich am algorithmischen Handel beteiligen, Zugang zu riesigen Mengen historischer Daten bis auf Tick-Ebene sowie zu Echtzeit-Tick-Daten über Streaming-Dienste. Damit kehren wir zur wissenschaftlichen Methode zurück, die im Allgemeinen mit den Daten beginnt, bevor Ideen, Hypothesen, Modelle und Strategien entwickelt werden.
Ein kurzes Beispiel von soll veranschaulichen, wie einfach es heute geworden ist, mit Python und einem professionellen Datenabonnement der Eikon Data APIs professionelle Daten in großem Umfang auch auf einem lokalen Rechner abzurufen. Das folgende Beispiel ruft Tickdaten für die Aktie von Apple Inc. für eine Stunde an einem normalen Handelstag ab. Es werden etwa 15.000 Tick-Kurse, einschließlich Volumeninformationen, abgerufen. Das Symbol für die Aktie ist AAPL
, der Reuters Instrument Code (RIC) lautet AAPL.O
:
In
[
26
]
:
import
eikon
as
ek
In
[
27
]
:
data
=
ek
.
get_timeseries
(
'
AAPL.O
'
,
fields
=
'
*
'
,
start_date
=
'
2018-10-18 16:00:00
'
,
end_date
=
'
2018-10-18 17:00:00
'
,
interval
=
'
tick
'
)
In
[
28
]
:
data
.
info
(
)
<
class
'
pandas
.
core
.
frame
.
DataFrame
'
>
DatetimeIndex
:
35350
entries
,
2018
-
10
-
18
16
:
00
:
00.002000
to
2018
-
10
-
18
16
:
59
:
59.888000
Data
columns
(
total
2
columns
)
:
VALUE
35285
non
-
null
float64
VOLUME
35350
non
-
null
float64
dtypes
:
float64
(
2
)
memory
usage
:
828.5
KB
In
[
29
]
:
data
.
tail
(
)
Out
[
29
]
:
AAPL
.
O
VALUE
VOLUME
Date
2018
-
10
-
18
16
:
59
:
59.433
217.13
10.0
2018
-
10
-
18
16
:
59
:
59.433
217.13
12.0
2018
-
10
-
18
16
:
59
:
59.439
217.13
231.0
2018
-
10
-
18
16
:
59
:
59.754
217.14
100.0
2018
-
10
-
18
16
:
59
:
59.888
217.13
100.0
Die Nutzung der Eikon Data API erfordert ein Abonnement und eine API-Verbindung.
Ruft die Tickdaten für die Aktie von Apple Inc. (
AAPL.O
) ab.Zeigt die letzten fünf Zeilen der Tickdaten an.
Die Eikon Data APIs ermöglichen nicht nur den Zugriff auf strukturierte Finanzdaten, wie z. B. historische Kursdaten, sondern auch auf unstrukturierte Daten wie Nachrichtenartikel. Das nächste Beispiel ruft Metadaten für eine kleine Auswahl von Nachrichtenartikeln ab und zeigt den Anfang eines der Artikel als Volltext an:
In
[
30
]
:
news
=
ek
.
get_news_headlines
(
'
R:AAPL.O Language:LEN
'
,
date_from
=
'
2018-05-01
'
,
date_to
=
'
2018-06-29
'
,
count
=
7
)
In
[
31
]
:
news
Out
[
31
]
:
versionCreated
\
2018
-
06
-
28
23
:
00
:
00.000
2018
-
06
-
28
23
:
00
:
00.000
2018
-
06
-
28
21
:
23
:
26.526
2018
-
06
-
28
21
:
23
:
26.526
2018
-
06
-
28
19
:
48
:
32.627
2018
-
06
-
28
19
:
48
:
32.627
2018
-
06
-
28
17
:
33
:
10.306
2018
-
06
-
28
17
:
33
:
10.306
2018
-
06
-
28
17
:
33
:
07.033
2018
-
06
-
28
17
:
33
:
07.033
2018
-
06
-
28
17
:
31
:
44.960
2018
-
06
-
28
17
:
31
:
44.960
2018
-
06
-
28
17
:
00
:
00.000
2018
-
06
-
28
17
:
00
:
00.000
text
\
2018
-
06
-
28
23
:
00
:
00.000
RPT
-
FOCUS
-
AI
ambulances
and
robot
doctors
:
Chi
.
.
.
2018
-
06
-
28
21
:
23
:
26.526
Why
Investors
Should
Love
Apple
'
s (AAPL) TV En...
2018
-
06
-
28
19
:
48
:
32.627
Reuters
Insider
-
Trump
:
We
'
re reclaiming our ...
2018
-
06
-
28
17
:
33
:
10.306
Apple
v
.
Samsung
ends
not
with
a
whimper
but
a
.
.
.
2018
-
06
-
28
17
:
33
:
07.033
Apple
'
s trade-war discount extended for anothe...
2018
-
06
-
28
17
:
31
:
44.960
Other
Products
:
Apple
'
s fast-growing island of...
2018
-
06
-
28
17
:
00
:
00.000
Pokemon
Go
creator
plans
to
sell
the
tech
behi
.
.
.
storyId
\
2018
-
06
-
28
23
:
00
:
00.000
urn
:
newsml
:
reuters
.
com
:
20180628
:
nL4N1TU4F8
:
6
2018
-
06
-
28
21
:
23
:
26.526
urn
:
newsml
:
reuters
.
com
:
20180628
:
nNRA6e2vft
:
1
2018
-
06
-
28
19
:
48
:
32.627
urn
:
newsml
:
reuters
.
com
:
20180628
:
nRTV1vNw1p
:
1
2018
-
06
-
28
17
:
33
:
10.306
urn
:
newsml
:
reuters
.
com
:
20180628
:
nNRA6e1oza
:
1
2018
-
06
-
28
17
:
33
:
07.033
urn
:
newsml
:
reuters
.
com
:
20180628
:
nNRA6e1pmv
:
1
2018
-
06
-
28
17
:
31
:
44.960
urn
:
newsml
:
reuters
.
com
:
20180628
:
nNRA6e1m3n
:
1
2018
-
06
-
28
17
:
00
:
00.000
urn
:
newsml
:
reuters
.
com
:
20180628
:
nL1N1TU0PC
:
3
sourceCode
2018
-
06
-
28
23
:
00
:
00.000
NS
:
RTRS
2018
-
06
-
28
21
:
23
:
26.526
NS
:
ZACKSC
2018
-
06
-
28
19
:
48
:
32.627
NS
:
CNBC
2018
-
06
-
28
17
:
33
:
10.306
NS
:
WALLST
2018
-
06
-
28
17
:
33
:
07.033
NS
:
WALLST
2018
-
06
-
28
17
:
31
:
44.960
NS
:
WALLST
2018
-
06
-
28
17
:
00
:
00.000
NS
:
RTRS
In
[
32
]
:
story_html
=
ek
.
get_news_story
(
news
.
iloc
[
1
,
2
]
)
In
[
33
]
:
from
bs4
import
BeautifulSoup
In
[
34
]
:
story
=
BeautifulSoup
(
story_html
,
'
html5lib
'
)
.
get_text
(
)
In
[
35
]
:
(
story
[
83
:
958
]
)
Jun
28
,
2018
For
years
,
investors
and
Apple
AAPL
have
been
beholden
to
the
iPhone
,
which
is
hardly
a
negative
since
its
flagship
product
is
largely
responsible
for
turning
Apple
into
one
of
the
world
'
s biggest
companies
.
But
Apple
has
slowly
pushed
into
new
growth
areas
,
with
streaming
television
its
newest
frontier
.
So
let
'
s take a look at what
Apple
has
planned
as
it
readies
itself
to
compete
against
the
likes
of
Netflix
NFLX
and
Amazon
AMZN
in
the
battle
for
the
new
age
of
entertainment
.
Apple
'
s second-quarter revenues jumped by 16
%
to reach
$
61.14
billion
,
with
iPhone
revenues
up
14
%
.
However
,
iPhone
unit
sales
climbed
only
3
%
and
iPhone
revenues
accounted
for
over
62
%
of
total
Q2
sales
.
Apple
knows
this
is
not
a
sustainable
business
model
,
because
rare
is
the
consumer
product
that
can
remain
in
vogue
for
decades
.
This
is
why
Apple
has
made
a
big
push
into
news
,
Ruft die Metadaten für eine kleine Auswahl von Nachrichtenartikeln ab.
Ruft den vollständigen Text eines einzelnen Artikels ab, der als HTML-Dokument geliefert wird.
Importiert das
BeautifulSoup
HTML Parsing Paket und ...... extrahiert den Inhalt als reinen Text (ein
str
Objekt).Druckt den Anfang des Nachrichtenartikels ab.
Auch wenn diese beiden Beispiele nur an der Oberfläche kratzen, zeigen sie doch, dass strukturierte und unstrukturierte historische Finanzdaten über Python-Wrapper-Pakete und Datenabonnementdienste auf standardisierte und effiziente Weise verfügbar sind. In vielen Fällen können ähnliche Datensätze sogar von Einzelpersonen kostenlos abgerufen werden, die z. B. Handelsplattformen wie die der FXCM Group, LLC, nutzen, die in Kapitel 14 vorgestellt und auch in Kapitel 16 verwendet wird. Sobald die Daten auf der Python-Ebene liegen - unabhängig von der ursprünglichen Quelle -, kann die volle Leistungsfähigkeit des Python-Datenanalyse-Ökosystems ausgeschöpft werden.
Datengesteuerte Finanzen
Daten sind heutzutage der Motor der Finanzwelt. Selbst einige der größten und oft erfolgreichsten Hedgefonds nennen sich "datengetrieben" statt "finanzgetrieben". Immer mehr Angebote stellen großen und kleinen Institutionen und Einzelpersonen riesige Mengen an Daten zur Verfügung. Python ist im Allgemeinen die Programmiersprache der Wahl, um mit den APIs zu interagieren und die Daten zu verarbeiten und zu analysieren.
KI-First Finance
Mit der Verfügbarkeit großer Mengen von Finanzdaten über programmatische APIs ist es viel einfacher und fruchtbarer geworden, Methoden der künstlichen Intelligenz (KI) im Allgemeinen und des maschinellen und tiefen Lernens (ML, DL) im Besonderen auf Finanzprobleme anzuwenden, z. B. im algorithmischen Handel.
Python kann auch in der Welt der KI als erstklassige Sprache angesehen werden. Es ist oft die Programmiersprache der Wahl für KI-Forscher und -Praktiker. In diesem Sinne profitiert der Finanzbereich von Entwicklungen in verschiedenen Bereichen, die manchmal nicht einmal im Entferntesten mit Finanzen zu tun haben. Ein Beispiel ist das Open-Source-PaketTensorFlow
für Deep Learning, das von Google Inc. entwickelt und gepflegt wird und unter anderem von der Muttergesellschaft Alphabet Inc. bei der Entwicklung, Produktion und dem Verkauf von selbstfahrenden Autos eingesetzt wird ( ).
Obwohl es sicher nicht im Entferntesten mit dem Problem des automatischen, algorithmischen Aktienhandels zu tun hat, kann TensorFlow
zum Beispiel genutzt werden, um Bewegungen auf den Finanzmärkten vorherzusagen. Kapitel 15 enthält eine Reihe von Beispielen dafür.
Eines der am häufigsten verwendeten Python-Pakete für ML ist scikit-learn
. Der folgende Code zeigt, wie auf stark vereinfachte Weise Klassifizierungsalgorithmen aus ML verwendet werden können, um die Richtung zukünftiger Marktpreisbewegungen vorherzusagen und eine algorithmische Handelsstrategie auf diese Vorhersagen zu stützen. Alle Details werden in Kapitel 15 erklärt, daher ist das Beispiel recht kurz gehalten. Zunächst der Datenimport und die Aufbereitung der Merkmalsdaten (direktionale verzögerte Log-Rendite-Daten):
In
[
36
]
:
import
numpy
as
np
import
pandas
as
pd
In
[
37
]
:
data
=
pd
.
read_csv
(
'
../../source/tr_eikon_eod_data.csv
'
,
index_col
=
0
,
parse_dates
=
True
)
data
=
pd
.
DataFrame
(
data
[
'
AAPL.O
'
]
)
data
[
'
Returns
'
]
=
np
.
log
(
data
/
data
.
shift
(
)
)
data
.
dropna
(
inplace
=
True
)
In
[
38
]
:
lags
=
6
In
[
39
]
:
cols
=
[
]
for
lag
in
range
(
1
,
lags
+
1
)
:
col
=
'
lag_{}
'
.
format
(
lag
)
data
[
col
]
=
np
.
sign
(
data
[
'
Returns
'
]
.
shift
(
lag
)
)
cols
.
append
(
col
)
data
.
dropna
(
inplace
=
True
)
Wählt historische Tagesenddaten für die Apple Inc. Aktie (
AAPL.O
) aus.Berechnet die Log-Renditen über die gesamte Historie.
Erzeugt
DataFrame
Spalten mit direktional verzögerten Log-Return-Daten (+1
oder-1
).
Als Nächstes folgt die Instanziierung eines Modellobjekts für einen Support-Vektor-Maschine (SVM)-Algorithmus, die Anpassung des Modells und der Schritt der Vorhersage. Abbildung 1-2 zeigt, dass die vorhersagebasierte Handelsstrategie, die je nach Vorhersage auf die Aktie von Apple Inc. long oder short geht, besser abschneidet als die passive Benchmark-Investition in die Aktie selbst:
In
[
40
]
:
from
sklearn.svm
import
SVC
In
[
41
]
:
model
=
SVC
(
gamma
=
'
auto
'
)
In
[
42
]
:
model
.
fit
(
data
[
cols
]
,
np
.
sign
(
data
[
'
Returns
'
]
)
)
Out
[
42
]
:
SVC
(
C
=
1.0
,
cache_size
=
200
,
class_weight
=
None
,
coef0
=
0.0
,
decision_function_shape
=
'
ovr
'
,
degree
=
3
,
gamma
=
'
auto
'
,
kernel
=
'
rbf
'
,
max_iter
=
-
1
,
probability
=
False
,
random_state
=
None
,
shrinking
=
True
,
tol
=
0.001
,
verbose
=
False
)
In
[
43
]
:
data
[
'
Prediction
'
]
=
model
.
predict
(
data
[
cols
]
)
In
[
44
]
:
data
[
'
Strategy
'
]
=
data
[
'
Prediction
'
]
*
data
[
'
Returns
'
]
In
[
45
]
:
data
[
[
'
Returns
'
,
'
Strategy
'
]
]
.
cumsum
(
)
.
apply
(
np
.
exp
)
.
plot
(
figsize
=
(
10
,
6
)
)
;
Instanziiert das Modellobjekt.
Passt das Modell mit den Merkmalen und den Beschriftungsdaten (alle richtungsabhängig) an.
Verwendet das angepasste Modell, um die Vorhersagen (in-sample) zu erstellen, die gleichzeitig die Positionen der Handelsstrategie sind (long oder short).
Berechnet die Log-Renditen der Handelsstrategie anhand der Vorhersagewerte und der Benchmark-Log-Renditen.
Stellt die Leistung der ML-basierten Handelsstrategie im Vergleich zur Leistung der passiven Benchmark-Anlage dar.
Der hier gewählte vereinfachte Ansatz berücksichtigt weder die Transaktionskosten noch trennt er den Datensatz in Trainings- und Testteilmengen. Er zeigt jedoch, wie einfach die Anwendung von ML-Algorithmen auf Finanzdaten ist, zumindest in technischer Hinsicht; in der Praxis müssen jedoch einige wichtige Themen berücksichtigt werden (siehe López de Prado (2018)).
KI-First Finance
KI wird das Finanzwesen auf eine Weise umgestalten, wie andere Bereiche bereits umgestaltet wurden. Die Verfügbarkeit großer Mengen von Finanzdaten über programmatische APIs ist in diesem Zusammenhang ein wichtiger Faktor. Grundlegende Methoden der KI, ML und DL werden in Kapitel 13 vorgestellt und in den Kapiteln 15 und16 auf den algorithmischen Handel angewendet. Eine angemessene Behandlung der KI-gestützten Finanzwirtschaft würde jedoch ein ganzes Buch erfordern, das sich diesem Thema widmet.
KI im Finanzwesen ist als natürliche Erweiterung des datengesteuerten Finanzwesens ein faszinierendes und spannendes Feld, sowohl aus Sicht der Forschung als auch aus Sicht der Praxis. Obwohl in diesem Buch verschiedene Methoden aus den Bereichen KI, ML und DL in unterschiedlichen Kontexten eingesetzt werden, liegt der Schwerpunkt - wie der Untertitel des Buches schon sagt - auf den grundlegenden Python-Techniken und -Ansätzen, die für die datengesteuerte Finanzwirtschaft benötigt werden. Diese sind jedoch genauso wichtig für AI-first finance.
Fazit
Python als Sprache - und noch mehr als Ökosystem - ist ein ideales technologisches Framework für die Finanzbranche insgesamt und für jeden, der im Finanzbereich arbeitet. Sie zeichnet sich durch eine Reihe von Vorteilen aus, wie z. B. eine elegante Syntax, effiziente Entwicklungsansätze und Benutzerfreundlichkeit sowohl für das Prototyping als auch für die Produktion. Mit seiner riesigen Anzahl an verfügbaren Paketen, Bibliotheken und Werkzeugen scheint Python Antworten auf die meisten Fragen zu haben, die durch die jüngsten Entwicklungen in der Finanzbranche in Bezug auf Analysen, Datenvolumen und -häufigkeit, Compliance und Regulierung sowie die Technologie selbst aufgeworfen werden. Python hat das Potenzial, ein einziges, leistungsfähiges und konsistentes Framework zu bieten, mit dem sich die Entwicklung und Produktion auch in größeren Finanzinstituten durchgängig rationalisieren lässt.
Darüber hinaus ist Python die Programmiersprache der Wahl für künstliche Intelligenz im Allgemeinen und maschinelles und tiefes Lernen im Besonderen. Python ist daher die richtige Sprache für die datengesteuerte Finanzwirtschaft und die KI-gestützte Finanzwirtschaft, zwei aktuelle Trends, die das Finanzwesen und die Finanzindustrie grundlegend umgestalten werden.
Weitere Ressourcen
Die folgenden Bücher behandeln mehrere Aspekte, die in diesem Kapitel nur gestreift wurden, ausführlicher (z. B. Python-Tools, Derivate-Analytik, maschinelles Lernen im Allgemeinen und maschinelles Lernen im Finanzwesen):
-
Hilpisch, Yves (2015). Derivative Analytics with Python. Chichester, England: Wiley Finance.
-
López de Prado, Marcos (2018). Advances in Financial Machine Learning. Hoboken, NJ: John Wiley & Sons.
-
VanderPlas, Jake (2016). Python Data Science Handbook. Sebastopol, CA: O'Reilly.
Wenn es um den algorithmischen Handel geht, bietet das Unternehmen des Autors eine Reihe von Online-Schulungsprogrammen an, die sich auf Python und andere Werkzeuge und Techniken konzentrieren, die in diesem schnell wachsenden Bereich benötigt werden:
Quellen, auf die in diesem Kapitel Bezug genommen wird, sind u.a. die folgenden:
-
Ding, Cubillas (2010). "Optimierung der Infrastruktur für die Preisbildung und Bewertung im Freiverkehr". Celent.
-
Lewis, Michael (2014). Flash Boys. New York: W. W. Norton & Company.
-
Patterson, Scott (2010). Die Quanten. New York: Crown Business.
1 Python ist zum Beispiel eine der wichtigsten Sprachen, die im Master of Financial Engineering Programm am Baruch College der City University of New York verwendet wird. Die erste Ausgabe dieses Buches wird an zahlreichen Universitäten auf der ganzen Welt eingesetzt, um Python für Finanzanalysen und die Erstellung von Anwendungen zu lehren.
2 Siehe http://wiki.python.org/moin/BeginnersGuide, wo du Links zu vielen wertvollen Ressourcen für Entwickler und Nicht-Entwickler findest, die mit Python anfangen.
Get Python für Finanzen, 2. Auflage 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.