Hi,
hier eine Aufgabe mit der ich nicht klar komme. Ist ziemlich viel zu lesen, ich weiß ![]()
Ein großes Wirtschaftsmagazin will seinen Lesern eine Analyse der Börsenentwicklung der letzten fünf Jahre
präsentieren. Dazu sollen unter anderem die Kurse der wichtigsten Aktien in diesem Zeitraum untersucht
werden. Für jede Aktie soll nachträglich ein bester Einkaufstag festgestellt werden.
Dabei wird angenommen, dass ein Kapitalanleger jede Aktie höchstens einmal eingekauft hätte, und zwar
in einer beliebigen Stückzahl, und dass er zum Ende des betrachteten Zeitraums alle Stücke wieder verkauft
hat. Der beste Einkaufstag für eine Aktie wäre dann derjenige gewesen, der zu einem eingesetzten Betrag
den höchsten Gewinn geliefert hätte (Steuern, Gebühren und alternative Anlagemöglichkeiten sollen außer
Betracht bleiben).
Das Wirtschaftsmagazin hat von einem Börsendienst Informationen über die Notierungen jeder Aktie für
alle Börsentage der letzten fünf Jahre gekauft. Für jede Aktie erhält es eine Zahlenfolge. Die erste Zahl
ist der Kurs der Aktie am ersten Börsentag und jede folgende Zahl gibt die absolute Kursveränderung
gegenüber dem Vortag an, in der Reihenfolge der Börsentage. Der Kurs, der sich für einen gewissen Tag
ergibt, gilt für alle Käufe und Verkäufe dieses Tages.
Unterstützen Sie die Kursanalyse durch Schreiben eines Programms, das für eine Aktie aus der gegebenen
Zahlenfolge nachträglich einen besten Einkaufstag, einen besten Verkaufstag und den dabei höchsten
erzielbaren Gewinn (in Prozent vom eingesetzten Betrag) ermittelt. Da das Programm sehr lange Zahlenfolgen
bearbeiten muss, ist es außerordentlich wichtig, dass die Laufzeit bei zunehmender Zahlenfolgenlänge
nicht stärker als nötig wächst.
Beispiel: Die Eingabe
"127.5 -0.5 2 -1 1 3.5 -13 7 -2 -6 -9 -21 -17 -5 0.5 4 -7 -12 2.5 -3 2"
liefert die Ausgabe:
"Ein bester Einkaufstag wäre der 14. Börsentag gewesen, ein dazugehöriger Verkaufstag der 16. Börsentag.
Der so realisierbare Gewinn wäre 6.7669 % vom eingesetzten Betrag gewesen."
(Aus Bundeswettbewerb Informatik 1985)
Implementieren (und benutzen) Sie folgende Methoden in einer Klasse PortfolioAnalyse in einem Package
aktienmarkt.analyse:
a) Zunächst müssen die absoluten Kursveränderungen (zum Vortag) in Kurswerte umgerechnet werden. Dies soll
folgende Methode übernehmen:
public static double[] erstelleVerlauf(double[] kursVeraenderung)
Die Methode erhält als Eingabe ein Array, das die absoluten Kursveränderungen gemäß Aufgabenstellung
enthält. Erstellen Sie ein neues Array mit den Kurswerten und geben Sie dies zurück. Lassen Sie das Eingabe-
Array unverändert. Liefern Sie für null als Eingabe eben diesen Wert zurück.
Obiges Beispiel würde folgendes Array ergeben:
{127.5, 127.0, 129.0, 128.0, 129.0, 132.5, 119.5, 126.5, 124.5, 118.5, 109.5, 88.5, 71.5, 66.5, 67.0, 71.0, 64.0,
52.0, 54.5, 51.5, 53.5}
b) Als nächstes muss die beste Kombination von Einkaufs- und Verkaufstag für eine Aktie gefunden werden:
public static double[] analysiereAktie(double[] kursVerlauf)
Diese Methode erhält als Eingabe ein Array mit dem zuvor erstellten Kursverlauf. Die Rückgabe dieser Methode
ist ein 3-elementiges Array mit der Information über den bestmöglichen An- und Verkauf. Es enthält folgende
Werte in dieser Reihenfolge:
· Den Einkaufstag
· Den Verkaufstag
· Den relativen Gewinn (in Prozent), gerundet auf 4 Nachkommastellen. Verwenden Sie dazu die
Methode Math.round(…). Runden Sie erst das Endergebnis, keine Zwischenergebnisse.
Existieren für eine Aktie mehrere Möglichkeiten denselben relativen Gewinn zu erzielen, wählen Sie nach
folgenden Kriterien die beste aus, und zwar in dieser Reihenfolge:
1. Kürzeste Haltezeit der Aktien
2. Frühester Verkauf
Sollte mit einer Aktie kein Gewinn möglich sein, so geben Sie {-1, -1, 0} zurück, für null den Wert null. Sie
dürfen davon ausgehen, dass der Kursverlauf keine ungültigen Werte (<= 0) enthält.
Für obiges Beispiel ist die Rückgabe der Methode {14, 16, 6.7669}.
c) Um die Kursanalyse für ein Portfolio mehrerer Aktien auf einmal durchführen zu können, erstellen Sie folgende
Methode, die die vorigen Methoden benutzt:
public static double[][] analysierePortfolio(double[][] kursVeraenderungen)
Diese Methode erhält als Eingabe eine Tabelle mit den absoluten Kursveränderungen mehrerer Aktien. Die erste
Dimension enthält die Kursveränderungen, die zweite Dimension die Kursveränderung einer Aktie. Die
Kursveränderungen verschiedener Aktien können unterschiedliche Längen aufweisen. Geben Sie eine Tabelle
zurück mit der gleichen Anzahl an Elementen wie das Eingabe-Array in der ersten Dimension. Die zweite
Dimension enthält 3 Elemente mit dem gefundenen Optimum für jede Aktie. Für die Eingabe null liefert die
Methode null zurück.
Beispieleingabe:
{ { 34.5, 1.4, -5.2, 7.0, 3.7, -2.0, 18.9}, {78.2, -3.5, 10.0, -11.3, -4.8, 5.3, 3.1, 4.2 }, {91.0, -30.3, 13.0, -5.3} }
Hinweis: Der Aspekt der Laufzeit wird in Ihrer Lösung nicht bewertet.
Mein Problem ist, dass ich keine Rechenregel erkennen kann, nach der man den mesten Einkaufs- Verkaufstag bestimmen kann, wie z.b. niedrigster Kurs/höchster Kurs.
Muss man zu jedem tag den Gewinn zu jeden anderen Tag errechnen?
Das wäre ja ein ewig langer, komplizierter Code.
Oder gibt es eine einfachere Vorgehensweise?
Danke
