Portfolio-App: Vorgehen bei zeilenweiserr Query-Analyse - View-Erstellung
Verfasst: Samstag 5. Dezember 2020, 17:02
Ich bin gerade ein bisschen lost mit meiner erste Django-App. Ich möchte so etwas wie eine Portfolioübersicht für Börsenanlagen erstellen. Also jedes Mal, wenn ich eine Order zu meiner Tabelle hinzufüge, ändern sich die Statistiken etc. Im Moment habe eigentlich nur meine Order-Tabelle. Die Orders sollten alle Informationen enthalten, die für weitere Analysen benötigt werden. Dies ist das Modell:
und hier eine vereinfachte Importdatei:

Später wird die Tabelle natürlich Hunderte / Tausende von Einträgen enthalten.
wo ich Schwierigkeiten habe:
Ich muss mindestens zwei Sichten auf diese Tabelle erstellen

und so etwas für verkaufte Positionen (Weite Daten wie Verkaufszeitpunkt etc. sind sicherlich auch noch hinzuzufügen):

Was mich umtreibt:
Gesamtauswertungen wie:
sind soweit klar
Code: Alles auswählen
class Order(models.Model):
name = models.CharField(max_length=100)
ko_identifier = models.BooleanField()
order_price = models.FloatField()
quantity = models.FloatField()
order_value = models.FloatField()
order_fees = models.DecimalField(decimal_places=2,max_digits=5,default=0.0, null=True)
order_commission = models.DecimalField(decimal_places=2,max_digits=5,default=0.0)
stock_exchange_fees = models.DecimalField(decimal_places=2,max_digits=5,default=0.0)
courtage_fee = models.DecimalField(decimal_places=2,max_digits=5,default=0.0)
own_fees = models.DecimalField(decimal_places=2,max_digits=5,default=0.0)
transaction_fee = models.DecimalField(decimal_places=2,max_digits=5,default=0.0)
transaction_fee_sum = models.FloatField()
order_date = models.DateTimeField('order date')
#order_date = models.DateTimeField(auto_add_now=true)
order_wkn = models.CharField(max_length=6)
order_isin = models.CharField(max_length=12)
order_direction = models.ForeignKey(OrderDirection, null=True, on_delete= models.SET_NULL)
order_place = models.ForeignKey(OrderPlace, null=True, on_delete= models.SET_NULL)

Später wird die Tabelle natürlich Hunderte / Tausende von Einträgen enthalten.
wo ich Schwierigkeiten habe:
Ich muss mindestens zwei Sichten auf diese Tabelle erstellen
- Aktuelles Portfolio
- abgeschlossene "Geschäfte"

und so etwas für verkaufte Positionen (Weite Daten wie Verkaufszeitpunkt etc. sind sicherlich auch noch hinzuzufügen):

Was mich umtreibt:
- Wie kann ich diese Sichten optimalerweise und auch in Hinblick auf Geschwindigkeitsaspekte umsetzen?
- aktuelle versuche ich einen View zu generieren auf meine gesamte Order-Tabelle, was sich aber schwierig gestaltet, da ich ja über ggf. mehrere Orders Durchschnitte addieren oder subtrahieren muss... und dafür muss ich ja auch erstmal wissen wie viele und welcher Art und und und
. Eine georndete Tabelle wäre zumindest einfach zu generieren: orders = Order.objects.order_by('order_wkn', 'order_date'). Jetzt konnte ich von oben nach unten durchgehen und Operationen durchführen... auch wenn ich noch nicht weiß wie, erscheint mir das erstmal nicht optimal...
- wäre das Umwandeln in eine Liste zu durchdenken?
- Sind ggf. zwei weitere Tabellen zu erstellen, wo dann immer neue Orders reingeuptadet werden? Vorschläge/Beispiele zur Umsetzung?
Gesamtauswertungen wie:
Code: Alles auswählen
total_ko = orders.filter(ko_identifier=1).count()
total_buy = orders.filter(order_direction=4).count()
total_sell = orders.filter(order_direction=3).count()
total_sum_buy = orders.filter(order_direction=4).aggregate(Sum('order_value')).get('order_value__sum', 0.00)
total_sum_sell = orders.filter(order_direction=3).aggregate(Sum('order_value')).get('order_value__sum', 0.00)