Portfolio Performance mit Python verbinden

Hallo zusamen,
ich habe bereits ein Performance Tool in python geschrieben:

  • lese die Transactions aus Excel ein
  • lese die Preise aus Excel ein
  • Berechne die Performance
  • Gebe eine csv Datei aus, welche die Portfolios und Performance zahlen in PowerBI visualisert

Ich habe mir jetzt das Projekt vorgenommen die Transactions sowie Preise aus der Portfolio Performance Datenbank zu „ziehen“. Nun Sind diese im xml file gespeichert was es nicht so einfach macht.

Einerseits würde ich mich über Interesse/Support seitens anderer Python Programmierer freuen, andererseits wollte ich einmal fragen ob Portfolio Performance nicht auch eine SQLITE datenbank anlegen könnte? Das würde das connecten von anderen Programmiersprachen m.E. wesentlich vereinfachen.

3 Likes

Heyh @danielweb,

Du wirst vermutlich nicht darum herum kommen mit xml zu arbeiten.

Ich habe aber mal ein wenig Pseudocode geschrieben, bin kein Profi, daher wird es wohl nicht die beste Variante sein, aber du kannst nach den Daten suchen und sie in aus dem Array heraus weiterverarbeiten.

Die Daten, die du nicht brauchst, kannst du größtenteils mit dieser Zeile schon entfernen.

Ich habe hier mal mit Absicht keinen formatierten String genutzt.

results.append(str(child.tag) + str(child.attrib) + ":" + str(child.text))

Spiel mal damit herum und schau was passiert, dann musst du nur noch herausfinden wie der Tag, für die Daten die du, brauchst heißt.

Die Datengrundlage habe ich schamlos aus der Dokumentation genommen.
Link

Hoffe ich konnte dir soweit mit deinem Problem helfen.
Falls du noch Fragen hast, kann ich gern versuchen dir zu helfen.

Python 3.7:

import os
from xml.etree import ElementTree as ET

tree = ET.parse('Test.xml') 
root = tree.getroot()

def reader(root):
    results = [] # Variebale für die Ergebnisse
    for child in root: # loop durch alle Tags
        if (child.tag == "neighbor"): # prüft auf den richtigen Tag
            results.append(str(child.tag) + str(child.attrib) + ":" + str(child.text)) # Hängt den Tag samt Atribute und Text an
        try:
            results.extend(reader(child)) # Speichert die Ergebnisse
        except:
            pass 
    return (results) # Gibt die Ergebnisse zurück
        
        
print(reader(root)) # Gibt alle Ergebnisse aus.

Text.xml:

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>
1 Like

@danielweb
Hat es geklappt?

Hi Anthony,
ich hatte mich einigermaßen mit xml angefreundet, bis ich auf das Problem gestoßen bin dass die Portfolio Performance XML Datei referenzen enthält, bei denen ich mir nicht sicher bin wie man sie einlesen kann.

Ein Beispiel habe ich hier auf stackoverflow gepostet. Vielleicht hat ja jemand aus dem Forum hier eine Idee?
https://stackoverflow.com/questions/65636328/how-to-resolve-references-in-python-elemttree

Ich habe mir auch das python ETF classification tool ETF Stammdaten angeschaut, vielleicht hat @f_bu eine Idee?

Ich habe mich noch einmal damit beschäftigt und ein recht brauchbares Ergebnis erhalten.

Den Code habe ich auf Github gestellt falls noch jemand Interesse daran hat.
https://github.com/dvett01/Portfolio-Performance-Export

Die Referenzen konnte ich nach langem ausprobieren mit der erstellten Funktion check_for_ref_lx auflösen. Ein erster Test zeigt brauchbare Ergebnisse, aber gerade bei Tax/Dividends etc glaube ich gibt es noch einige Probleme.

Bin gerne für Feeback und Verbesserungsvorschläge offen.

1 Like

Hey @danielweb,
besten Dank für deinen Code. Ich hatte ähnliches vor und muss es jetzt nicht mühsam selbst bauen.
Kurioser Weise funktioniert die Suche nach dem isin-tag in get_df_all_prices nur, wenn ich nach (".//securities//security") suche. (".//securities/security"), also mit einem Slash, führt bei mir zu einem Abbruch des Skripts.
Noch eine Frage, da du PowerBI erwähntest. Nutzt du da den PowerBI Desktop oder etwas anderes? Bei ersterem ist man soweit ich gesehen habe leider auf den Bearbeitungsmodus beschränkt.
LG und danke fürs Teilen.