Historische Kurse von onvista nicht mehr lesbar

Menü “Hilfe”…

P.S. Nachstehend meine Server Response zu deiner URL:

{
   "expires":1699083794273,
   "entityType":"FUND",
   "entityValue":"179881079",
   "market":{
      "name":"Frankfurt",
      "codeMarket":"_FRA",
      "nameExchange":"Frankfurt",
      "codeExchange":"FRA",
      "idNotation":305692817,
      "isoCountry":"DE"
   },
   "idInstrument":179881079,
   "idNotation":305692817,
   "isoCurrency":"EUR",
   "unitType":"STK",
   "datetimeStartAvailableHistory":"2020-09-11T00:00:00.000+00:00",
   "datetimeEndAvailableHistory":"2023-11-03T23:59:59.000+00:00",
   "idTradingSchedule":66,
   "datetimeLast":[
      1696334400,
      1696420800,
      1696507200,
      1696593600,
      1696852800,
      1696939200,
      1697025600,
      1697112000,
      1697198400,
      1697457600,
      1697544000,
      1697630400,
      1697716800,
      1697803200,
      1698062400,
      1698148800,
      1698235200,
      1698321600,
      1698408000,
      1698667200,
      1698753600,
      1698840000,
      1698926400,
      1699012800
   ],
   "first":[
      149.22,
      146.02,
      147.9,
      147.44,
      148.92,
      150.28,
      150.82,
      151.72,
      152.04,
      150.54,
      151.72,
      150.3,
      149.1,
      146.72,
      145.5,
      145.0,
      145.94,
      142.66,
      142.04,
      142.44,
      141.8,
      143.6,
      146.96,
      147.64
   ],
   "last":[
      148.4,
      147.46,
      147.6,
      146.28,
      148.98,
      150.1,
      151.04,
      152.12,
      150.5,
      150.62,
      150.64,
      150.4,
      148.72,
      147.22,
      145.06,
      146.32,
      146.34,
      143.32,
      142.58,
      142.52,
      141.8,
      143.42,
      148.06,
      147.38
   ],
   "high":[
      149.7,
      147.46,
      147.96,
      147.44,
      149.0,
      150.32,
      151.04,
      152.12,
      152.06,
      150.64,
      151.78,
      150.4,
      149.1,
      147.22,
      145.5,
      146.32,
      146.34,
      143.32,
      142.58,
      142.9,
      141.8,
      143.6,
      148.06,
      147.72
   ],
   "low":[
      148.4,
      146.02,
      147.6,
      146.28,
      148.68,
      150.1,
      150.82,
      151.72,
      150.5,
      150.2,
      150.64,
      150.16,
      148.44,
      146.72,
      143.9,
      144.88,
      145.94,
      142.66,
      141.7,
      142.44,
      141.8,
      143.42,
      146.92,
      147.38
   ],
   "volume":[
      67.0,
      0.0,
      114.0,
      0.0,
      5.0,
      0.0,
      0.0,
      0.0,
      36.0,
      42.0,
      53.0,
      0.0,
      0.0,
      0.0,
      16.0,
      20.0,
      0.0,
      0.0,
      0.0,
      3.0,
      0.0,
      0.0,
      39.0,
      0.0
   ],
   "numberPrices":[
      10,
      9,
      7,
      8,
      11,
      10,
      7,
      9,
      13,
      10,
      15,
      10,
      6,
      10,
      12,
      7,
      7,
      8,
      7,
      6,
      3,
      5,
      8,
      9
   ],
   "displayUnit":"EUR"
}

Hallo Rafa,

danke Dir. Komisch dass bei Dir die Ergebnisse sofort kommen, hast Du eine Idee, was bei mir fehlt?

Danke Dir!

Ich habe heute erfolgreich die Kurse mit Onvista über folgende URL importieren können:

https://api.onvista.de/api/v1/instruments/STOCK/{TICKER}/eod_history?idNotation=244494466&startDate={TODAY:yyyy-MM-dd:-P1M}&range=M1

TICKER ist dabei das Onvista interne Symbol für eine Aktie, z.B. 81490 für BMW. 244494466 ist der Lang&Schwarz handelsplatz, der z.B. bei TradeRepublic verwendet wird.

Nun schein diese URL jedoch ein Problem zu haben. Wenn ich nur das TICKER Variable ändere. z.B. einmal von 81490 auf 92472 (NVIDIA) bekomme ich trotzdem noch die BMW Kurse. Das passiert auch wenn ich diese auf im Terminal mittels curl abrufe.

Hat da irgendjemand eine Lösung für? Kann man einen anderen Endpunkt anstelle von eod_history verwenden? Ich habe z.B. noch folgende gefunden (weiß aber nicht genau was diese genau liefern):

  • chart_history
  • times_and_sales

Danke im Voraus

Du verstehst das falsch. 244494466 ist BMW auf L&S; der andere Wert wird letztlich ignoriert.

1 Like

Ahhhhhh, vielen vielen Dank :pray: Gibt es nun noch einen einfachen Weg, diese ID heraus zu bekommen oder muss man wirklich immer über die Google Chrome Console gehen und das Crawlen :sweat_smile:

Auf onvista.de nach der entsprechenden Aktie suchen (per Name, WKN, ISIN, …) und auf deren Seite gehen. Dort dann 1x den gewünschten Handelsplatz auswählen (Menü über dem aktuellen Kurs). Das lädt die Seite neu und in der Adressleiste steht dann sowas wie https://www.onvista.de/aktien/Microsoft-Aktie-US5949181045?notation=244494338. Und hinter notation= kannst du einfach die ID entnehmen.

1 Like

Okay vielen Dank :pray:

Falls es noch jemanden interessiert, hier die nerdige Variante über die macOS Konsole:

curl -s -L --max-redirs 1 "https://www.onvista.de/aktien/DE0005190003" | pup | grep idNotation | jq '.props.pageProps.data.snapshot.quoteList.list[].market | select(.name == "LS Exchange") | .idNotation'
1 Like

Hallo, ich bin leider noch nicht weitergekommen. Die Kurse werden nicht mehr automatisch aktualisiert.

Im Fehlerprotokoll fiel mir auf, dass auch die Frage nach einem Update nicht klappt. Wenn meine Wechselkurse nicht aktuell wären, würde sagen, dass PP nicht auf das Internet zugreifen kann.

Hat jemand eine Idee?

Jetzt hat es sich geklärt. Ich habe PP neu installiert, aber ohne Resultat. Das Problem war Little Snitch, das ich deinstalliert hatte, aber dennoch Teile von PP geblockt hat.

Hallo zusammen,

ich nutze Portfolio Performance schon seit einer Weile. Kürzlich habe ich einige historische Buchungen und Aktien eingepflegt. Hier mal meine Dokumentation des Vorgehens am Beispiel von BMW:

  1. Per ISIN oder Namen auf Onvista die entsprechende Seite suchen.

  2. Kurslieferant wählen: Falls ich einen spezifischen Handelsplatz möchte, oder eine andere Handelswährung, dann gibt es über dem fett gedruckten aktuellen Kurs auf das (klein Fett) dargestellte Dropdown-Menü klicken was im Fall von BMW standardmäßig “Xetra (EUR)” ist. Dort kann ich schauen welche Börsen und in welcher Währung Kurse vorhanden sind. → Das Gewünschte auswählen.

  3. An den JSON-Pfad für Kurse kommen (ich nutze Opera, in anderen Browsern sollte das Vorgehen aber ähnlich sein): Rechtsklick auf eine freie Stelle im Browser und im Menü “Element untersuchen” auswählen. Dann bekommt man eine Nerdy-Ansicht wo alle Elemente der Webseite aufgeschlüsselt werden. → Dort ganz oben auf den Tab “Network” wechseln.

    1. Diese Ansicht jetzt geöffnet lassen, und auf der Webseite unter dem Chart den Zeitraum “max” wählen. Dadurch lädt die Webseite die Kurse neu und in der “Element untersuchen → Network” Ansicht erscheint ein neuer Eintrag der mit “chart_history?idNotation=…” beginnt.
      Der Vorteil von “chart_history” im Gegensatz zu “eod_history” scheint zu sein, dass “eod_history” ein Anfangsdatum benötigt, während “chart_history” einfach auf den maximal vorhandenen Zeitraum gestellt werden kann.

    2. Also den letzten “chart_history”-Eintrag auswählen, und unter “Headers” die “Request URL” kopieren. Für “BMW” und “Xetra (EUR)” steht dort bei mir: https://api.onvista.de/api/v1/instruments/FUND/100871/chart_history?idNotation=3225150&range=MAX&resolution=1W&withEarnings=true
      Hier sieht man schön, dass “range=MAX” benutzt wird, im Gegensatz zu “eod_history” welches immer ein konkretes Startdatum benötigt.

    3. Diese URL müssen wir jetzt noch modifizieren. Immerhin möchte ich die maximale Genauigkeit und ändern daher “resolution=1W” zu “resolution=1D”, was das Intervall der Daten von wöchentlich zu täglich umstellet.

    4. Ich bin mir nicht sicher, was die Option “withEarnings=true” genau tut. Ich kann nur vermuten, dass es was mit der Einberechnung von Dividenden zu tun hat. Für manche Wertpapier macht es keinen Unterschied, für manche muss ich dies auf “withEarnings=false” umstellen um die Kurse meiner Trades zu treffen.

  4. Einfügen in Portfolio Performance: Das Wertpapier editieren und unter “Historische Kurse” “JSON” als Datenlieferant auswählen und die Felder wie bereits in einem früheren Post belegen:

Kurs URL: <die unter 3 extrahierte und ggf. manipulierte URL>
Pfad zum Datum: $.datetimeLast[*]
Pfad zum Kurs: $.last[*]
Optional
Pfad zum Tagestief: $.low[*]
Pfad zum Tageshoch: $.high[*]
Pfad zum Volumen: $.volume[*]

Hinweise zu 2:
Mir persönlich ist der exakt korrekte Handelsplatz weniger wichtig, gerade für ältere nachträglich eingepflegte Wertpapiere und Trades achte ich eher drauf, welche Datenquelle mir die längste Historie an Kursen liefert. Das kann je nach Datenquelle variieren. Einfach auf der Webseite verschiedene Handelsplätze wählen und im Chart jeweils auf “max” stellen um zu schauen, welcher Zeitraum abgedeckt wird.

Ich hoffe mit dieser Zusammenfassung kann ich ein paar Leuten helfen.

PS: Kann ich irgendwie helfen dies als automatische Datenquelle in Portfolio Performance zu intergrieren? Ich hatte irgendwo mal Skripte getestet, und es schien als wäre es möglich programmatisch an die entsprechende URL zu kommen. Müsste ich aber wieder rauskramen.

2 Likes

Toll wenn sich jemand mit seinem ersten Beitrag gleich eigene Gedanken macht!

Das sehe ich eher als Nachteil. Ist zwar schön beim ersten holen der Daten, aber bei allen weiteren Abfragen der Kursen holst Du immer wieder Daten die Du schon hast. Damit belastest Du den Anbieter unnötig. Wenn das jetzt hunderte, tausende, zehntausende Leute nachmachen, wird Onvista seine api irgendwann vernageln, und das wäre schade.

Deshalb ist besser mit

eod_history?idNotation=123456789&startDate={TODAY:yyyy-MM-dd:-P1M}&range=M1

die Daten zu holen.

Soweit ich es verstanden habe sind automatische Datenquellen aus rechtlichen Gründen schwierig, es ist besser wenn sich jeder das selbst einstellt.

1 Like

Du meinst übrigens Portfolio Performance, wenn du Portfolio Report schreibst.

Natürlich, habs korrigiert.

Danke für den Hinweis, das kann ich absolut nachvollziehen.

Für den Erstimport von neuen Wertpapieren finde ich es weiterhin nützlich, weil ich so nicht in mehreren Intervallen die historischen Daten laden muss. (Bisher hatte ich das gemacht, indem ich mehrfach mit manuell geändertem “startDate” und “eod_history” die Kurse geladen hatte.

Ich hab zum Aktualisierungsintervall jetzt auf die schnelle keine genauen Infos gefunden, außer eine FAQ-Antwort von 2016. Dort heißt es aktuelle Kurse werden alle 10 min aktualisiert und historische Kurse theoretisch alle 24 h (wobei damals da wohl noch ein Bug war).

Ich würde nämlich gerne die URLS behalten, da es doch einige Klicks erfordert diese für jedes Wertpapier auszulesen.

Unter der Annahme, dass die historischen Kurse nicht automatisch aktualisiert werden, könnte ich mir vorstellen “chart_history?rangeMAX” als Einstellung für historische Kurse beizubehalten und unter aktuelle Kurse “eod_history” mit Macro zu verwenden. Wäre das ein gangbarer Weg um den Traffic zu minimieren?
Das würde allerdings vorraussetzen, dass die historischen Kurse nicht automatisiert geladen werden…

Richtig cool wäre es ja, wenn es ein Macro gäbe, welches schaut wann der letzte historische Kurs vorhanden ist und dann wirklich nur noch diese abruft: “startDate={NEW}”. Bisher kenn ich nur das “-P1M” intervall.

Das würde voraussetzen das die Internetseite dein startDate unterstützen. Jedoch macht es keinen Sinn für 10 Jahr regelmäßig zu laden, wenn du einmal pro Woche die Kurse aktualisierst.

Warum nimmst Du das an?

Liefert der Response denn aktuelle Daten? eod_history lässt dies nicht vermuten.

Es gibt so etwas in der Art, aber für Onvista und seine „ab“-Daten taugt es bisher nur mäßig.

Erstmal vorweg: Toll, dass das hier eine so aktive Community ist. Ich hätte mit so vielen schnellen Antworten nicht gerechnet.

Absolut! Darauf hatte ja auch @ProgFriese bereits hingewiesen. Danke.

Ok ok. Ich hätte vielleicht meine Art der Nutzung etwas konkretisieren sollen. Die kann ja von Nutzer zu Nutzer unterschiedlich sein. Mein Fehler!

Meine Nutzung
Ich verwende Portfolio Performance in eher unregelmäßigen Abständen. Alle paar Wochen oder Monate ergänze ich die seitdem entstandenen Transaktionen. Ich brauche es nicht um Minutenaktuelle Kurse zu bekommen, sondern für längerfristige Überwachung meiner Depots.

Daher interpretiere ich “Historische Kurse” und “Aktuelle Kurse” folgendermaßen (ob das so bezweckt ist, könnt ihr wahrscheinlich besser beurteilen):

  • Historische Kurse: Datenlieferant für das erstmalige Einrichten neuer Wertpapiere mit maximal möglicher Zeitspanne. Alternativ auch als “Backup” der DatenlieferungsURL falls ich mal bei Splits oder ähnlichen Manipulationen von Kursen etwas verbocke. Automatischer Abruf für mich nicht notwendig. Könnte ich manuell auslösen.
  • Aktuelle Kurse: Laden alle Kurse die angefallen sind seitdem ich Portfolio Performance das letzte mal geöffnet hatte. Dies kann bei mir Wochen oder Monate her sein. Da ich keine minutengenauen Informationen brauche, würde mir hier ein einmaliger Abruf beim Start des Programms ausreichen.

Meine “Annahme” zu historischen Kursen war dementspreichend eine Wunschvorstellung. Klärt mich gerne auf, wie diese beiden Menüeigenträge eigentlich gedacht sind!

“eod_history” ist für meine Art der Nutzung wie oben beschrieben aktuell genug :slight_smile:

Hast du da einen Link, was du genau meinst? Ich kenne bisher nur die Macros aus dem Handbuch und auch im Code-Ordner sehe ich nur die bereits dokumentierten Macros.

Wenn ich das Handbuch richtig verstehe, würde eod_history?startDate={DATE:yyyy-MM-dd} vom letzten Kursdatum aus starten und bis zum aktuellen Tag für jeden Tag eine URL generieren und diese abfragen, oder? Das wäre im Fall von Onvista aber nicht notwendig, da der Abruf für einen Zeitbereich möglich ist.

Cool wäre als (im Sinne des Traffic minimieren)
eod_history?startDate={DATE:yyyy-MM-dd:ONCE}
welches dann nur eine einzelnen Aufruf zum aktualisieren eines Wertpapiers bräuchte, ohne davon Abhängig zu sein wann Portfolio Report zuletzt geöffnet wurde.

Bei der Verwendung von
eod_history?startDate={TODAY:yyyy-MM-dd:-P1M}&range=M1
Würden mir ggf. Daten nicht vollständig abgerufen, wenn die letzte Aktualisierung länger als einen Monat her ist.

Der aktuelle Kurs (Singular) ist genau ein einziger Kurs. Die Idee ist eigentlich, dass die historischen Kurse Tagesschlusskurse sind und der aktuelle Kurs eben der jüngste Kurs im Tagesverlauf. Die Kursquelle für den aktuellen Kurs hat genau Null Auswirkung auf die dauerhaft gespeicherten Kurse.

Ich benutze den aktuellen Kurs überhaupt nicht. Überall ist „kein automatischer Download“ eingestellt (was auch die sinnvollere Voreinstellung wäre).

eod_history?startDate={DATE:yyyy-MM-01}

2 Likes

Ich hatte auch damit gestartet deinen Aufruf zu Nutzen:

eod_history?startDate={DATE:yyyy-MM-01}

Der Nachteil den ich sehe:
Die onvista API scheint immer die Werte von 20 Börsen-Öffnungstagen ab Start-Datum zu liefern. Da ein Monat meist mehr als 20 solche Tage hat, kommt es ggf. zu Lücken im Kursverlauf gegen Monatsende.

Es wäre cool, bei dem “DATE” Makro ein Interval mitzugeben, in dem die URLs generiert werden.

Also: Anstelle einer URL Pro Tag und dem Vermeiden doppelter URLs z.B. eine URL Pro Woche oder pro 4 Wochen. Natürlich weiterhin unter vermeidung doppelter URLs.

Edit: Hab’ mich vertan. Es sind doch komplette Monate.

Super, vielen Dank für die Anleitung. Leider kommt man um die etwas nerdige Suche nach idNotation nicht herum, aber

  1. ich habe mir eine einfache Excel-Tabelle gebaut, in die kopiert man den genannten Link mit der idNotation und dann wird der gewünschte api-Link mit entsprechendem Zeitfenster zusammengebastelt. Ich habe da zwei Varianten angelegt, eine mit “range=Max” und eine mit “range=M1”.
    Und:
  2. diesen kopiert man in das Feld “Symbol” und trägt in der Maske “Historische Kurse” im Feld “Kurs URL” nur “{TICKER}” ein.
    Beim Neuanlegen eines Papieres verwende ich die MAX-Version um alle Kurse abzuholen, dann ersetzte ich das durch die M1-Version für den laufenden Betrieb.
    Natürlich darf die URL im Symbol-Feld keine geschweiften Klammern enthalten, weil es nur eine Ersetzung geben kann.