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)  1

        -----------------------------------------------------------------
        NameError                       Traceback (most recent call last)
        <ipython-input-3-74f22a2fd43b> in <module>
        ----> 1 log(1)  1

        NameError: name 'log' is not defined

In [4]: import math  2

In [5]: math.log(1)  2
Out[5]: 0.0
1

Ohne weitere Importe wird ein Fehler ausgelöst.

2

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 auf NumPy auf und bietet umfangreichere Klassen für die Verwaltung und Analyse von Zeitreihen und tabellarischen Daten; es ist eng mit matplotlib für das Plotten und PyTables 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 das HDF5 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.

IDC

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.

Statista

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.

PwC 19th Annual Global CEO Survey 2016

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
S T = S 0 exp r - 1 2 σ 2 T + σ T z

Im Folgenden findest du eine algorithmische Beschreibung des Monte-Carlo-Bewertungsverfahrens:

  1. Ziehe I Pseudo-Zufallszahlen z ( i ) , i { 1 , 2 , . . . , I } aus der Standard-Normalverteilung.

  2. Berechne alle resultierenden Indexstände bei Fälligkeit S T ( i ) für gegebene z(i) und Gleichung 1-1.

  3. Berechne alle inneren Werte der Option bei Fälligkeit als hT(i) = max(ST(i) - K, 0).

  4. 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
C 0 e -rT 1 I I h T ( i )

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  1

In [7]: S0 = 100.  2
        K = 105.  2
        T = 1.0  2
        r = 0.05  2
        sigma = 0.2  2

In [8]: I = 100000  2

In [9]: np.random.seed(1000)  3

In [10]: z = np.random.standard_normal(I)  4

In [11]: ST = S0 * np.exp((r - sigma ** 2 / 2) * T + sigma * math.sqrt(T) * z)  5

In [12]: hT = np.maximum(ST - K, 0)  6

In [13]: C0 = math.exp(-r * T) * np.mean(hT)  7

In [14]: print('Value of the European call option: {:5.3f}.'.format(C0))  8
         Value of the European call option: 8.019.
1

NumPy wird hier als das Hauptpaket verwendet.

2

Die Werte der Modell- und Simulationsparameter werden festgelegt.

3

Der Startwert für den Zufallszahlengenerator ist festgelegt.

4

Es werden standardmäßig normalverteilte Zufallszahlen gezogen.

5

Die Werte am Ende des Zeitraums werden simuliert.

6

Die Auszahlungen der Optionen bei Fälligkeit werden berechnet.

7

Der Monte-Carlo-Schätzer wird ausgewertet.

8

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
print('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  1
         import pandas as pd  1
         from pylab import plt, mpl  2

In [17]: plt.style.use('seaborn')  2
         mpl.rcParams['font.family'] = 'serif'  2
         %matplotlib inline

In [18]: data = pd.read_csv('../../source/tr_eikon_eod_data.csv',
                           index_col=0, parse_dates=True)  3
         data = pd.DataFrame(data['.SPX']) 4
         data.dropna(inplace=True)  4
         data.info()  5
         <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))  6
         data['vola'] = data['rets'].rolling(252).std() * np.sqrt(252)  7

In [20]: data[['.SPX', 'vola']].plot(subplots=True, figsize=(10, 6));  8
1

Diese importiert NumPy und pandas.

2

Dies importiert matplotlib und konfiguriert den Plotting-Stil und die Vorgehensweise für Jupyter.

3

pd.read_csv() ermöglicht das Abrufen von remote oder lokal gespeicherten Datensätzen in Form von kommagetrennten Werten (CSV).

4

Eine Teilmenge der Daten wird ausgewählt und die Werte von NaN ("keine Zahl") eliminiert.

5

Dies zeigt einige Metainformationen über den Datensatz an.

6

Die Log-Renditen werden vektorisiert berechnet ("keine Schleifenbildung" auf Python-Ebene).

7

Die rollierende, annualisierte Volatilität wird abgeleitet.

8

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.

pff2 0101
Abbildung 1-1. S&P 500-Schlusswerte und annualisierte Volatilität

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 und Numba.

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  1

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')  2

In [28]: data.info()  2
         <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()  3
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
1

Die Nutzung der Eikon Data API erfordert ein Abonnement und eine API-Verbindung.

2

Ruft die Tickdaten für die Aktie von Apple Inc. (AAPL.O) ab.

3

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)  1

In [31]: news  1
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])  2

In [33]: from bs4 import BeautifulSoup  3

In [34]: story = BeautifulSoup(story_html, 'html5lib').get_text()  4

In [35]: print(story[83:958])  5
         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,
1

Ruft die Metadaten für eine kleine Auswahl von Nachrichtenartikeln ab.

2

Ruft den vollständigen Text eines einzelnen Artikels ab, der als HTML-Dokument geliefert wird.

3

Importiert das BeautifulSoup HTML Parsing Paket und ...

4

... extrahiert den Inhalt als reinen Text (ein str Objekt).

5

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'])  1
         data['Returns'] = np.log(data / data.shift())  2
         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))  3
             cols.append(col)
         data.dropna(inplace=True)
1

Wählt historische Tagesenddaten für die Apple Inc. Aktie (AAPL.O) aus.

2

Berechnet die Log-Renditen über die gesamte Historie.

3

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')  1

In [42]: model.fit(data[cols], np.sign(data['Returns']))  2
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])  3

In [44]: data['Strategy'] = data['Prediction'] * data['Returns']  4

In [45]: data[['Returns', 'Strategy']].cumsum().apply(np.exp).plot(
                 figsize=(10, 6));  5
1

Instanziiert das Modellobjekt.

2

Passt das Modell mit den Merkmalen und den Beschriftungsdaten (alle richtungsabhängig) an.

3

Verwendet das angepasste Modell, um die Vorhersagen (in-sample) zu erstellen, die gleichzeitig die Positionen der Handelsstrategie sind (long oder short).

4

Berechnet die Log-Renditen der Handelsstrategie anhand der Vorhersagewerte und der Benchmark-Log-Renditen.

5

Stellt die Leistung der ML-basierten Handelsstrategie im Vergleich zur Leistung der passiven Benchmark-Anlage dar.

pff2 0102
Abbildung 1-2. ML-basierte algorithmische Handelsstrategie vs. passive Benchmark-Investition in Apple Inc.

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.