• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Börsenautomation

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
Hallo,

ich bin auf hackerrank angemeldet und bin dabei ein "Rätsel" zu lösen:

Ich bekomme als Input jeden "Tag" mein aktuelles Geld, die Tage bis zum Ende der Börse, sowie alle verfügbaren Aktien mitgeteilt.
Man startet mit 100 Dollar und kann jeden Tag Aktien kaufen und verkaufen, zu den angegebenen Preisen. Außerdem wird bei der Info über die Aktien der Preis der letzten 5 Tage angezeigt.

Nun soll das System selbstständig kaufen und verkaufen. Am Ende wird eine Score gebildet, anhand des Gesamtgeldes.
Mit 100 Dollar am Ende bekomme ich ca 23 Punkte, mit 800 Dollar 33, und für 100 Punkte brauche ich mehrere Millionen oder gar Milliarden.

Nun habe ich mich daran versucht, und eben 800 Dollar erwirtschaftet :D Jetzt interessiert mich natürlich, wie ich das ganze verbessern könnte.

Erst einmal der Originaltext:

Algorithms that can correctly predict stock prices can help generate millions of dollars. In this one-player game, you try to predict the rise and fall of the stock price of various stocks and buy or sell the stocks accordingly.

You start with $100. Each turn you will be given the stock prices of current day and previous 4 days. You must then choose to BUY or SELL the stocks. Your program will be run with input for 1 day at a time.

The stock prices are generated by us and may contain patterns.

Input Format

The input of each turn will consist of multiple lines. All money values are doubles to two decimal places, all other numbers are integers.

The first line contains three space separated numbers m k d.

m - the amount of money you could spend that day.
k - the number of different stocks available for buying or selling.
d - the number of remaining days for trading stocks.
k lines follow, each in the following format: name owned prices

name - the name of the stock (a string).
owned - the number of shares you own of that stock.
prices - 5 space separated numbers representing the stock's price for the last 5 days. These are ordered from oldest to newest, so the last number is the current stock price.
Your program will be fed the days sequentially so you can write to a file in order to store a longer history of the prices.

Output Format

The output for each turn should also contain multiple lines:

Output N for the number of transactions you wish to make. Output 0 if you are not making any transactions that day.

If you are making transactions, output N lines containing the name of the stock (case sensitive), BUY or SELL, and the number of shares you wish to buy or sell.

NOTE: Money earned from selling stocks will only become available (for buying stocks) on the following day.

Constraints

1<=k<=10

Sample Input

90 2 400
iStreet 10 4.54 5.53 6.56 5.54 7.60
HR 0 30.54 27.53 24.42 20.11 17.50
Sample Output

2
iStreet SELL 10
HR BUY 5
Explanation

You have 90 dollars and 10 iStreet stocks. You decide to sell the iStreet stocks, then purchase 5 HR stocks. After the transactions you will have 90 - 17.50 x 5 + 7.60 x 10 = 78.5 dollars and 5 HR stock for the next days trading.

You could not have bought more than 5 HR stock because you do not get to spend the money from selling iStreet stock until the next day.

Scoring

Your score is = to 5 x ln(money). You will only receive points from the hidden test case.

Task

You trade until you run out of days. Any stocks left on the last day will automatically be sold at the last day's market price. Your objective is to make as much money as possible starting from $100.

Complete the function printTransactions that takes a float m money left, an integer k number of stocks, an integer d days left, a string array name of stock names, an integer array owned of stocks owned, and an 2d integer array prices of stock prices containing k arrays of length 5 and print your output.

All indexes correspond properly (For index i, the name of the stock is name, the number of shares of it you hold is owned and the data about it is prices.

Bigger data set

A bigger data set can be downloaded here. The data for the hidden test cases will be similiar.

Quelle: https://www.hackerrank.com/challenges/stockprediction

Habt ihr Ideen dazu? Ich hab bisher auf den Schnitt der letzten 5, 3 und 2 Tage geschaut, diese Werte irgendwie miteinander verglichen, und wenn manches eintrifft, wird zB verkauft bzw gekauft. Was mir noch fehlt ist momentan ist, zu entscheiden, welche Aktie wird gekauft? Die mit dem höchsten Anstieg? Die mit dem höchsten Dollarwert/Aktie? etc etc.

Bin gespannt auf eure Meinungen :)

Liebe Grüße
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Hi,

Also wenn ich die Aufgabenstellung richtig verstehe, muß man sich aus den 5 Tageswerten entscheiden?

Dazu mal folgende Überlegegungen:

Was gegeben ist:

[src=text]iStreet 10
4.54 5.53 6.56 5.54 7.60

HR 0
30.54 27.53 24.42 20.11 17.50
[/src]

iStreet Verlauf:
= +0,99 +1.03 -1.02 +2.06 =>
Low -1,02, High 2,06, HighLow Diff: +1,04, Total Change: 5,1, Growth: 4,08, Loss: -1,02, Average change: +1,275, Price Initial: 4,54 €, Price Now: 7,60 €, Change: ~ +169,38%, 4 Day Trend: ++-+ => +

HR:
= -3,01 -3,11 -4,31 -2,61 =>
Low -4,31. High: -2,61, HighLow Diff: -1,7, Total Change: -13,04, Growth: 0, Loss: -13,04, Average change: -3,26, Price Initial: 30,54 €, Price Now: 17,50 €, Change: ~-57,30%, 4 Day Trend ---- => -

Was man daraus ermitteln könnte:
iStreet ist aktuell um einiges teurer als zum Startpreis an Tag 1, genau genommen um ~169%, die Aktie generell wächst, die Aktie hat eine Veränderung von durchschnittlich ~ +1,275 € pro Tag, bei einem doch positiven Trend.

HR ist um vielfaches günstiger als am Starttag, hat jedoch einen negativen Trend und ist auf 57,3 % geschrumpft, die Aktie hat eine Veränderung von ~ -3,26 €.

----------------------------------
iStreet ist zum High/Low Vergleich bei der durchschnittlichen Veränderung von +1,275 € bei Low -1,02 (+0,273 €) und High 2,06 (+3,281 €) Fluktuation. HighLow Differenz: +1,04 €
HR im High/low Vergleich: -3,26 € bei Low -4,31 € (-7,57 €) und High -2,61 € (-5,87 €) Fluktuation. High Low Differenz: -1,7 €

---------------------------------

Jetzt gibt es noch folgende Überlegungen ("psychologische" Faktoren):
iStreets aktueller Preis ist gerade im Hochkurs, kaufen?, Nicht kaufen? Aber positiver Trend, nur - bleibt es so? Tag 3 zu 4 ist zum Beispiel negativ. Das heißt eigentlich das zu einem hohen Kurs, nicht gekauft wurde und der Preis abgefallen ist. Hier könnte man sagen, Wenn der Preis heute so viel teurer ist als zum Einführungspreis, ob das Level noch getoppt werden kann? - Oder geben wir ein positives Signal und kaufen, weil wir meinen die Aktie steigt noch weiter im Preis? Ist dafür die Grundlage geben bei der großen Differenz zum Startpreis? Allerdings hat die Aktie auch keine großen Sprünge und ist relativ stabil.

HR:
Okay, diese Aktie hat massiv an Wert verloren und auch sieht der Trend nicht rosig aus. Könnte man aber auch kaufen? Vielleicht ist der Erstpreistag ein Indiz dafür, das diese Aktie nur gerade in einem Abwärtstrend liegt, aber wieder zum alten Preis gehandelt werden könnte, in der Zukunft - auch wenn der aktuelle Trend das nicht zeigt. Risiko sind circa. 3,26 € pro Tag, circa. Es könnte aber auch sein das die Anleger einfach kein Vertrauen mehr in diese Aktie haben und deßhalb die Preise purzeln. Aber das kann auch ein Grund sein diese Aktie zu kaufen, weil es sie aktuell günstig gibt und sie morgen viel mehr Wert sein könnte. Hier kann man warten, oder man schlägt zu und kauft einen geringen Anteil.

Fazit:
HR hat einen größeren Einsatz, jedoch liegt die Differenz bei -1,7 € zwischen höchsten und niedrigsten (negativen) Wachstum.
iStreets hat einen geringen Einsatz, jedoch liegt die Differenz bei +1,04 € Zuwachs, bei einem Bruchteil der Kosten für HR - inklusive aller anderen Faktoren.

--------------------------------

Nur so ein paar Ideen, sorry das ich kein Bankberater bin - aber dann hätte ich schon meine erste Million(en) zusammen :D
Ich rechne nur einfach jeden Mist aus :p
 

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
  • Thread Starter Thread Starter
  • #3
Schaue mir die Antwort nochmal an, allerdings wollte ich sagen, dass du die Daten auch in einer Datei speichern kannst, um somit auf längere Daten zurückzugreifen. Da ich mit JS arbeite und es dort nicht funktioniert, zumindest nicht in der Umgebung dort, lasse ich es erstmal außen vor. :)
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Also in der Aufgabenstellung steht das man 5 Tage bekommt und daraus entscheiden soll - was einer Handelswoche entspricht - oder lese ich falsch?

Aber wenn du natürlich einen Datenstamm aufbauen kannst und für jede Woche auf die vorherigen zurückgreifen/abspeichern kannst, kannst du dir auch Prognosen erstellen und die Trends der Wochen zusammenfassen?!

Deßhalb meinte ich ja, es gibt Wochen/Saisons da bricht manches ein, manchmal wird aber auch manches aktiver gehandelt - bei 400 Tagen hast du also 80 Wochen a 5 Tage, also etwas mehr als ein Jahr, vielleicht wiederholen sich also auch "Trends" ;)

Die Aufgabe stelle ich mir aber spannend vor. :T
 

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
  • Thread Starter Thread Starter
  • #5
Deine obigen Rechnungen finde ich gut, ich werde mal sehen, ob ich das bei mir implementieren kann.
Dabei kann man ja sehen, welche Strategie mehr Erfolg hat :)

Falls es dich interessiert - bei hackerrank gibt es ein Vielzahl von Themen; Botprogrammierung, AI, statistische Auswertungen, Bildverarbeitung, Wahrscheinlichkeiten, ...
Dabei kann man die Aufgaben in sehr vielen Sprachen lösen (u.a. Java, Javascript, C, C++, Python, uvm.). Ist dafür gedacht, die eigenen Skills "zu zeigen", um bei Jobbewerbungen eine Referenz zu haben :) Hat mir bisher viel Spaß gemacht, da du dabei ja auch sichtlich Spaß hast, kann ich dir das nur mal empfehlen auszuprobieren!
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
Also Hackerrank sieht definitiv gut aus, haben in der Tat eine Menge Themen zu denen es diverse Aufgaben gibt.
Sind aber gerade so gut wie down - schmälert die Sache ein wenig, aber gut, Wartungsarbeiten vielleicht. ;)
Nachtrag: War wohl ein deaktiviertes Javascript....

Zum Thema:
Interessant fand und finde ich auch das Problem, wie man mit dem Geld welches einem zu Verfügung sinnvoll in Aktien anlegen kann, und durch eine "sinnvollse Auswahl an", Aktien kauft.
Ich hatte das ähnlich wie das "Rucksack" Problem mit einem Greedy Algorithmus probiert zu lösen. Was auch eigentlich ganz gut klappt.

Dabei wird dann mit dem Geld das einem zu Verfügung steht so viele Aktien wie möglich gekauft, bis das Budget aufgebraucht ist bzw. keine Aktien mehr gekauft werden können.
Sortieren lasse ich dabei nach dem Trend, wie oben schon erwähnt.

Aber neben dem Kaufen ist auch die Entscheidung nach dem Verkaufen ein Problem, wann soll verkauft werden, wann bricht der Wert ein - oder verkauft man eine Aktie zu einem Zeitpunkt an dem sie viel Wert ist und einen positiven Trend hat, um andere Aktien zu erwerben die sich vielleicht besser entwickelt haben, so fern man irgendwie Zugriff auf die Entwicklung hat.
Spannend auch wie sich das in Code ausdrücken lässt - mehr schlecht als Recht? :D
 
Zuletzt bearbeitet:
Oben