Finanzen: Aktienkurse per Go-Programm überwachen
Die Kursentwicklung wichtiger Aktien verfolge ich mit einer Anwendung, die aktuelle Kurse mittels API einholt und in einer Terminaloberfläche anzeigt.
Laut US-Vizepräsidentin Kamala Harris ginge der Mehrheit der Amerikaner das Geld aus, wenn nur 400 US-Dollar unerwartete Kosten anfielen. Seit ich das weiß, ist es mir ein Anliegen, jeden Tag darüber Bescheid zu wissen, ob ich noch genügend Reserven auf der hohen Kante habe. Dazu gehört es, die aktuelle Kursentwicklung der Aktien bekannter Unternehmen zu verfolgen. Zwar gibt es zuhauf Apps mit Portfolio-Einstellungen, die eine Reihe ausgewählter Wertpapiere beobachten. Ich nutze aber lieber in Go geschriebene Kommandozeilenwerkzeuge, die im Terminal laufen.
- Finanzen: Aktienkurse per Go-Programm überwachen
- Wühlen in JSON
- FANG und mehr
- Nächste Fahrt rückwärts!
Das Bild unten zeigt die Ausgabe des Go-Programms Pofo – das Kürzel steht für Portfolio. In sechs Kacheln veranschaulicht jeweils eine Balkengrafik den Kursverlauf der Aktien der Firmen Apple, Netflix, Meta, Amazon, Tesla und Google während der vorherigen sechs Wochen. Die aktuellen und historischen Kursdaten bezieht das Programm kurz nach dem Aufruf in einem Sekundenbruchteil vom Datendealer Twelvedata. Der bietet für Bastler einen kostenlosen Basic Plan an, der bis zu acht Requests pro Minute und bis zu 800 am Tag erlaubt, bevor das Rate Limiting greift.
Das Programm holt die Schlusskurse in US-Dollar der sechs überwachten Aktien an der New Yorker Börse für die vergangenen 45 Werktage ein. Das erledigt es in einer einzigen Anfrage an den Server, in einem gewaltigen Rutsch. Für die hypernervöse Netflix-Aktie zeigt das Bild unten die Kurse in der Zeit zwischen dem 16. Juni und dem 31. Juli 2023. In dieser Periode schwankte der Wert dieser Aktie wild zwischen 413,17 und 477,59 US-Dollar. In einer Grafik der Absolutwerte könnte man trotzdem kaum Schwankungen erkennen, denn schließlich macht die Differenz nur rund 15 Prozent des Gesamtwerts aus.
Die wilden Kurssprünge, die typische Chart-Apps zeigen (siehe Bild unten), entsprechen daher nicht den Absolutwerten – sonst kämen sehr statische Blöcke heraus, die niemanden vom Hocker hauen würden. Daher transformieren typische Chartanwendungen die Schwankungen in relative Werte, so dass wenige US-Dollars gleich die gesamte Charthöhe ausmachen.
Deutsche Kursdaten sind teuer
Twelvedata gibt die aktuellen Kursdaten ausgewählter Aktien nur dann heraus, wenn man sich dort mittels E-Mail-Adresse registriert. Im Erfolgsfall erhält man einen API-Key (Abbildung 4), der jedem abgesetzten Request beiliegen muss.
Der kostenlose Test-Account deckt den US-Aktienmarkt ab, eine Kreditkarte ist nur für kostenpflichtige Endpunkte erforderlich.
Möchte man Kurswerte des deutschen Aktienmarkts abfragen, etwa den Stand der Volkswagen-Aktie am Xetra-Markt (Symbol: VOW3:XETR), fällt eine nicht unerhebliche Gebühr an.
Seit Yahoo vor mehr als fünf Jahren seine Finanz-API eingestampft hat, steht es schlecht um kostenlose Zugriffe auf deutsche Kurswerte. Das betrifft nicht nur Twelvedata, sondern auch alle von mir untersuchten APIs anderer Anbieter.
Listing 1 (siehe unten) zeigt den Go-Code, der die historischen Kurse der in symbols hinterlegten, kommaseparierten Aktienkürzel vom Kurshändler Twelvedata abholt. Die Funktion fetchQ() ab Zeile 7 gibt im Erfolgsfall eine Hashmap zurück, die unter dem jeweiligen Tickersymbol (zum Beispiel aapl für Apple) einen Array-Slice von dateVal-Strukturen führt. Sie ordnen jeweils ein Datum (zum Beispiel 10-01-2023) einem Kurs zu (zum Beispiel 123.45678).
Listing 1 quote.go package main import ( "io/ioutil" "net/http" "net/url" ) func fetchQ(symbols string) (map[string][]dateVal, error) { u := url.URL{ Scheme: "https", Host: "api.twelvedata.com", Path: "time_series", } q := u.Query() q.Set("symbol", symbols) q.Set("interval", "1day") q.Set("apikey", "a1723ab98fa90ac307a0c5bf332d451c") u.RawQuery = q.Encode() res := map[string][]dateVal{} resp, err := http.Get(u.String()) if err != nil { return res, err } body, err := ioutil.ReadAll(resp.Body) if err != nil { return res, err } return parse(string(body)), nil }
Dazu baut der Code eine Anfrage an die Webseite von Twelvedata zusammen, der an die Basis-URL die Parameter symbol (die gewünschten Tickersymbole) und interval (Zeitabstände, im Beispiel ein Tag) sowie den vorher eingeholten API-Key anhängt.
Zeile 19 holt mit Get() die Antwort aus dem Netz. Die in Zeile 27 aufgerufene Funktion parse() schnappt sich den zurückkommenden JSON-Salat (siehe Bild oben) und verpackt das Ganze in die bereits zuvor erwähnte Go-Datenstruktur einer verschachtelten Hashmap.
Wühlen in JSON |
sieht halt scheiße aus und ist nicht gut lesbar - aber you do you.
Wenn du einen breit gestreuten ETF nimmst, spricht nichts gegen alles auf eine...
Danke!
Ich glaube auch dass es eher ein Showcase Bastler Projekt ist und nicht den Anspruch hat...