Historische Kurse von VIAC

Hallo zusammen

Es gibt in der Schweiz einen Anbieter für die 3. Säule (steuerbefreite private Vorsorge) namens VIAC. Dieser Anbieter wird immer populärer und bietet diverse Portfolios an, bzw. man kann sich ein eigenes Portfolio zusammenstellen. Zur Auswahl für dieses Portfolio stehen grösstenteils Fonds der Credit Suisse, die nur institutionellen Kunden angeboten werden wie z.B. ISIN CH0037606552. D.h. man kann die nicht über die gewohnten Kanäle kaufen.

Dies führt dazu, dass die Kurse für diese Fonds nicht bei den gängigen Quellen verfügbar sind (Yahoo etc.), zumindest nicht als Tabelle/CSV o.ä.

Die einzige Quelle ist die Credit Suisse selber. Diese baut aber zwei Hürden auf:

1 - man muss auf der Webseite zuerst die Frage nach Land und Anlegertyp (privat, professionell) beantworten.

2 - Die Kurse werden zwar als HTML Tabelle angeboten aber mit dem Excel-Mimetype (wem wohl dieser Hack in den Sinn gekommen ist?). Wenn man das „Excel“ File dann öffnet, wird die HTML Tabelle importiert.

Dem Problem 1 kann man begegnen indem man den User Agent auf Curl setzt. Dann werden zumindest im Moment die Kurse ohne Frageseite geliefert (ist vielleicht für die internen Tester so eingerichtet :slight_smile: )

Das Problem 2 kann man lösen, indem man den Mimetype einfach ignoriert/akzeptiert.

FAZIT: Beide Probleme verhindern, dass man den HTMLTableQuoteFeed verwenden kann. Ich bin darum daran, einen VIACQuoteFeed zu erstellen, den ich von HTMLTableQuoteFeed ableiten würde, um die 2 Probleme zu umgehen.

FRAGE: Hat so etwas eine Chance, in den master aufgenommen zu werden? Wenn ja, würde ich das wohl ein bisschen sorgfältiger programmieren, als wenn ich es nur für eigene Zwecke mache. Wenn nein, so würde ich es wohl separat bundlen, sodass man es mitladen könnte. Ich habe im Code gesehen, dass die Quote Feeds dynamisch geladen werden.

Ich hatte übrigens schon Kontakt mit VIAC, und die sind nicht uninteressiert.Die sind noch so klein, dass man gut an die Leute rankommt. Sie haben aber immerhin 11’000 Kunden und 160 Millionen Franken verwaltetes Vermögen.

4 Likes

Der “Connect” wird per JSoup an dieser Stelle gemacht. Vielleicht kann man dem relativ einfach beibringen alle Mimetypen zu akzeptieren?!?

Wenn die Nutzungsbedingungen den automatischen Abruf nicht untersagen, warum nicht? Und wenn Du mit denen in Kontakt bist, kannst Du Dir das ja auch per Email bestätigen lassen.

Ja, das hier löst gerade das Mime-Type und das User-Agent Problem:

Jsoup.connect(escapedUrl).userAgent("curl/7.58.0").ignoreContentType(true).timeout(30000).get();

Die Daten werden von der Credit Suisse geliefert, und vielleicht nenne ich diesen QuoteFeed besser irgendwie neutral, d.h. ohne Nennung von Credit Suisse/VIAC. Der Link, wo die Daten herkommen, muss ja der Benutzer konfigurieren, und somit ist das ja dann auch sein Problem, ob er das darf oder nicht (z.B. Wohnsitzland USA).

Die Frage ist dann höchstens, wie der Quote Feed benannt werden soll. Die Frage ist auch, ob man vielleicht den HTML Quote Feed noch irgendwie aufbohren könnte. Es gibt drei Probleme:

  • User Agent (gelöst mit “Curl”)
  • Mime Type (gelöst mit ignoreContentType)
  • Format der Tabelle (s.u.)

Am Anfang der Tabelle steht:

<tr>
    <th style="background-color:#003565;color:white;">Produkt</th>
    <th style="background-color:#003565;color:white;">ISIN</th>
    <th style="background-color:#003565;color:white;">Valoren-Nr.</th>
    <th style="background-color:#003565;color:white;">Measure</th>
    
    <th style="background-color:#003565;color:white;">NAV Date</th>			
    <th style="background-color:#003565;color:white;">NAV</th>				
    													
        <th style="background-color:#003565;color:white;">ADDI</th>
</tr>

Die Tabelleneinträge sehen wie folgt aus, und werden so von der bisherigen Logik nicht erkannt:

    <tr>
        <td><a href="https://amfunds.credit-suisse.com/ch/de/institutional/fund/detail/CH0030849613">CSIF (CH) Equity Canada ZB</a></td>
        <td>CH0030849613</td>
        <td>3084961</td>
        <td>CAD</td>
        
        <td>16.08.2019</td>
        <td>1160.04</td>
        
            <td></td>
    </tr>  

3084961 ist übrigens die schweizerische Valorennummer.

Zur Integration solcher Tabellen in den HTML Quote Feed: Ich muss mal die Logik studieren, wie die Tabellen bis jetzt ausgewertet werden. Die Mime-Types könnte man gegebenfalls generell ignorieren. Die Frage ist höchstens, wie man mit dem User-Agent verfahren würde.

Das sollte nicht in dem Original HTML Quote Feed rein - der User Agent ist bei einigen Seite wichtig, weil die unterschiedliche Ergebnisse liefern je nach User Agent.

Vielleicht HTMLTableQuoteFeed ableiten? Das wäre zwar ein neuer Feed, aber relativ “dünn”.

Die Änderung kann man für alle machen.

Wird die Tabelle nicht eingelesen? Das liegt nicht am Format - th/td unterstütze ich. Ich nehme an es liegt an den Spalten Überschriften “NAV Date” und “NAV”. Die kann man aber hinzufügen bei den Spalten.

Wenn Du (s. weiter unten) “NAV” und “NAV Date” als Spaltenüberschriften im allgemeinen Code zulässt, wäre wirklich nur noch diese “User Agent” Geschichte, welche eine abgeleitete Klasse nötig machen würde.

Ich habe mir schon überlegt, ob man im HTMLTableQuoteFeed vielleicht die Seite zuerst mit dem “normalen” Agent holen soll, und wenn dann dort keine Preistabelle gefunden wird, dann wird angenommen, dass es sich um so eine Frageseite handelt, und es nochmals mit Agent “Curl” versucht. Dann könnten wir uns den weiteren Feed ersparen.

Vielleicht ist es sauberer, oder es gefällt Dir besser, wenn wir einen separaten Feed haben. Ich schlage vor, wir nennen den Feed “VIAC/CS Funds (nur für Benutzer mit Wohnsitz Schweiz)”. Mit dem Hinweis auf den Wohnsitz Schweiz ist wohl alles ok. Ich habe mal mit dem VPN die Seite aus den verbotenen USA abgerufen, und gesagt Wohnsitz Schweiz und die Daten wurden heruntergeladen. Es sind ja auch nur Vergangenheitskurse und der Benutzer muss ja den Link eintragen, und somit die Verantwortung über den verwendeten Link übernehmen.

Das könnte man, aber wäre mit einer abgeleiteten Klasse nicht nötig.

Auch das wäre nicht nötig, wenn man eine abgeleitete Klasse macht. Es braucht ein paar kleinere Massnahmen im HTML Quote Feed, welche das Ableiten einer Klasse realistisch möglich machen, aber ich denke, ich werde einen Pull Request mit den Änderungen erstellen, dann kannst Du gleich am “lebenden Objekt” schauen, was ich meine. Ich werde das dann in einem weiteren Kommentar noch kurz schreiben, was ich ändern musste (Column Klassen protected z.B.).

Ich habe nun einen Pull Request kreiert mit den notwendigen Änderungen für das Ableiten von HTMLTableQuoteFeed. Die Details habe ich dort reingeschrieben.

Und noch eine Idee:

    private LatestSecurityPrice extractPrice(Element row, List<Spec> specs, String languageHint) throws ParseException
    {
        Elements cells = row.select("> td"); //$NON-NLS-1$

        // row can be empty if it contains only 'th' elements
        if (cells.size() <= 1)  <========== HIER ======
            return null;

Wäre es sinnvoll, hier sogar zu testen, ob die Anzahl Zellen gleich der Anzahl Zellen in der Headerzeile ist? So als defensive Programmierung? Ist mir aber nur aufgefallen, weil es in diesen Tabellen, mit denen ich hantiere zu Beginn noch Zeilen mit nur einer Zelle hat. Das wird aber richtig erkannt, darum sage ich „defensiv“.

Stimmt. Da würde eine IndexOutOfBoundsException fliegen… keine Ahnung wie oft das in der freien Wildbahn passiert, der Code ist schon lange drin.

Habe dazu schon einen pull request erstellt.

Kleine Ergänzung: Ich nutze VIAC seit ca. einem Jahr und hole mir die Kurse von boerse.ard.de.
z.B. https://kurse.boerse.ard.de/ard/kurse_einzelkurs_history.htn?i=27296191

1 Like

Danke für den Hinweis: Das war jetzt gerade ein bisschen ein Schock für mich. All meine Arbeit für die Katz :slight_smile:. Es gibt aber folgende Aspekte:

  • Ich habe die HTML Quote Feed Klasse so refaktorisiert, dass man sie einfach ableiten kann.
  • Die ARD Seite scheint nur die Kurse von einem Monat zurück zu publizieren. Bei der CS direkt erhält man sie seit 2007.

(und insgesamt war es nicht so viel Arbeit)

1 Like

Ja, ARD ist definitiv nicht ideal. Ich freue mich deine Feautures in Zukunft zu nutzen.

Das Feature ist bereits committed und wird mit dem nächsten Release verfügbar sein. Freut mich, wenn es ausser mir noch jemand nutzt.

5 Likes

Super Sache, die für mich sehr nützlich sein wird. Wie kann ich dieses Feature als Anwender nutzen?

1 Like

Du must dich gedulden bis das nächste Update erscheint.

Vielen Dank für eure Arbeit!
Eine Frage habe ich noch zu den Kursen:
Bei VIAC werden einige Fonds in Fremdwährung gebucht, z.B. CH0017844686 in USD. Bei Credit Suisse kann ich aber nur die Kurse in CHF herunterladen.

Deshalb die Frage an alle VIAC-Nutzer: Habt ihre alle Fonds nur in CHF eingetragen oder bin ich zu doof, die Kurse auch in Fremdwaehrung (USD, EUR, CAD, …) zu finden? :sweat_smile:

Merkwürdig was es bei dem Fonds mit USD auf sich hat, im KIID steht folgendes:

Die Basiswährung des Fonds ist der CHF.
Die Währung der Anteilklasse ist der CHF.

Fonds die bei der CS die auf USD lauten, liefern auch Kurse in USD :confused:

Hallo,
die Kurse in den Fremdwährungen gibt z.B. hier http://www.finanztreff.de/kurse_einzelkurs_history.htn?i=34341359#34341360 für VIAC_CSIF Europe ex CH Real Estate - EUR. Dort findet man auch die anderen der CSIF Fonds. Das Probem ist aber das seit ca. Mai diesen Jahres der automatisierte Dowmload von der Seite nicht mehr funktioniert. Es gibt da einen Fehler beim auslesen der homepage. Habe diesen bereits einmal gepostet aber wie es scheint gibt es da noch keine Lösung.

Wie @Ragas schreibt, sind die Kurse bei CS z.T. in CHF gelistet. Ich sehe auch, dass bei Viac steht, es sei USD, und die Kaufabrechnung lautet tatsächlich in USD. Da Du aber bei VIAC sowieso alles letztlich in CHF führst, spielt es ja keine so grosse Rolle, oder? Interessant ist es trotzdem. Ich frage mal die Jungs von VIAC.

@listepha Auch beim Finanztreff wird der Fonds in CHF geführt. Du schreibst, es funktioniere etwas nicht. Ich könnte mir das mal anschauen, wenn Du möchtest. Habe noch eine andere Quelle gefunden, bei der ich mal schauen möchte, ob es tut.

Also bei Börsenplatz sieht man die Fremdwährungen für die kurse angbeoten werden…

Nur wenn man die Url in Portfolioperformance nutzt werden immer nur die Kurse in CHF runtergeladen…

Hatte den Fehler hier beschrieben…