10 nützliche Python Libraries & Packages für Deine automatisierte Trading-Strategie


blog photo
Joanne Snel26. August 2021
Trading


Hallo! Ich bin Joanne, Praktikantin bei lemon.markets und ich bin hier, um einige nützliche Python-Bibliotheken und -Packages vorzustellen, die ihr verwenden könnt, wenn ihr mit Finanzdaten arbeitet und/oder automatisierten Handel betreiben wollt. Bei lemon.markets bauen wir die entsprechende Infrastruktur, damit Entwickler:innen ihre eigenen Trading-Experiences an der Börse entwickeln können. Wie auch immer Euer Produkt aussehen mag: Es gibt normalerweise immer eine oder mehrere Python-Bibliotheken, die Euch die Arbeit abnehmen können. Anstatt also das Rad neu zu erfinden, schauen wir uns an, welche Pakete Euch das Leben bei Eurer Trading-Experience erleichtern können.

Der Schwerpunkt liegt hier auf Python, aber für viele der vorgestellten Bibliotheken gibt es entweder Wrapper, mit denen sie in anderen Sprachen verwendet werden können, oder aber vergleichbare Alternativen. Wenn ihr weitere Vorschläge habt, schreibt uns gerne an support@lemon.markets.

In diesem Blogpost habe ich den Handelsprozess in drei allgemeine Schritte unterteilt: Manipulation von (Roh-)Daten, Durchführung technischer Analysen und schließlich die Bewertung Eurer Position. Es gibt wahrscheinlich mehr als 100 Schritte, die in diesen Prozess eingefügt werden können, aber diese drei Schritte sind vermutlich ein guter Anfang. Wir decken dadurch das "Vorher", das "Während" und das "Nachher" ab, wenn es um die Umsetzung Eurer Strategie geht. Falls Euch gerade keine anderen möglichen Schritte einfallen, denkt doch vielleicht mal an: Datenerfassung, Datenvisualisierung, Papierhandel, Backtesting, maschinelles Lernen, Positionsmanagement... Noch Fragen?

Der Prozess kann in etwa so aussehen.

Datenmanipulation

Wir gehen hier davon aus, dass ihr Daten sammelt, bevor ihr Eure Tradingstrategie implementiert. Live-Marktdaten, historische Daten, Sentiment: All das fällt in diese Kategorie. Und bevor ihr irgendeine Art von Manipulation durchführen könnt, braucht ihr zunächst einmal Daten, mit denen ihr das tun könnt. Natürlich kann die lemon.markets Marktdaten-API genutzt werden, um historische Marktdaten abzurufen. In naher Zukunft werden wir Euch zusätzlich auch noch Echtzeit-Marktdaten zur Verfügung stellen (stay tuned!). Aber ihr seid bei der Datenmanipulation nicht nur auf Marktdaten beschränkt, sondern könnt beispielsweise auch Schlagzeilen von Nachrichtenseiten abrufen, um Sentiment-Analysen durchzuführen. Unabhängig davon, woher ihr Eure Daten bezieht, werden die Daten oft nicht in genau dem Format sein, das ihr benötigt: Stichwort Datenmanipulationstools.

🐼 Pandas

1import pandas as pd

Keine Liste mit Python-Bibliotheken für Finanzanalysen (oder im Prinzip jede Art datengesteuerter Arbeit) wäre vollständig ohne Pandas. Es ist ein leistungsfähiges Tool zur Datenmanipulation, das mit Datenstrukturen namens Series (eindimensional) und DataFrames (zweidimensional) arbeitet. Es kann verwendet werden, um Daten intelligent zu indizieren, verschiedene Datensätze zusammenzuführen und zu verbinden und sogar Berechnungen durchzuführen. Die Dokumentation enthält einen 10-minütigen Leitfaden zu Pandas und DataCamp bietet ein Tutorial zur Verwendung von Python für das Finanzwesen.

🔢 NumPy

1import numpy as np

NumPy, oder die "Numerische Python-Bibliothek", ist das Paket für wissenschaftliche Berechnungen in Python. NumPy bietet Funktionen für lineare Algebra, Fourier-Transformationen und die Erzeugung von Zufallszahlen. Es ist weit verbreitet, weil es die Vektorisierung nutzt. Damit kann eine Berechnung, die 1000 Zyklen dauern könnte, in eine Berechnung mit 250 Zyklen verwandelt werden. Als Entwickler:innen sind wir natürlich immer bestrebt, die Rechenleistung zu reduzieren, wo immer es möglich ist.

👩‍🔬 SciPy

1import scipy as sp

SciPy ist die wissenschaftliche Bibliothek, die auf NumPy aufbaut - sie enthält Module für Statistik, Optimierung, Integration, lineare Algebra und mehr. Ähnlich wie NumPy, aber mit mehr Funktionalität (was seinen Preis hat: langsamere Berechnungsgeschwindigkeit). Schaut Euch am besten mal die Dokumentation an, um zu sehen, ob es Euren Anforderungen gerecht wird.

📊 Matplotlib

1import matplotlib.pyplot as plt

Die Matplotlib-Bibliothek kann zur Erstellung statischer, animierter und interaktiver Visualisierungen in Python verwendet werden. Es gibt eine Million Gründe, warum ihr Daten in der Finanzanalyse visualisieren wollen könntet. Zum Beispiel könntet ihr die Performance einer einzelnen Aktie (oder eines Aktienportfolios) im Vergleich zu einem Index wie dem S&P500 darstellen. Oder vielleicht möchtet ihr ja ein einfaches Histogramm der täglichen Aktienrenditen erstellen, um (visuell) festzustellen, ob sie einer Normalverteilung folgen. Natürlich sollte dies immer durch einen statistischen Test unterstützt werden, der beispielsweise mit der statsmodels-Bibliothek durchgeführt werden kann (dazu komme ich gleich).

Ihr werdet feststellen, dass die oben genannten vier Bibliotheken oft gleichzeitig in Projekten verwendet werden, und wahrscheinlich wird es in Eurem Anwendungsfall ähnlich sein. Generell lassen sich die vier Bibliotheken nahtlos integrieren. Viele zusätzliche Nischenpakete bauen auf ihnen auf, zum Beispiel: PyNance. Zu diesen Bibliotheken gibt es viele Ressourcen: Für den Einstieg findet ihr hier eine Einführung in NumPy und Pandas.

Schauen wir uns ein kleines Beispiel an, wie alle vier Bibliotheken für eine einfache Renditevisualisierung verwendet werden können (wir stellen ein Histogramm der täglichen Tesla-Renditen gegen eine Normalverteilungskurve dar):

1import requests
2import pandas as pd
3import numpy as np
4from scipy.stats import norm
5import matplotlib.pyplot as plt
6def get_ohlc():
7    response = requests.get(
8        'https://data.lemon.markets/v1/ohlc/d1/?isin=US0378331005 \
9               &from=2021-06-25T00:00:00&to=2021-11-14T00:00:00',
10        headers={"Authorization": "Bearer YOUR-API-KEY"})
11    results = response.json()['results']
12    return results
13def calculate_returns():
14    df = pd.DataFrame(get_ohlc())
15    # calculate returns based on closing price
16    df['r'] = df['c'].pct_change().fillna(method='bfill')
17    df.tail()
18    return df
19def plot_returns():
20    returns = calculate_returns()['r']
21    # plot returns
22    plt.hist(returns, bins=25, density=True, alpha=0.6, color='darkorange')
23    # plot normal distribution fitted to returns
24    mu, std = norm.fit(returns)
25    xmin, xmax = plt.xlim()
26    x = np.linspace(xmin, xmax, 100)
27    p = norm.pdf(x, mu, std)
28    plt.plot(x, p, 'k', linewidth=2)
29    plt.xlabel('Daily Tesla Returns')
30    plt.ylabel('Probability Density Function')
31    plt.show()
32plot_returns()

In diesem Skript müsst ihr noch Authorization-URL, die Paper-Trading-URL und Eure client ID/client secret eingeben.

Das Skript liefert das folgende Histogramm:

Natürlich verfügen wir nicht über genügend Datenpunkte, um feststellen zu können, ob die täglichen Erträge von Tesla einer Normalverteilung folgen. Wir hoffen aber dennoch, dass dieses kleine Beispiel Euch zeigt, was man mit diesen Datenmanipulationspaketen und unserem OHLC-Endpunkt alles machen kann.

Technische Analyse

Eure Strategie kann eine technische Analyse beinhalten, muss es aber nicht. Wenn ihr historische Kursdaten verwendet, um künftige Kursbewegungen vorherzusagen, dann fällt dies unter die technische Analyse. Wenn ihr das nicht tut, ist das auch nicht schlimm. Ihr könnt Eure automatisierte Handelsstrategie nämlich auch ohne technische Analyse implementieren (kann aber dennoch hilfreich sein, also lest ruhig weiter).

📈 TA-Lib

1import talib as ta

TA-Lib, oder Technical Analysis Library, kann zur technischen Analyse von Finanzdaten verwendet werden, indem bekannte technische Indikatoren wie der gewichtete gleitende Durchschnitt (WMA) oder der Relative Strength Index (RSI) berechnet werden. TA-Lib kann auch Candlestick-Muster erkennen, wie z. B. den "Inverted Hammer" oder die "Homing Pigeon", um nur einige zu nennen. Diese Indikatoren können als Kauf- oder Verkaufssignale für Eure Handelsstrategie dienen.

📉 Statsmodels

1import statsmodels.api as sm

Python enthält zwar bereits ein eingebautes Statistikmodul, aber das Paket statsmodels kann für deutlich tiefer gehende statistische Analysen verwendet werden. Angenommen, ihr möchtet ein ARIMA-Modell für historische Preisdaten erstellen, um die Preisentwicklung in der Zukunft vorherzusagen, dann wäre diese Bibliothek genau das richtige Tool für Euch. Oder Euer Anwendungsfall ist noch einfacher, z. B. die Durchführung eines Jarque-Bera-Tests auf Normalität der Residuen nach einer Regression.

🙋 PyStan

1import stan

Die Bayes'sche Inferenz wird in der Finanzmodellierung u. a. zur Bewertung der Vorhersagbarkeit von Renditen und des Strategierisikos verwendet. PyStan ist das an Python angepasste Paket zur Durchführung von Bayes'scher Inferenz. Bitte beachtet, dass ihr eine domänenspezifische, auf C++ basierende Sprache (Stan genannt) verwenden müsst, was die Nutzung dieses Pakets etwas erschwert. Es ist jedoch sehr leistungsfähig, da statistische Modellierung, Analyse und Vorhersage auf hohem Niveau durchgeführt werden können.

➗ f.fn()

1import ffn

ffn ist eine Bibliothek, die Pandas, NumPy und SciPy erweitert und Funktionen enthält, die häufig im Rahmen des quantitativen Finanzwesens verwendet werden. Ihr könnt damit zum Beispiel die Risikoparitätsgewichte für einen DataFrame (🐼) von Renditen berechnen. Falls ihr mit der Risikoparität nicht vertraut seid: Es handelt sich dabei um eine Investment Methode, mit der festgelegt wird, wie das Risiko innerhalb einer Potisions verteilt werden soll. (Haben wir eigentlich schon erwähnt, dass das Lesen der Dokumentation von Trading Bibliotheken eine gute Möglichkeit ist, sich mit neuen Metriken vertraut zu machen?)

Die oben genannten vier Bibliotheken können verwendet werden, um zu bestimmen, wann, was und wie viel gekauft oder verkauft werden soll. Sobald diese Entscheidungen getroffen sind, kann die lemon.markets-Trading-API verwendet werden, um Eure Orders an der Börse zu platzieren. Eine Order kann wie folgt platziert werden:

1import requests
2import json
3def place_order(isin: str, side: str, quantity: int):
4    if trading_signal:
5        request = requests.post("https://paper-trading.lemon.markets/v1/orders/",
6                                data=json.dumps({
7                                    "isin": isin,
8                                    "expires_at": "p7d",
9                                    "side": side,
10                                    "quantity": quantity,
11                                    "venue": "XMUN"}),
12                                headers={"Authorization": "BEARER YOUR-API-KEY"})
13        print("Your trade was placed")
14    else:
15        print("Your trade was not placed")
16place_order("US0378331005", "buy", 1)

Um dieses Code Snippet auszuführen, musst Du Deine API key einfügen.

Der boolesche Wert trading_signal gibt an, ob die Order platziert werden soll oder nicht (hier kommen die oben erwähnten Bibliotheken ins Spiel). In diesem Skript haben wir ihn jedoch noch nicht definiert.

Position-Bewertung

Sobald Eure Strategie fertiggestellt und umgesetzt ist, solltet ihr anfangen die Leistung zu messen. Nicht nur anhand der Renditen, sondern auch durch Berechnung z. B. des mit ihr verbundenen Risikos. Die Analyse der Position ist dabei keine einmalige Sache: Ein guter Anleger bewertet seine Position regelmäßig (oder automatisiert den Prozess) und führt notwendige Änderungen durch, wie beispielsweise eine Neugewichtung oder den Kauf zusätzlicher Aktien, um eine angemessene Diversifizierung zu erreichen. Hinweis: Auf Eure lemon.markets Position könnt ihr über den Position-Endpunkt zugreifen:

1import requests
2request = requests.get("https://paper-trading.lemon.markets/v1/positions/",
3                       headers={"Authorization": "BEARER YOUR-API-KEY"})
4print(request.json())

Damit würde jedes Instrument in Eurer Position auf folgende Weise zurückgegeben werden:

1results :[
2    {
3        "isin": "",
4        "isin_title": "",
5        "quantity": ,
6        "buy_price_avg": ,
7        "estimated_price_total": ,
8        "estimated_price": 
9    }
10]

✋ Empyrical

1import empyrical as em

Empyrical kann zur Berechnung bekannter Performance- und Risikostatistiken verwendet werden, z. B. Sharpe Ratio, Alpha und Beta. Diese Kennzahlen können zeigen, wie die Position im Verhältnis zum Markt abschneidet und ob strukturelle Änderungen vorgenommen werden sollten. Es handelt sich um ein Open-Source-Projekt, das von dem inzwischen aufgelösten Quantopian initiiert wurde. Das GitHub-Repository ist jedoch noch einigermaßen aktiv (Drücken wir die Daumen, dass es so bleibt 🙏🏼).

💼 PyFolio

1import pyfolio as pf

PyFolio ist Empyrical insofern ähnlich, als dass es eine Grafik erstellen kann, die die Performance und die Risikoanalyse widerspiegelt. Dies geschieht durch ein sogenanntes Tear Sheet, das Kennzahlen wie die Stabilität, den maximalen Drawdown und die Kurtosis der Erträge Eurer Position enthält.

Diese zehn Python-Bibliotheken und -Pakete sollten ein guter Ausgangspunkt auf dem Weg zum automatisierten Handel darstellen. Die Integration mit der lemon.markets API ist auf jeder Stufe möglich: Marktdaten können zur Datenmanipulation abgerufen werden, Orders können entsprechend technischer Indikatoren platziert werden und auf die Position kann zugegriffen werden, um Risiko- und Leistungsbewertungen vorzunehmen. Wir bemühen uns, die API so transparent wie möglich zu gestalten, um Euch als Entwickler:innen die volle Kontrolle über Euer Brokerage-Erlebnis zu geben.

Wenn ihr noch nicht bei lemon.markets angemeldet seid, könnt ihr Euch hier registrieren - wir würden uns freuen, Euch dabei zu haben! Habt ihr Fragen oder Anregungen? Schickt uns gerne eine E-Mail an support@lemon.markets oder tretet unserer Slack-Community bei. Da findet ihr weitere Inspirationen oder Tools.

Wir sehen uns bald wieder,

Joanne 🍋

Das könnte Dich auch interessieren

blog photo

Using Time Series Forecasting to predict stock prices 🔮

In this article you will learn what time series forecasting is and how its application in finance looks like. Then you'll also dive into Facebook's Prophet Model for Time Series Forecasting and use it together with the lemon.markets Market Data API to forecast the development of the Tesla Stock.

blog photo

Dummies Guide to Trading with Machine Learning

Ever wonder how a trader with decades of experience on thousands of stocks and lightning fast reaction times might perform in the market? With some machine learning knowledge, you might be able to automate such a trader yourself! 💻 📈

blog photo

4 reasons why YOU should automate your trading strategy

In the current volatile market conditions, everyone is trying to find ways to minimise portfolio loss. In that context, have you ever thought about automating your trading strategy? In this article, we will dive into 4 reasons for doing so. Expect to learn how it can save you time, make your trading more efficient and lead to data-based decisions.

Tiefer eintauchen

Finde weitere Ressourcen für einen einfachen Einstieg

In unserer Dokumentation erfahrt Ihr mehr über unsere API-Struktur, die verschiedenen Endpunkte und spezifische Anwendungsfälle.

Austauschen

Tritt der lemon.markets Community bei

Tritt unserem Slack-Channel bei, um Dich aktiv an unserer Community zu beteiligen, Fragen an andere Nutzer:innen zu stellen und immer auf dem Laufenden zu bleiben.

Team unterstützen

Lust lemon.markets mit uns zu bauen?

Wir sind immer auf der Suche nach großartigen Ergänzungen für unser Team, die uns beim Aufbau einer Brokerage Infrastruktur für das 21. Jahrhundert helfen.

Brauchst Du Hilfe?
Stell Deine Fragen in unserer CommunityStell Deine Fragen in unserer CommunityLeg mit unserer API Dokumentation losLeg mit unserer API Dokumentation losLass Dich von unserem Blog inspirierenLass Dich von unserem Blog inspirieren
© lemon.markets 2022DatenschutzImpressum
Systems are down

Als vertraglich gebundener Vermittler gemäß § 3 Abs. 2 WpIG für Rechnung und unter der Haftung der DonauCapital Wertpapier GmbH, Passauer Str. 5, 94161 Ruderting (kurz: DonauCapital), bietet Dir die lemon.markets GmbH, die Anlagevermittlung (§ 2 Abs. 2 Nr. 3 WpIG) von Finanzinstrumenten im Sinne des § 3 Abs. 5 WpIG sowie die Vermittlung von Konten an.