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


blog photo
Veröffentlicht von Joanne Snel am 26. 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 [email protected]

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 Eures Portfolios. 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, Portfoliomanagement... 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
6client_id: str = "your client id here"
7client_secret: str = "your client secret here"
8def get_token():
9     auth = requests.post("https://auth.lemon.markets/oauth2/token",
10                         data={
11                             "client_id": client_id,
12                             "client_secret": client_secret,
13                             "grant_type": "client_credentials"
14                         })
15    token: str = "Bearer " + auth.json()['access_token']
16    return token
17def get_ohlc():
18    response = requests.get(
19        'https://paper-data.lemon.markets/v1/ohlc/d1/?isin=US0378331005
20             &from=2021-06-25T00:00:00&to=2021-08-24T00:00:00',
21        headers={"Authorization": get_token()})
22    results = response.json()['results']
23    return results
24def calculate_returns():
25    df = pd.DataFrame(get_ohlc())
26    # calculate returns based on closing price
27    df['r'] = df['c'].pct_change().fillna(method='bfill')  
28    df.tail()
29    return df
30def plot_returns():
31    returns = calculate_returns()['r']
32    # plot returns
33    plt.hist(returns, bins=25, density=True, alpha=0.6, color='darkorange')
34    # plot normal distribution fitted to returns
35    mu, std = norm.fit(returns)
36    xmin, xmax = plt.xlim()
37    x = np.linspace(xmin, xmax, 100)
38    p = norm.pdf(x, mu, std)
39    plt.plot(x, p, 'k', linewidth=2)
40    plt.xlabel('Daily Tesla Returns')
41    plt.ylabel('Probability Density Function')
42    plt.show()
43plot_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 eines Portfolios 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
2def place_order(isin: str, side: str, quantity: int):
3    if trading_signal:
4        request = requests.post("https://paper-trading.lemon.markets/rest/v1/spaces/space-uuid/orders/",
5                                data={"isin": isin, "valid_until": "2021-08-25T23:59:59", "side": side, "quantity": quantity},
6                                headers={"Authorization": get_token()})
7        print("Your trade was placed")
8    else:
9        print("Your trade was not placed")
10place_order("US0378331005", "buy", 1)

Um dieses Code Snippet auszuführen, müsst ihr die URL für den Papierhandel und die Space UUID eingeben und eine get_token()-Funktion definieren, wie wir es im vorherigen Beispiel getan haben.

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.

Portfolio-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 des Portfolios ist dabei keine einmalige Sache: Ein guter Anleger bewertet sein Portfolio 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 Euer lemon.markets Portfolio könnt ihr über den Portfolio-Endpunkt zugreifen:

1import requests
2def get_portfolio():
3    request = requests.get("https://paper-trading.lemon.markets/rest/v1/spaces/space-uuid/portfolio/",
4                       headers={"Authorization": get_token()})
5    print(request.json())

Damit würde jedes Instrument in Eurem Portfolio auf folgende Weise zurückgegeben werden:

1"instrument": {     
2      "title": "",     
3      "isin": "" },    
4"quantity": 0,    
5"average_price": "",    
6"latest_total_value": ""

✋ 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 das Portfolio 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 Eures Portfolios 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 das Portfolio 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 auf der Warteliste anmelden - wir würden uns freuen, Euch dabei zu haben! Habt ihr Fragen oder Anregungen? Schickt uns gerne eine E-Mail an [email protected] 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

Richte Deinen eigenen Telegram-Bot für den Handel mit der lemon.markets API ein (Teil 1 von 2)

blog photo

Hallo! Ich bin Joanne aus dem lemon.markets Team. Ich habe in den letzten Wochen an einem Use-Case für unser Produkt gearbeitet und freue mich sehr, das Ergebnis hier mit Euch zu teilen! Es gibt hunderte Use-Cases für unser Produkt, von automatisierten Handelsstrategien bis hin zu Dashboards, die Dein Portfolio visualisieren. Heute zeige ich Dir, wie Du die lemon.markets API mit der Telegram API verbinden kannst. Warum? Damit Du einen personalisierten Butler - ähm, Bot - hast, der mit ein paar sehr einfachen Nachrichten Orders für dich platzieren kann.

Erstelle dein eigenes lemon.markets Dashboard mit Flutter

blog photo

Hallo zusammen! Mein Name ist Marius und ich bin Teil von lemon.markets, einem early-stage Startup aus dem Herzen Berlins. Wir arbeiten an einer Infrastruktur, mit der Du Deine eigene Trading Experience an der Börse bauen kannst. In diesem Blogbeitrag führe ich Dich durch ein Projekt unseres Community-Mitglieds Melanie. Dafür schauen wir uns an, wie man mit Flutter ein mobil-optimiertes Web Dashboard bauen kann. Hört sich das an als wäre es was für Dich? Dann lass uns keine Zeit verschwenden und direkt loslegen.

Anleitung für eine Mean Reversion Strategie mit der lemon.markets API & Hosting in der Cloud

blog photo

In diesem Beitrag möchte ich Dir zeigen, wie Du die lemon.markets API nutzen kannst, um eine der bekanntesten Handelsstrategien zu bauen: Die Mean Reversion Strategie. Außerdem zeige ich Dir, wie Du Deine Strategie mit Heroku in der Cloud hosten kannst, damit Dein Skript weiterläuft, auch wenn Dein Laptop ausgeschaltet ist.

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.

Products
Pricing
For Developers
SlackGithubBlog
© lemon.markets 2021Privacy PolicyImprint
All systems normal