Die lemon.markets Marktdaten API verstehen


blog photo
Veröffentlicht von Marius Sprenger am 2. September 2021
Insights


Hallo zusammen! Mein Name ist Marius und ich bin der Community Developer bei lemon.markets, einem early-stage Startup aus dem Herzen Berlins. Wir arbeiten daran, eine Infrastruktur aufzubauen, die es Entwickler:innen ermöglicht, ihre eigene Brokerage Experience an der Börse zu gestalten. In diesem Blogpost möchte ich einen genaueren Blick auf eines unserer Kernprodukte werfen: Die Marktdaten API. Gemeinsam schauen wir uns an, wie die API aufgebaut ist, welche Art von Daten man mit ihr abrufen kann und wie das für Dein eigenes Trading Produkt hilfreich sein könnte.

Wozu braucht man Marktdaten?

Wenn Du schonmal Deine eigene Trading Strategie entwickeln wolltest (da Du es geschafft hast, auf diesen Blogbeitrag zu klicken und bis zu diesem Satz zu lesen, gehen wir davon aus, dass die Wahrscheinlichkeit ziemlich hoch ist), hast Du mit Sicherheit darüber nachgedacht, (historische) Marktdaten zu verwenden. Es gibt zwar einige Beispiele, bei denen quantifizierbare Marktdaten eine untergeordnete Rolle spielen (Sentiment-Analyse von Textdaten ist das prominenteste Beispiel), aber die große Mehrheit der (automatisierten) Trading Strategien arbeitet tatsächlich mit historischen oder Echtzeit-Aktienkursen, um eine Kauf- oder Verkaufsentscheidung zu treffen. In einem unserer Artikel findest Du einen Überblick über beliebte, einsteigerfreundliche Trading Strategien. Du wirst feststellen, dass es viele Möglichkeiten gibt, Marktdaten in Deine Trading Strategie zu integrieren. Deshalb wollen wir hier auch nicht weiter ausführen welche Methode möglicherweise die Beste sein könnte.

Was wir allerdings mitteilen möchten ist, warum wir bei lemon.markets der Meinung sind, dass Marktdaten wichtig sind. Die Antwort steckt (zumindest teilweise) in unserem Namen. Das Ziel von lemon.markets war es schon immer, die User Experience beim Kauf von Aktien an der Börse zu verbessern. Während wir im Moment einen klaren Entwicklerfokus haben, geht das grundliegende Prinzip viel tiefer. Wir wollen vermeiden, dass Menschen uninformierte Anlageentscheidungen treffen. Wie kann man das vermeiden? Unserer Meinung nach, indem man Daten nutzt.

“Without data you’re just another person with an opinion”

W. Edwards Deming

Dieses Zitat des berühmten Statistikers W. Edwards Deming fasst perfekt zusammen, wie wir über lemon.markets und Investitionsentscheidungen im Allgemeinen denken. Wenn Du Zugang zu umfangreichen Daten hast, stehen die Chancen gut, dass Du bessere Entscheidungen treffen wirst. Natürlich lassen historische Muster nicht zwangsläufig auf künftige Muster schließen, aber sie sind auf jeden Fall ein guter Ausgangspunkt. Wenn es sich also um den Kauf von Aktien an der Börse handelt, sind diese Daten Marktdaten. Und so können wir die Brücke zur berühmten Market of Lemons Theory schlagen, die sich mit der Informationsasymmetrie zwischen Käufer und Verkäufer am Beispiel von Gebrauchtwagen befasst (im amerikanischen Slang werden Gebrauchtwagen, die sich nach dem Kauf als kaputt erweisen, als "Lemons" bezeichnet). Indem wir dem Käufer (unseren Kunden, die Aktien kaufen oder verkaufen wollen) strukturierte und umfassende Informationen und die Freiheit/Flexibilität geben, ihr Brokerage-Produkt auf dieser Grundlage aufzubauen, glauben wir, dass wir die Informationsasymmetrie an der Börse (zumindest bis zu einem gewissen Grad) schließen können. Beim Beobachten des Verhaltens von unseren Nutzer:innen haben wir festgestellt, dass die Marktdaten-Endpunkte zu den am häufigsten genutzten gehören. Das bestärkt uns natürlich darin, dass der Zugang zu Marktdaten ein wichtiger Use-Case und damit ein wichtiges Produkt von lemon.markets ist.

Struktur der Marktdaten API

Die Erkenntnis, dass Marktdaten wichtig sind, ist eine Sache. Diese Erkenntnis in eine API-Struktur zu übersetzen ist eine andere. Unten findest Du die Struktur, die wir entwickelt haben.

Die Basis-URL unserer Marktdaten-API lautet:

1https://data.lemon.markets/v1/

Zum Verwenden dieser Basis-URL haben wir fünf verschiedene Endpunkte implementiert, die unterschiedliche Zwecke erfüllen. Wir werden diese gleich besprechen. Das Prinzip hinter der Struktur von jedem der Endpunkte ist jedoch das gleiche. Wenn Du z.B. Wertpapiere abrufen möchten, verwendest Du den Endpunkt /instruments/. Um Deinen Request zu spezifizieren, kannst Du verschiedene Query-Parameter verwenden (z.B. ?search für die Suche nach ISIN, WKN oder Titel, oder ?type für die Suche nach Aktien, Anleihen, ETFs, Optionsscheinen oder Fonds. Weitere Informationen zu den jeweiligen Query-Parametern eines  Endpunkts und zur Marktdaten-API im Allgemeinen findest Du in unserer Dokumentation).

Verwendung der Endpunkte

Die verschiedenen Endpunkte einfach auszuprobieren ist wahrscheinlich der beste Weg, um die API-Struktur zu verstehen. Deshalb haben wir ein kleines Beispielprojekt erstellt, mit dem Du alle Endpunkte der Marktdaten API bequem nutzen kannst. Das GitHub-Repository findest Du hier.

Um mit Environment-Variablen zu arbeiten, müssen wir zunächst eine Datei namens .env erstellen.

Lass uns die folgenden Variabeln einbeziehen:

  • API_KEY: Dein API Key
  • BASE_URL: "https://data.lemon.markets/v1/"
  • MIC: Der Market Identifier Code des Handelsplatzes, den Du verwenden möchtest.

Mit den Paketen os und python-dotenv können wir auf diese Variablen in unserem lokalen Setup zugreifen (dazu kommen wir gleich noch). Doch zunächst wollen wir eine Hilfsdatei definieren, die wir zur Ausführung von Requests verwenden können. Nennen wir sie helper.py. Innerhalb dieser Klasse können wir eine Klasse RequestHandler definieren, die wir später verwenden können, um API-Requests bequem über eine vordefinierte Funktion zu stellen. Da die Marktdaten-API nur GET-Requests anbietet, benötigen wir nur eine Funktion get_data(). So können wir die Funktion bequem in unserem gesamten Projekt verwenden ( → und vermeiden einen doppelten Code).

1import os
2import requests
3from dotenv import load_dotenv
4class RequestHandler:
5    load_dotenv()
6    url: str = os.environ.get("BASE_URL")
7    def get_data(self, endpoint: str):
8        response = requests.get(self.url + endpoint,
9                                headers={
10                                    "Authorization": "Bearer "+os.environ.get("API_KEY")
11                                })
12        return response.json()

Als nächstes wollen wir ein Modell für unsere Marktdaten erstellen und eine Klasse dafür anlegen. Nennen wir die Datei MarketData.py. Mit der Funktion get_response können wir einen bestimmten Endpunkt in die Funktion einbauen, um die gewünschten Daten zu erhalten.

1from dotenv import load_dotenv
2from helper import RequestHandler
3class MarketData(RequestHandler):
4    def get_response(self, endpoint):
5        load_dotenv()
6        endpoint = endpoint
7        response = self.get_data(endpoint)
8        return response

Die Klasse ist außerdem hilfreich für unsere main.py Datei, die wir als nächstes bearbeiten werden. Darin können wir die Klasse Marktdaten mit importieren:

1from models.MarketData import MarketData

Anschließend können wir eine Reihe von Beispielfunktionen definieren, um zu zeigen, wie unsere Endpunkte funktionieren.

Trading Venues - Handelsplätze

Wir können z.B. eine Funktion get_venues() definieren, um alle auf lemon.markets verfügbaren Handelsplätze abzurufen. Indem wir den Variable-Endpunkt definieren, können wir festlegen, was zu unserer Basis-URL hinzugefügt wird. Wenn wir einen bestimmten Handelsplatz abrufen wollen, können wir ?mic={mic} zum Endpunkt hinzufügen und somit auf unsere Environment Variable MIC zugreifen.

Spiel ruhig ein wenig damit herum und beobachte, wie die API auf Deine geänderten Request-URLs reagiert. In unserer Dokumentation findest Du spezifische Informationen zum /venues/ Endpunkt.

1def get_venues():
2    endpoint = f'venues/'
3    response = MarketData().get_response(endpoint)
4    print(response)

Instruments

Unsere Marktdaten API bieten auch die Möglichkeit, nach verschiedenen Wertpapieren zu suchen und zu filtern. Nach einem ähnlichen Konzept wie oben definieren wir den Endpunkt, der zur Basis-URL hinzugefügt wird.

1def get_instruments():
2    endpoint = f'instruments/'
3    response = MarketData().get_response(endpoint)
4    print(response)

Es gibt eine Reihe von Query-Parametern, die an den Endpunkt /instruments/ angehängt werden können, wie beispielsweise:

  • ?isin → Rufe ein bestimmtes Wertpapier ab, was durch seine ISIN  identifiziert wird
  • ?search → mit diesem Query-Parameter können wir z.B. nach ISIN, WKN oder Titel suchen
  • ?tradable → wir können nach Wertpapieren filtern, die aktuell handelbar sind

Auch hier findest Du in unserer Dokumentation eine vollständige Liste der Query-Parameter für den Endpunkt /instruments/.

Quotes

Über den Endpunkt /quotes/ kannst Du auf Quotes zugreifen. Quotes können für Deine Trading Strategie hilfreich sein, da Du Informationen über Preis und Handelsvolumen eines bestimmten Wertpapiers erhälst. Da Kurse immer für eine bestimmte ISIN zurückgegeben werden, ist dieser Query-Parameter obligatorisch, was zu der folgenden "minimalen" Request-URL mit der ISIN für Coinbase führt:

1def get_quotes():
2    endpoint = f'quotes/?isin=US19260Q1076'
3    response = MarketData().get_response(endpoint)
4    print(response)

Du kannst aber auch zusätzliche Query-Parameter hinzufügen, z. B. ?decimals, einen booleschen Wert, mit dem Du entscheiden kannst, ob die Zahlen in der API-Response entweder als Dezimal- oder als ganze Zahl zurückgegeben werden. In ähnlicher Weise kannst Du auch das Datum in Deinem bevorzugten Format festlegen (?epoch=true für UNIX Timestamp oder ?epoch=false für das ISO Date). Eine vollständige Liste der Query-Parameter für den Endpunkt /quotes/ findest Du ebenfalls in unserer Dokumentation.

OHLC Data

Mit dem Endpunkt /ohlc/ kannst Du die typischen Candlestick-Daten (Open High Low Close) für bestimmte Instrumente abrufen. Hier musst Du zusätzlich {x1} an die URL anhängen, um festzulegen welche Art von OHLC-Daten Du abrufen möchtest (m1 für Daten auf Minutenbasis, h1 für Daten auf Stundenbasis, d1 für Daten auf Tagesbasis). Ähnlich wie beim Endpunkt /quotes/ ist auch hier der Query-Parameter ?isin obligatorisch. Übrigens kannst Du auch Daten für mehrere Wertpapiere abfragen, indem Du eine zweite ISIN zu den Query-Parametern hinzufügst, entweder durch ein Komma getrennt oder durch Hinzufügen einer zweiten isin={ISIN}.

1def get_ohlc():
2    endpoint = f'ohlc/d1/?isin=DE0008404005'
3    response = MarketData().get_response(endpoint)
4    print(response)

Zusätzlich hast Du die Möglichkeit, mit den Query-Parametern from und to einen Zeitbereich festzulegen, für den Du die OHLC-Daten abrufen möchtest. Du kannst entweder ein Datum in epoch oder im ISO Format angeben. Weitere Informationen über den OHLC-Endpunkt findest Du in der Dokumentation.

Trades

Schließlich hast Du auch die Möglichkeit, Trades für ein bestimmtes Wertpapier über den Endpunkt /trades/ abzurufen. Wie bei den Endpunkten /quotes/ und /ohlc/ ist die Angabe einer ISIN als Query-Parameter obligatorisch, da die API frühere Trades für ein bestimmtes Wertpapier zurückgibt. Guck Dir dieses Beispiel für einen einfachen Request an.

1def get_trades():
2    endpoint = f'trades/?isin=US19260Q1076'
3    response = MarketData().get_response(endpoint)
4    print(response)

Um Deinen Request zu spezifizieren, z.B. um die Trades für mehrere Wertpapiere in einem Zahlen- und Datumsformat Deiner Wahl abzurufen, findest Du in der Dokumentation weitere Informationen zu den Query-Parametern des /trades/ Endpunkts.

Denkbare Ergänzungen

Wir haben versucht, Dir einen komprimierten Überblick über unsere Marktdaten-API zu verschaffen. Wenn man von Marktdaten spricht, denkt man eigentlich fast automatisch an Echtzeitdaten. Wir haben diese Funktion nicht einfach vergessen, sondern brauchen noch etwas Zeit, bis wir sie Dir anbieten können. Im Moment hat für uns der Aufbau eines stabilen und skalierbaren Services klare Priorität, weshalb wir verschiedene Projekte nacheinander in Angriff nehmen, um "alles richtig zu machen". Wir werden Dich natürlich sofort informieren, wenn wir einen stabilen Echtzeit-Marktdaten Service haben. Um auf dem Laufenden zu bleiben: Melde Dich jetzt bei lemon.markets an und werde Mitglied unserer Slack Community.

Während wir Dir über unsere API "rohe" Marktdaten zur Verfügung stellen, gibt es viele Möglichkeiten, die Daten zu nutzen, um verschiedene Performance-Indikatoren zu berechnen, die Dir bei Deinen Anlageentscheidungen helfen können. Schau Dir einen unserer Artikel an, der 10 Ressourcen für den Einstieg in den automatisierten Handel beschreibt.

Und wenn Dir noch etwas fehlt: Lass es uns wissen. Wir glauben, dass lemon.markets nie "fertig" sein wird und wir versuchen, das Feedback und die Anregungen unser Nutzer:innen so gut wie möglich zu integrieren.

Takeaways

Wir hoffen, dass Du ein gutes Verständnis für unsere Marktdaten-API bekommen hast. Lass uns unsere wichtigsten Erkenntnisse nochmal zusammenfassen:

  • Die Marktdaten-API ist ein separates Produkt innerhalb des lemon.markets Universums
  • Sie besteht aus 5 verschiedenen Haupt-Endpunkten:
  1. /venues/
  2. /instruments/
  3. /quotes/
  4. /ohlc/{x1}
  5. /trades/
  • Du kannst Deine Requests für jeden Endpunkt spezifizieren, indem Du Query-Parameter verwendest

Wir sind sehr gespannt darauf, all Deine Trading-Projekte bald live zu sehen. Wir hoffen, dass die Marktdaten-API Dir dabei helfen wird, bessere Anlageentscheidungen zu treffen. Wenn Du Inspiration für ein Projekt suchst: Schau Dir unsere anderen Blogposts an, in denen wir verschiedene Use-Cases und Ideen vorstellen. Wenn Du daran interessiert bist, mit Deinem eigenen Projekt in unserem Blog vorgestellt zu werden, sende uns einfach eine E-Mail an [email protected] und wir melden uns bei Dir 🙂.

Ich freue mich darauf, Dich bald auf lemon.markets zu sehen.

Marius🍋

Das könnte Dich auch interessieren

Die lemon.markets Trading API verstehen

blog photo

lemon.markets wurde aus dem Mangel an europäischen Brokern mit einer stabilen, zuverlässigen API geboren. Wir haben unsere Trading API für Entwickler:innen gebaut, sodass Du fast jedes erdenkliche Brokerage-Produkt damit bauen kannst. Lies weiter, um mehr über die verschiedenen Endpunkte zu erfahren.

Trading Terminologie, die Du als Anfänger:in kennen solltest

blog photo

Das Trading-Universum ist bekannt für seine ganz eigene Sprache - was ist überhaupt der Unterschied zwischen einem "Bärenmarkt" und einem "Bullenmarkt"? Und warum werden Finanzinstrumente immer mit zwei Preisen aufgeführt? Wenn Du gerade erst mit dem Trading anfängst oder eine kurze Zusammenfassung benötigst, lies weiter, um die Fachbegriffe für Anfänger:innen aufzufrischen. Du wirst im Handumdrehen ein Expert:in sein!

Trading basierend auf Nachrichten: Eine Sentiment Strategie mit der lemon.markets API

blog photo

Wenn Du jemals darüber nachgedacht hast Deine Trading Entscheidungen basierend auf den Nachrichten zu treffen, dann weißt Du wahrscheinlich auch welcher Zeitaufwand mit dieser Strategie verbunden ist. Was wäre also, wenn Du den Prozess automatisieren könntest? Lies weiter, um zu erfahren wie Du einen Sentiment-Analyse Bot einrichtest, der für Dich basierend auf Nachrichtenmeldungen handelt.

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