Subato

Aktiencharts

In dieser Aufgabe sollen Aktienkurse aus einer CSV-Datei einlesen und mithilfe der Swing-Bibliothek grafisch als Chart dargestellt werden. Gegeben seien hierfür die Klasse Quote (aus der vorherigen Aufgabe), die abstrakte Klasse Chart und die Klasse Viewer.

Die abstrakte Klasse Chart realisiert bereits das Grundgerüst, um ein Chart mithilfe der Swing-Bibliothek in einem JPanel zu zeichnen. Die Klasse Viewer erweitert die Swing-Klasse JFrame, um das Chart als GUI anzuzeigen.

Implementieren Sie nun die Klasse BarChart, die die von der abstraktem Klasse Chart erbt. Schreiben Sie Methoden zum Einlesen und Darstellen der Aktienkurse, die in der beiliegenden CSV-Datei "TSLA.csv" enthalten sind.

In einer (gültigen) CSV-Datei enhält jede Zeile durch Komma-getrennte Werte, wobei jede Zeile gleich viele Werte enthält. Die erste Zeile der Datei gibt dabei an, um was für Werte es sich handelt. Ab der zweiten Zeile folgen die eigentlichen Werte.

In den CSV-Dateien zu Aktien-Kursdaten, wie sie beispielsweise auf Yahoo-Finance kostenlos heruntergeladen werden können, enthalten die CSV-Dateien die folgenden Werte pro Zeile:

  • Datum
  • Tageseröffnungskurs (Open)
  • Tageshöchstkurs (High)
  • Tagestiefstkurs (Low)
  • Tagesschlusskurs (Close)
  • Angepasster Schlusskurs (Adj Close)
  • Handelsvolumen

Bei Ihrer Implementierung der BarChart-Klasse benötigen Sie nur das Datum und den Tageschlusskurs zur Visualisierung des Aktienkurses. Die anderen in der CSV-enthaltenen Werte können Sie ignorieren.

  1. Implementieren Sie die Methode paintStockName, die die String-Repräsentation des Stocks (toString) als Text auf das Chart in der linken oberen Ecke des Fensters zeichnet.
    Die Schrift soll in der Schriftart "Arial" im Schriftstil "plain" in 32 Punkt dargestellt werden. Der Text soll hierbei in schwarz erscheinen.

  2. Schreiben Sie eine Methode getNormalizedPrices. Diese Methode soll die Preiswerte der Quote-Objekte auf das Intervall 0 bis 1 skalieren. Zur Normalisierung können Sie die folgende Formel verwenden:

    p_norm = (p - p_min) / (p_max - p_min)

    Die Variablen "p_min" und "p_max" stehen hierbei für den niedrigsten bzw. höchsten Preis in Menge der Preise, die normalisiert werden sollen. Zur Ermittlung von Minimum und Maximum können Sie auf die entsprechenden Hilfsmethoden in der abstrakten Klasse Chart zurückgreifen.

    Geben Sie eine Liste von Double-Werten der normalisierten Preiswerte zurück. Die normalisierten Preiswerte können Sie in der nächsten Aufgabe zur Berechnung der Höhe der jeweiligen Preis-Balken verwenden.

  3. Implementieren Sie die Methode paintStockPrices. Die Methode soll den Verlauf von Aktienkursen als Balkendiagramm zeichnen. Jeder Kurswert soll dabei einen eigenen Balken erhalten, der von unten nach oben verläuft und der Höhe des Kurses entspricht.

    Der Balken soll grün eingefärbt werden, wenn der Balken höher ist als der vorherige; andernfalls soll er rot eingefärbt werden. Der erste Balken soll immer grün eingefärbt werden. Lassen Sie am oberen Rand etwa 20% Platz, um die Darstellung optisch etwas zu verbessern.

    Hinweis: verwenden Sie die vorher implementierte Methode getNormalizedPrices, um die Höhe der Kurse auf die Höhe der Balken abzubilden.

  4. Implementieren Sie die Methode readStockData, die eine CSV-Datei einliest und die darin enthaltenen Aktienkurse in Quote-Objekte umwandelt und der (in der abstrakten Klasse Chart definierten) Liste von Quote-Objekten hinzufügt.

    Implementieren Sie die Methode so, dass für jede Zeile der CSV-Datei ein Quote-Objekt mit dem Datum und dem Tagesschlusskurs (Close) erzeugt wird. Verwenden Sie für die Implementieren keine Klassen der Java-API, die speziell zum einlesen von CSV-Dateien verwendet werden können (also lediglich die bekannten Reader-Klassen).

  5. Implementieren Sie eine main-Methode, die die mitgelieferte Datei der Tesla-Aktienkurse einliest und mithilfe der BarChart-Klasse visualisiert.

    Erzeugen Sie zunächst eine Instanz der BarChart-Klasse und rufen Sie die Methode readStockData für die Datei "TSLA.csv" auf. Übergeben Sie das BarChart-Objekt anschließend an eine Instanz der Klasse Viewer und zeigen Sie das Chart mithilfe der Methode viewStockChart an.

     


import java.util.List; import java.util.ArrayList; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; public class BarChart extends Chart{ public BarChart(String name, String symbol){ super(name, symbol); } public BarChart(String name, String symbol, int width, int height){ super(name, symbol, width, height); } public void paintStockName(Graphics g){ } public List<Double> getNormalizedPrices(){ return new ArrayList<>(); } public void paintStockPrices(Graphics g){ } public void readStockData(String filename) throws IOException{ } public static void main(String[] args) throws IOException{ } }
java
You are not logged in and therefore you cannot submit a solution.