Subato

Resource Files

Aktienkurse

In dieser Aufgabe sollen Sie eine Klasse implementieren, die den Kurswert einer Aktie (in US-Dollar) im Verlauf der Zeit beschreibt. Gegeben sei hierfür die Klasse Quote, die den Kurswert einer Aktie am Ende eines bestimmten Tages beschreibt. In dieser Klasse finden Sie einige Hilfsmethoden für die Lösung dieser Aufgabe.

Implementieren Sie nun die Klasse Stock, die im Kern eine Liste von Quote-Objekten für Aktienkurse von verschiedenen Tagen für eine bestimmte Aktie enthält. Vervollständigen Sie die Methoden so, dass Sie am Ende der Aufgabe einige interessante Statistiken über den Kursverlauf einer Aktie ermitteln können.

  1. Überladen Sie den Konstruktor der Stock-Klasse. Der Konstruktor soll neben den beiden Parametern des gegebenen Konstruktors (name, symbol) eine Liste von Quote-Objekten entgegennehmen. Die Quote-Objekte sollen der Liste data hinzugefügt werden.

  2. Überschreiben Sie die toString-Methode der Stock-Klasse. Als Rückgabewert soll der volle Name der Aktie, gefolgt vom zugehörigen Symbol in eckigen Klammern (getrennt durch Leerzeichen) zurückgegeben werden. Die Quote-Objekte spielen hierbei keine Rolle.

  3. Schreiben Sie eine Methode addQuote. Die Methode soll einen Datumsstring und einen Tageskurs als double entgegennehmen, ein neues Quote-Objekt erstellen und dieses zur Liste der Kurse hinzufügen.

  4. Schreiben Sie eine Methode getQuote. Die Methode soll einen Datumsstring entgegennehmen und das (erste) entsprechenden Quote-Objekt aus der Liste der Kursdaten zurückgeben.

    Wenn zu dem übergebenen Datum keine passenden Quote-Objekte enthalten sind, soll stattdessen null zurückgegeben werden.

  5. Überschreiben Sie to equals-Methode der Stock-Klasse. Zwei Stock-Objekte sollen genau dann als gleich gelten, wenn sie das gleiche Symbol aufweisen. Denken Sie daran, dass die Überprüfung auf Gleichheit mehr umfasst, als nur die Symbol-Eigenschaft des Objekts auf Gleichheit zu überpfüfen.

  6. Implementieren Sie die Methode getOnlyDates. Die Methode soll eine Liste von Datumsobjekten der Klasse LocalDate der Quote-Instanzen in der Liste data zurückgeben.

  7. Implementieren Sie die Methode getOnlyPrices. Die Methode soll eine Liste von Preisen vom Typ Double der Quote-Instanzen in der Liste data zurückgeben.

  8. Schreiben Sie eine Methode getQuotesAfter. Die Methode soll eine Liste von Quote-Instanzen aus der internen Liste zurückgeben, die zeitlich nach dem als Parameter spezifizierten Datum liegen. Quote-Objekte, die zeitlich genau auf das übergebene Datum entfallen, sollen nicht mit zurückgegeben werden.

  9. Schreiben Sie eine Methode getQuotesBefore. Die Methode soll eine Liste von Quote-Instanzen aus der Liste data zurückgeben, die zeitlich vor dem als Parameter spezifizierten Datum liegen. Quote-Objekte, die zeitlich genau auf das übergebene Datum entfallen, sollen nicht mit zurückgegeben werden.

  10. Implementieren Sie die Methode getHighestPrice, die das Quote-Objekt mit dem höchsten Preis aus der internen Liste zurückgibt. Falls die Liste leer ist, soll stattdessen null zurückgegeben werden.

  11. Schreiben Sie eine Methode sortByDate. Diese Methode soll die Liste der Kursdaten aufsteigend nach Datum sortieren (also frühere Daten zuerst, spätere Daten danach).

    Sie brauchen den Sortieralgorithmus nicht selbst zu implementieren. Nutzen Sie die Methode sort der Klasse java.util.Collections; verwenden Sie einen Lambda-Ausdruck zur Angabe des Comparators.

  12. Schreiben Sie eine Methode sortByPrice. Diese Methode soll die Liste der Kursdaten aufsteigend nach dem Tageskurses sortieren (also niedrigere Preise zuerst, höhere Preise danach).

    Sie brauchen den Sortieralgorithmus nicht selbst zu implementieren. Nutzen Sie die Methode sort der Klasse java.util.Collections; verwenden Sie einen Lambda-Ausdruck zur Angabe des Comparators.

  13. Schreiben Sie eine Methode getReturns, die eine Liste der täglichen Erträge der Aktie zurückgibt. Verwenden Sie dafür die bereits in der Klasse Quote implementierte Hilfsmethode. Wenn weniger als zwei Quote-Objekte in der Liste enthalten sind, soll eine leere Liste zurückgegeben werden.

    Hinweis: Stellen Sie sicher, dass die Kursdaten vor der Berechnung nach Datum sortiert wurden.

  14. Schreiben Sie eine Methode getAveragePrice, die den Durchschnittswert der in der Liste data enthaltenen Kursdaten berechnet. Der Durchschnittswert ergibt sich aus der Summierung aller einzelnen Werte, geteilt durch die Anzahl der summierten Werte. Ist die Liste der Kursdaten leer, soll null zurückgegeben werden.

  15. Implementieren Sie die Methode getAverageReturns. Die Methode soll den Durchschnittswert der täglichen Erträge der Aktie  berechnen. Der Durchschnittswert ergibt sich aus der Summierung aller einzelnen Werte, geteilt durch die Anzahl der summierten Werte.

    Hinweis: Stellen Sie sicher, dass die Kursdaten vor der Berechnung nach Datum sortiert wurden.

  16. Schreiben Sie eine Methode hasUpwardsTrend, die ermittelt, ob jeder enthaltene Tageskurs jeweils höher ist als der Tageskurs des vorherigen Tages (d.h. ob ein Aufwärtstrend vorhanden ist).

    Hinweis: Stellen Sie sicher, dass die Kursdaten vor der Berechnung nach Datum sortiert wurden.

  17. Schreiben Sie eine main-Methode, in der Sie neue eine Instanz der Stock-Klasse erstellen. Gegeben sind untenstehend Kursdaten der Tesla-Aktie (TSLA) im Zeitraum vom 25.-29.01.2021. Fügen Sie die fünf Tageskurse (Close) mit dem zugehörigen Datum (Date) zu ihrem Stock-Objekt hinzu.

    Geben Sie folgenden Informationen auf der Konsole aus: höchster Kursvert, durchschnittlicher Tageskurs und durchschnittlicher Gewinn.

    Date             Open    High    Low     Close
    29. Jan. 2021    830,00  842,41  780,10  793,53
    28. Jan. 2021    820,00  848,00  801,00  835,43
    27. Jan. 2021    870,35  891,50  858,66  864,16
    26. Jan. 2021    891,38  895,90  871,60  883,09
    25. Jan. 2021    855,00  900,40  838,82  880,80
          

import java.util.List; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.time.LocalDate; public class Stock{ protected List <Quote> data = new ArrayList<>(); protected String name; protected String symbol; public Stock(String name, String symbol){ this.name = name; this.symbol = symbol; } public String getName(){ return this.name; } public String getSymbol(){ return this.symbol; } public List<Quote> getQuotes(){ return this.data; } public Stock(String name, String symbol, List<Quote> data) { } @Override public String toString(){ return ""; } public void addQuote(String date, double price){ } public Quote getQuote(String date){ return null; } @Override public boolean equals(Object that){ return false; } public List<LocalDate> getOnlyDates(){ List<LocalDate> result = new ArrayList<>(); return result; } public List<Double> getOnlyPrices(){ List<Double> result = new ArrayList<>(); return result; } public List<Quote> getQuotesAfter(LocalDate from){ List<Quote> result = new ArrayList<>(); return result; } public List<Quote> getQuotesBefore(LocalDate from){ List<Quote> result = new ArrayList<>(); return result; } public Double getHighestPrice(){ return 0.0; } public void sortByDate(){ } public void sortByPrice(){ } public List<Double> getReturns(){ List<Double> result = new ArrayList<>(); return result; } public Double getAveragePrice(){ return 0.0; } public Double getAverageReturn(){ return 0.0; } public boolean hasUpwardsTrend(){ return false; } public static void main(String[] args){ } }
java
You are not logged in and therefore you cannot submit a solution.