Jump to content
FranzPischels

Finance API gesucht

Recommended Posts

FranzPischels
Posted

Hallo zusammen,

 

ich suche jetzt schon viele Stunden, aber finde absolut nichts was passt.

Ich benötige eine Finance API (oder andere Quelle...) wo ich per Excel Makro oder Power Shell einfach mal alle Aktien (also ISIN oder WKN) abfragen kann, welche eine Dividende zahlen.

 

Ich kann mit Alphavantage.co wenn ich einen bestimmten Ticker eingebe, zwar Live Kurse zu diesem einen Unternehmen abfragen, aber wirklich nur zu diesem einen Unternehmen.

Es muss doch etwas einfaches geben, womit ich erstmal alle Unternehmen abfrage, wo die Dividende > 0 ist.

 

Finde aber leider auch nach langem suchen nichts. Falls einer ne Idee hat, würde ich mich sehr freuen!

 

vielen Dank

Franz

Share this post


Link to post
TWFS
Posted

Moin Franz,

 

zu Alphavantage gibt es ein Excel-PlugIn, damit sollte es einfacher sein:

https://www.alphavantage.co/spreadsheets/#o365-guide

 

Alternativ kann ich Google Sheets empfehlen, die Funktion lautet GOOGLEFINANCE().

 

Solltest du erwägen, mit einer Sprache wie Python zu arbeiten, ist meine Empfehlung stockdio.com. Die API ist sehr einfach und wenn man sich an ein paar Limitationen hält kostenlos. So ist die Anzahl der API Requests pro Monat begrenzt. Dies lässt sich aber einfach umgehen, indem man alle Anfragen pro Börse bündelt. Hier habe ich ein kleines Python-Script dazu hinterlegt:

 

Viele Grüße,

Stefan.

Share this post


Link to post
FranzPischels
Posted

Hallo TWFS,

 

vielen Dank für deine Information. Von den genannten Möglichkeiten scheint mir GoogleFinance() die am ehesten umsetzbare. Dort kann man laut Internet Videos wunderbar Dividenden Infos abstauben, allerdings mit einem Extra Plugin namens WiseSheets.

 

Das habt z.B. folgende Befehle:

=WISE("AMZN","Revenue",2019,"Q3")

=WISE("AAPL","ROE","TTM")

 

Egal welchen Befehl ich auch eingebe (dieser kommt copy & paste aus der Doku) kommt immer "Fehler beim Parsen".  Wenn ich mir allerdings in einer Erweiterung Get Data z.b. die Balance Sheets zu Apple zusammenklicke funktioniert alles wunderbar.

Das Problem sind also anscheinend die Kommandos.

 

Aber die KOmmandos sind doch aus der Doku??? Ich bin echt ratlos...

Hat sich gelöst, man musste Komma Semikolon tauschen, wahrscheinlich weil das US lastig ist.

Man musste Komma Semikolon tauschen, wg. US Software GER Software...

Share this post


Link to post
FranzPischels
Posted

OK, das Wisesheets ist halt kostenpflichtig. Geht die einfache Dividendenabfrage auch nur mit GoogleFinance() ?

Share this post


Link to post
albr
Posted

warum nutzt du nicht yahoo finance ?

 

 

Share this post


Link to post
FranzPischels
Posted

HI,

 

Yahoo Finance war noch nicht in meiner Testliste, hatte nur hier und da mal gelesen das die angeblich alles umgebaut hätten und Skripte nicht mehr funktonieren würden....

 

Kann jemand das hier empfehlen?

https://github.com/ranaroussi/yfinance

 

Oder gibt es sonst schon ein fertiges Skript bei euch für YF? (kann es gerne umbauen, möchte aber nicht bei 0 starten, wenn es geht...)

 

Danke euch!!!!

Share this post


Link to post
Oli Garch
Posted

Habe auch lange gedacht, dass bei Yahoo nichts mehr geht. Inzwischen habe ich noch zwei URLs identifiziert, die Daten im JSON-Format zurückgeben. Ein VBA-Script, der eine solche verwendet, sieht z. B. so aus:

 

Public Function yFin(Ticker As String, myKey As String) As Double
Dim strResponse As String
Dim XML As Object
On Error GoTo Fehler
Set XML = CreateObject("MSXML2.ServerXMLHTTP")
    XML.Open "GET", "https://query1.finance.yahoo.com/v6/finance/options/" & Ticker, myKey, False
XML.send
strResponse = XML.ResponseText
strResponse = Split(strResponse, myKey)(1)
strResponse = Mid(strResponse, 3, 20)
strResponse = Left(strResponse, InStr(strResponse, ",") - 1)
strResponse = Replace(strResponse, ".", ",")
yFin = CDbl(strResponse)
Set XML = Nothing
Exit Function
Fehler:
    yFin = 0
    Set XML = Nothing
End Function

 

In der Excel-Zelle sollte dann dieses stehen:
=yFin(B3;"trailingAnnualDividendRate")
oder:
=yFin(B3;"trailingAnnualDividendYield")
in B3 das Ticker-Symbol!

Wenn du die URL aus dem Script mit einem angehängten Symbol im Browser eingibst, kannst du sehen, welche Werte noch abrufbar sind.
Noch Fragen?
 

Share this post


Link to post
FranzPischels
Posted

Hallo Oli Garch,

 

das Skript funktioniert ja wunderbar. Ich dachte echt das Yahoo Finance Geschichte wäre... Muss man für yFin übrigens keinen API haben wie bei all den anderen Anbietern?

Ich habe jetzt lediglich nur noch das Problem, das meine Excel Liste mit 85000 Ticker Symbolen anscheinend das Abfrage Limit bei Yahoo übersteigt. Evtl. kann man das Skript ja noch um den API Key erweitern, dann kann man evtl. mehr Calls machen!

 

Falls jmd ne Info hat, gerne her damit!

 

Schöne Pfingsten an alle!

Share this post


Link to post
Oli Garch
Posted

Von API-Keys bei Yahoo habe ich noch nichts gehört und Yahoo hat das ursrünglich mal umfangreiche Datenangebot fast vollständig eingestellt. Ich glaube auch, dass mein Script für deine wirklich riesige Menge an Ticker-Symbolen nicht besonders geeignet ist. Vielleicht können andere Forumsmitglieder dir weiterhelfen. Bei den Datenmengen geht das womöglich nur noch kostenpflichtig mit einer API und nicht mehr mit einem VBA-Script bei Yahoo.

Viel Erfolg

Oli

Share this post


Link to post
FranzPischels
Posted · Edited by FranzPischels
Am 18.5.2024 um 19:30 von Oli Garch:

Habe auch lange gedacht, dass bei Yahoo nichts mehr geht. Inzwischen habe ich noch zwei URLs identifiziert, die Daten im JSON-Format zurückgeben. Ein VBA-Script, der eine solche verwendet, sieht z. B. so aus:

 

Public Function yFin(Ticker As String, myKey As String) As Double
Dim strResponse As String
Dim XML As Object
On Error GoTo Fehler
Set XML = CreateObject("MSXML2.ServerXMLHTTP")
    XML.Open "GET", "https://query1.finance.yahoo.com/v6/finance/options/" & Ticker, myKey, False
XML.send
strResponse = XML.ResponseText
strResponse = Split(strResponse, myKey)(1)
strResponse = Mid(strResponse, 3, 20)
strResponse = Left(strResponse, InStr(strResponse, ",") - 1)
strResponse = Replace(strResponse, ".", ",")
yFin = CDbl(strResponse)
Set XML = Nothing
Exit Function
Fehler:
    yFin = 0
    Set XML = Nothing
End Function

 

In der Excel-Zelle sollte dann dieses stehen:
=yFin(B3;"trailingAnnualDividendRate")
oder:
=yFin(B3;"trailingAnnualDividendYield")
in B3 das Ticker-Symbol!

Wenn du die URL aus dem Script mit einem angehängten Symbol im Browser eingibst, kannst du sehen, welche Werte noch abrufbar sind.
Noch Fragen?
 

Ja, noch Fragen. Hinter welchem Wert bzw. Schalter in der API verbirgt sich das ex Dividend Datum? Das finde ich nicht, wenn ich mir die JSONs in der API mit dem Link https://query1.finance.yahoo.com/v6/finance/options/AAPL anschaue (Beispiel Apple). Das wäre aber noch cool in der Excel zu haben...

Share this post


Link to post
Oli Garch
Posted
vor 8 Stunden von FranzPischels:

Hinter welchem Wert bzw. Schalter in der API verbirgt sich das ex Dividend Datum?

Nicht so einfach:
Normalerweise haben wir hier das Key-Wort 'dividendDate'. Mit 'AAPL' funktioniert es. Leider fehlt dieser Wert bei Aktien-Symbolen von deutschen Börsenplätzen. Da kannst du vielleicht noch mit leben, aber es wird nicht einfacher. 'dividenddate' wird im UNIX-Timestamp-Format angegeben, muss also erst noch Excel-gerecht umgewandelt werden. Das geht aber alles mit einer zusätzlichen Zeile im Script:

If InStr(myKey, "dividendDate") > 0 Then strResponse = (strResponse / 86400) + 25569

Diese Zeile einfach vor Zeile :
yFin = CDbl(strResponse)
einfügen.

Jetzt wirst du es ausprobieren und wirst feststellen: " Oh Sch... das Ergebnis stimmt ja gar nicht."
Denn das Script zeigt dir als Ergebnis: '16.05.2024' und bei Yahoo auf der Übersichtsseite
https://de.finance.yahoo.com/quote/AAPL/key-statistics
steht '10. Mai 2024'.
Kommt daher, dass auf der Yahoo Übersichtsseite das Ex-Dividenddate und bei den Werten die das Script abrufen kann unter dividendDate das Paymentdate geladen wird.
das kann man schön hier vergleichen:
https://www.nasdaq.com/market-activity/stocks/aapl/dividend-history
Und das lässt sich nun mal nicht ändern.
 

Share this post


Link to post
FranzPischels
Posted

hallo Oli,

 

vielen dank, funktioniert alles genauso wie du gesagt hast. Jetzt hätte ich in der Tat nur noch eine Frage:

 

Wenn ich im Browser die Werte der API ansehe, also über Link https://query1.finance.yahoo.com/v6/finance/options/AAPL sehe ich ja, das noch viele Attribute dort theoretisch abrufbar sind. z. B. fiftyTwoWeekLow

Wieso funktioniert aber mit diesen vielen anderen Attributen nicht die Excel Abfrage, wenn ich ein =yFin(A2;"fiftyTwoWeekLow") eingebe?

 

Auf der Website bzw. API URL steht dort der Wert 164.08, Excel gibt mir nur eine 0 aus. Das ist mir nicht logisch. Vielen Dank!

 

 

Share this post


Link to post
Oli Garch
Posted
vor 39 Minuten von FranzPischels:

Wieso funktioniert aber mit diesen vielen anderen Attributen nicht die Excel Abfrage, wenn ich ein =yFin(A2;"fiftyTwoWeekLow") eingebe?

das kann ich dir schnell beantworten: schlampige Programmierung, hatte nur mit deinen Wunschdaten getestet.

Der Fehler entsteht immer dann, wenn es Schlüsselwörter mit dem gleichen Wortstamm gibt. Z. B. 'fiftyTwoWeekLow' und 'fiftyTwoWeekLowChange'. Steht dann das längere Wort oberhalb von dem gesuchten, entsteht ein Fehler, weil keine Zahl in dem vorgegebenen Bereich steht. Mit einer kleinen Änderung (Zeile eingefügt und eine Zeile geändert) hier das ganze Script mit Korrektur.

 

Public Function yFin(Ticker As String, myKey As String) As Double
Dim strResponse As String
Dim XML As Object
'On Error GoTo Fehler
Set XML = CreateObject("MSXML2.ServerXMLHTTP")
    XML.Open "GET", "https://query1.finance.yahoo.com/v6/finance/options/" & Ticker, myKey, False
XML.send
myKey = myKey + """:"
strResponse = XML.ResponseText
strResponse = Split(strResponse, myKey)(1)
strResponse = Left(strResponse, 20)
strResponse = Left(strResponse, InStr(strResponse, ",") - 1)
strResponse = Replace(strResponse, ".", ",")
If InStr(myKey, "dividendDate") > 0 Then strResponse = (strResponse / 86400) + 25569
yFin = CDbl(strResponse)
Set XML = Nothing
Exit Function
Fehler:
    yFin = 0
    Set XML = Nothing
End Function

 

Und vielen Dank für den Hinweis und deine Geduld.

Oli

 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...