Hi Klaus.
Vokabelprogramm ist noch nicht fertig durchgetestet. Da muss ich noch ein bißchen schrauben.
Aber von meinem Portfoliomanager kann ich mal ein erste Version veröffentlichen. Bin gerade so weit fertig geworden, dass ich mal auch andere drüber schauen lassen kann.
Ziel des Programms:
Kurse zu Aktien online abfragen und Gewinn/Verlust berechnen (derzeit leider eher Verlust ;-)
Hauptseite-Portfolio
Die Hauptseite teilt sich in 3 Bereiche auf:
1. Header mit dem Namen des Portfolios (schwarz):
besteht aus Zurück(<) Portfolioname Weiter (>)
derzeit wird nur eine Portfolioseite unterstützt. Zukünftig sollen beliebig viele Portfolios verwaltet werden können. (aber erst in der nächsten Version ;-)
2. Aktienbereich
Es sind 5 mögliche Positionen für Aktien als unterschiedliche Zeilen (dunkel/hellgrau) vorhanden. Jede Aktienzeile ist wieder unterteilt in 3 Zeilen mit folgendem Aufbau:
Detailinfos eine Aktienzeile:
1. Zeile: Wertpapiersymbol, Letzter Wert, Veränderung absolut und in Prozent zum Vortag
2. Zeile: Name des Wertpapiers, Datum und Zeit des letzten Werts
3. Zeile: Anzahl der gekauften Stück, Gesamtbetrag Kaufwert, Gesamtbetrag Aktuell, Gewinn/Verlust absolut und in Prozent
3. Footer mit den Summen über alle 5 Aktien zu Kaufwert, AktuellerWert, Gewinn/Verlust absolut und in Prozent (wieder schwarz)
Menü Portfolio
Über das Menü können weitere Fenster aufgerufen werden bzw. die gesamte Aktienliste aktualisiert werden.
- Menü Stock - Refresh all: für alle Aktienzeilen die neuen Daten abrufen
- Menü Preferences: Timeout der HTML Verbindung ändern
- Menü Quit: Beendet das Programm
Im aktuellen Source habe ich alle 5 Aktienzeilen bereits mit Werten befüllt.
Mit dem Menü "Refresh all" (siehe oben) werden alle Aktienzeilen neu geladen. Dazu wird das Webservice StockQuote von WebserviceX.net aufgerufen. Als Parameter wird das Wertpapiersymbol der aktuellen Aktie mit übergeben (weiter Infos zu dem Webservice ganz am Ende). Die gelieferten Detaildaten des Webservice wird dann in die anderen Felder der Aktie übernommen und die berechneten Felder (wie Kaufwert, Aktueller Wert, Gewinn/Verlust,...) neu berechnet. Ganz links wird in den Aktienzeilen angezeigt, welche Aktie gerade abgefragt wird (Blauer Balken). Wenn Daten aktualisiert wurden, verändert sich der Balken wieder auf Grau. Wenn keine Verbindung aufgebaut werden konnte, dann wird dies durch einen gelben Balken dargestellt.
Jede Aktienzeile hat auch ein Context-Menü mit 2 Menüeinträgen
- Context-Menü Refresh stock: Aktualisiert nur die Daten der aktuellen Aktie
- Context-Menü Edit: Öffnet das Aktien-Detailfenster. Dort kann dann das Wertpapiersymbol geändert werden und die Anzahl und der Kurs von gekauften Aktien eingetragen werden
Seite Preferences
Über das Menü "Portfolio - Preferences" wird das Fenster Preferences aufgerufen. Dort kann man allgemeine Einstellungen zum Programm vornehmen. Derzeit kann das Timeout (in Sekunden) für die HTML Verbindung eingestellt werden. Das kann helfen, wenn wieder mal eine langsames Webservice aufgerufen wird. Einfach mit den Sekunden experimentieren (Standard ist 20 Sekunden).
Als Webservice zur Abfrage der Aktiendaten verwende ich derzeit StockQuote von WebserviceX.net, weil dieses Service die Daten zu einer Aktie in einem XML Stream anliefert. Leider scheint dieses Service sehr überlastet zu sein, sodass es zu sehr langen Abfragezeiten kommt.
Da werde ich in Zukunft noch einen Parser schreiben, mit dem man die entsprechenden Daten aus einer normalen HTML Seite (z.B. über finance.yahoo.com oder jede andere Finanzseite) herauspicken kann. Das ist aber etwas schwieriger als den reinen XML Stream zu verarbeiten.
Datenspeicherung
Die Datenspeicherung wird in einer XML Daten vorgenommen, die im AppPath gespeichert wird.
Beim Schließen des Hauptfensters werden alle Portfolioseiten (derzeit halt nur eine) und die darin enthaltenen Aktien, sowie die Preference-Einstellungen in die XML Datei geschrieben.
Beim Start werden die Daten wieder aus der XML Datei gelesen.
Notwendige Libraries
- HTTP.dll
- ControlsEx.dll
- FormLib.dll
- XML.dll
-----------
In einer nächsten Version werde ich dann folgende Funktionen noch einbauen:
- Anlegen/Verwalten mehrere Portfolioseiten
- Blättern zwischen den Protfolioseiten
- zeitgesteuerte automatische Abfrage der Daten
- Parser für andere HTML Datenquellen (normale Finanzseiten)
Anmerkung: durch die 5 Zeilen mit Aktien habe ich leider sehr viel Code-Verdoppelung erhalten, weil ich die Berechnungen immer für alle Aktien extra durchführen muss. Habe zwar versucht, so viel wie möglich in Funktionen zu kapseln, aber trotzdem viel redundanter Code vorhanden.
Wer hier Verbesserungvorschläge hat, ist gerne aufgerufen zu posten!
By the way - Version ist noch nicht vollständig durchgetestet. Kommentare im Source Code sind grossteils auf englisch (oder was ich darunter verstehe ;-)
Was sonst noch? Ja - das Webservice ist WIRKLICH total überlastet. Geht meistens nur in der Früh und am späten Abend halbwegs verlässlich.
LG
Wolfgang