HINWEIS: Diese Herausforderung ist jetzt geschlossen: Ich werde die Bestenliste nicht mehr aktualisieren und die akzeptierte Antwort nicht ändern. Es steht Ihnen jedoch frei, den Controller selbst auszuführen und die Bestenliste zu aktualisieren, wenn Sie dies wünschen.
Tritt dem Chat bei!
Einführung
Guten Abend, Händler! Sie sind alle Händler für das Golfunternehmen PPCG. Ihre Aufgabe ist es, so viel Geld wie möglich zu verdienen.
Herausforderung
Schreiben Sie ein Programm, das Aktien an der Stack Exchange Stock Exchange kauft und verkauft, um so viel Geld wie möglich zu verdienen.
Spielweise
Alle Spieler beginnen mit 5 Aktien und 100 $ auf ihrer Bank. Das Spiel beginnt immer mit einem Aktienkurs von 10 USD.
Jedes Spiel hat 1000 Runden, in denen die erste Runde ist 1
. In jeder Runde erhält Ihr Programm vier Argumente als Eingabe: den aktuellen Aktienkurs, die Anzahl der von Ihnen gehaltenen Aktien, den Betrag, den Sie besitzen, und die Rundennummer (1-indexiert).
Zum Beispiel, wenn mein Programm ist test1.py
, der Aktienkurs ist 100
, die Anzahl der Aktien, die ich halte 3
, der Geldbetrag, den ich habe 1200
, und die runde Zahl ist 576
, wird mein Programm wie folgt ausgeführt:
python test1.py 100 3 1200 576
In einer Runde ist der Aktienkurs, den jeder Spieler erhält, derselbe. Dies ändert sich erst am Ende der Runde.
Als Antwort muss der Spieler seinen Befehl ausdrucken. Es gibt zwei Möglichkeiten:
- Kaufen Aktien: Dieser Befehl wird gegeben , wie ,
bn
won
die Anzahl der Aktien , die Sie kaufen möchten. Wenn Sie beispielsweise 100 Aktien kaufen möchten, würden Sie Folgendes ausgeben:
b100
Beim Kauf von Anteilen ist eine Überziehung von bis zu 1000 USD zulässig. Wenn Sie versuchen, genügend Aktien zu kaufen, die diesen Überziehungsbetrag überschreiten (Ihr Kontostand liegt unter -1000 USD), werden Sie für bankrott erklärt. Dies bedeutet, dass Sie alle Ihre Anteile verlieren und Ihr Kontostand auf 50 USD festgelegt wird.
Der Aktienkurs bleibt von Ihrem Befehl unberührt, wenn Sie in Konkurs gehen.
(Wenn Ihr Guthaben -1000 US-Dollar beträgt, sind Sie nicht bankrott. Wenn Ihr Guthaben jedoch -1001 US-Dollar beträgt, sind Sie bankrott.)
- Verkaufen Aktien: Dieser Befehl wie angegeben ,
sn
won
die Anzahl der Aktien , die Sie verkaufen möchten. Wenn Sie beispielsweise 100 Aktien verkaufen möchten, würden Sie Folgendes ausgeben:
s100
Sie dürfen nicht mehr Aktien verkaufen als Sie besitzen. Wenn Sie dies versuchen, wird Ihre Anfrage abgelehnt und Sie überspringen die Runde.
Wenn Sie die Runde überspringen und nichts tun möchten, geben Sie entweder b0
oder aus s0
.
Ihre Anfrage wird abgelehnt, wenn Sie versuchen, eine negative Anzahl von Aktien und / oder eine nicht ganzzahlige Anzahl von Aktien zu kaufen oder zu verkaufen.
Nach 5 Runden erhalten alle Spieler am Ende jeder Runde eine Dividende, deren Wert 5% des durchschnittlichen Aktienkurses der letzten 5 Runden beträgt.
Wie funktioniert es?
Zunächst wird der Aktienkurs 10 US-Dollar betragen. Am Ende jeder Runde wird es nach folgender Formel neu berechnet:
Der Aktienkurs wird begrenzt, so dass er niemals unter 1 USD fällt.
Um zu schnelle Änderungen zu vermeiden, ist die Änderung des Aktienkurses auf maximal .
Regeln
- Ihr Programm muss einen Namen haben
- Ihrem Programm ist eine einzige Textdatei zur Datenspeicherung gestattet. Es muss im selben Ordner wie Ihr Programm gespeichert sein
- Geben Sie in Ihrer Antwort an, wie Sie Ihr Programm ausführen
- Diese KotH steht allen frei verwendbaren Programmiersprachen offen, die unter Windows 10 ausgeführt werden können
- Ihre Punktzahl basiert ausschließlich auf dem Inhalt Ihres Guthabens. Etwaiges in Anteilen gebundenes Geld wird nicht gezählt
- Sie können Ihr Programm jederzeit bearbeiten. Vor jedem Spiel wird der neueste Code gespeichert und kompiliert
- Sie sollten keinen Code schreiben, der speziell auf einen anderen Bot abzielt.
Regler
Der Controller ist in Python geschrieben und hier zu finden: https://gist.github.com/beta-decay/a6abe40fc9f4ff6cac443395377ec31f
Am Ende wird eine Rangliste gedruckt und eine Grafik darüber angezeigt, wie sich der Aktienkurs im Laufe des Spiels verändert hat.
Zum Beispiel, wenn zwei zufällige Bots gespielt wurden
Gewinnen
Der Spieler mit dem höchsten Geldbetrag am Ende des letzten Spiels gewinnt.
Bestenliste
Spiel 4: 16:14 10/08/2018
Name Balance
Experienced Greedy Idiot $14802860126910608746226775271608441476740220190868405578697473058787503167301288688412912141064764060957801420415934984247914753474481204843420999117641289792179203440895025689047561483400211597324662824868794009792985857917296068788434607950379253177065699908166901854516163240207641611196996217004494096517064741782361827125867827455285639964058498121173062045074772914323311612234964464095317202678432969866099864014974786854889944224928268964434751475446606732939913688961295787813863551384458839364617299883106342420461998689419913505735314365685264187374513996061826694192786379011458348988554845036604940421113739997490412464158065355335378462589602228039730
Equalizer $763185511031294813246284506179317396432985772155750823910419030867990447973211564091988995290789610193513321528772412563772470011147066425321453744308521967943712734185479563642323459564466177543928912648398244481744861744565800383179966018254551412512770699653538211331184147038781605464336206279313836606330
Percentage Trader $448397954167281544772103458977846133762031629256561243713673243996259286459758487106045850187688160858986472490834559645508673466589151486119551222357206708156491069820990603783876340193236064700332082781080188011584263709364962735827741094223755467455209136453381715027369221484319039100339776026752813930
OYAIB $8935960891618546760585096898089377896156886097652629690033599419878768424984255852521421137695754769495085398921618469764914237729576710889307470954692315601571866328742408488796145771039574397444873926883379666840494456194839899502761180282430561362538663182006432392949099112239702124912922930
Chimps on a Typewriter $176504338999287847159247017725770908273849738720252130115528568718490320252556133502528055177870
Greedy B*****d $17689013777381240
Illiterate Dividend Investor $2367418699671980
Lucky Number 6 $4382725536910
Lone Accountant $90954970320
Buy/Reinvest $127330
Technical Analysis Robot $126930
Dollar Cost Averager $106130
Fibonacci $69930
Novice Broker $28130
Buy Low $6130
Naive Statistician $6130
Fallacious Gambler $6130
Passive Trader $4980
Half More or Nothing $4920
Monkeys on a Typewriter $66
Sehen Sie sich Diagramme der einzelnen Teilnehmer an
Verwandte aber das Gameplay und gewinnt Kriterium ist auf diese Herausforderung sehr unterschiedlich.
quelle
Antworten:
Der erfahrene gierige Idiot
PHP, das auf PHP> = 7 getestet wurde, sollte auch auf früheren Versionen funktionieren.
Eine aktualisierte Version von "The Greedy Idiot" mit neu strukturiertem Verhalten und Fehlerbehebungen im Zusammenhang mit der Arbeit mit riesigen Zahlen.
Anmerkungen:
php C:\path\path\stack_exchange.php 10 5 100 1
.txt
an das Ende angehängt. Führen Sie daher bitte einen Benutzer mit der entsprechenden Schreibberechtigung im Skriptpfad aus.php.ini
unkommentiert sein (das Semikolon am Zeilenanfang sollte entfernt werden, wenn es nicht bereits vorhanden ist):; extension_dir = "ext"
;extension=gmp
quelle
php -v
. Der Rest wird dafür nicht benötigt. Ich glaube, Sie werden viel Mühe haben, so viele verschiedene Sprachen für diese Herausforderung einzurichten! Ich würde es niemals wagen, so etwas zu tun: DSchimpansen Auf Einer Schreibmaschine
Schimpansen sind schlauer als Affen, sie kaufen keine Aktien, die sie sich nicht leisten können, oder verkaufen Aktien, die sie nicht haben.
Ansonsten immer noch ziemlich zufällig.
Mit python3 ausführen, sollte aber (?) Auch mit python2 funktionieren
quelle
OYAIB
In Anlehnung an das alte Sprichwort "Eigenes Alter in Anleihen" versucht dieses Programm, dasselbe zu tun. Auf diese Weise sind wir am Ende des Spiels keiner Marktvolatilität ausgesetzt.
Edit: Betrachtet man den Controller, so zeigt sich, dass wir nur volle Aktien kaufen / verkaufen können, aber einen gebrochenen Kontostand haben können.
quelle
investments
in Ihrer Punktzahl nicht berücksichtigt wird).Einsamer Buchhalter
buy-sell.py
:Speichert nichts in
buy-sell.txt
.In ungeraden Runden kauft es so viele Aktien wie möglich. In geraden Runden verkauft es alle seine Aktien.
Die Absicht ist, zuerst den Aktienkurs zu erhöhen, indem so viele Aktien wie möglich gekauft und dann diese Aktien verkauft werden, um mehr Geld zu bekommen. Es funktioniert, weil die letzte Runde gerade ist (Runde 1000).
Auch wenn der Aktienkurs
5
nach jedem Rundenpaar derselbe bleibt (vorausgesetzt, der Bot ist allein, daher Lone Accountant ), erhöht sich der Kontostand des Bots, da der Verkaufspreis höher als der Kaufpreis ist und ein größerer Kontostand zu dem führt Fähigkeit, mehr Aktien zu kaufen. Es ist ein Teufelskreis, aber in guter Weise (für mich).Die größte Schwachstelle ist, dass böse Bots mitspielen und verkaufen, um den Aktienkurs zu senken (nicht sicher, ob es auch für sie gut ist). In diesem Fall kann der Bot mit einem Kontostand von -890 USD verbleiben, vorausgesetzt, es gibt genügend böse Bots. Dieser Buchhalter möchte wirklich ihre Seelenruhe. ;-)
quelle
Der Passivhändler
Dieser Typ ist in dieser ganzen Sache mit den "Aktien" nicht groß, aber er hat gehört, dass er mit der Zeit ein bisschen Geld bekommt, das mehr ergibt, als er ausgegeben hat.
Er wird genug Aktien kaufen, um auf 0 USD zu steigen (kein Überziehungskredit für diesen Kerl, er ist kein Gunna, der sich mit ein wenig Gewinn verschuldet) und dann die Dividenden aufbauen lassen
Mit python3 ausführen, sollte aber (?) Auch mit python2 funktionieren.
quelle
Prozent Trader Python3
(funktioniert vielleicht in python2)
Anweisungen zum Laufen
Wie es funktioniert
Änderungen sollten hoffentlich die durch die Gleitkommadivision verursachten Probleme beseitigen
quelle
Der naive Statistiker
Made for Python 3 funktioniert möglicherweise in Python 2
Dies ist ein naiver Statistiker, der versucht, die Aktienkurse vorherzusagen, indem er nur kauft / verkauft, wenn der Kurs länger als gewöhnlich gestiegen / gefallen ist, während er Aktien kauft, wenn der Kurs auf eins gesunken ist und alle Aktien in der letzten Runde verkauft.
quelle
Der Dollar kostet durchschnittlich
(getestet mit Python 3.7)
Erster Beitrag in Codegolf, also sag mir, ob ich etwas falsch gemacht habe.
Die Grundidee ist, wenn möglich eine Aktie pro Runde zu kaufen und am Ende alle Aktien zu verkaufen.
quelle
Equalizer
Aufteilung der finanziellen Mittel auf Bargeld und Aktien in jeder Runde mit Ausnahme der letzten. Ich glaube , dass diese Strategie eine mathematisch fundierte Art und Weise zu sein , zumindest macht etwas Geld, aber ich kann falsch nachgewiesen werden.
Es kann Bugs geben, die ich nicht gefunden habe. Auch etwas golfen.
quelle
p, n, b, r = map(float, argv[1:])
inp, n, b, r = map(int, argv[1:])
Affen Auf Einer Schreibmaschine
Es ist ein Haufen Affen auf Schreibmaschinen. Verkauft oder kauft zufällig X Aktien, wobei:
0 <= X <= 1,000,000
Mit python3 ausführen, sollte aber (?) Auch mit python2 funktionieren
quelle
cmd=random.choose(['b','s'])
und verwendennum = str(random.randint(0, 1000000))
?import lazy
from random import randint, choice;print("{}{}".format(choice(["b", "s"]), randint(0, 1e6)))
;-PKaufen Sie günstig
(Python 2 oder 3)
quelle
Falscher Spieler
(Python 2 oder 3)
quelle
Der (Dyalog) APL-Bauer
Ein TradFn, der jede mögliche Aktie in der ersten Runde kauft und nur verkauft, wenn der aktuelle Preis der Aktie höher ist als der Preis, für den sie gekauft wurden. Nach dem Verkauf kauft der Bot nur Aktien, die billiger sind als der Preis, für den er zuletzt Aktien verkauft hat.
Das liegt daran, dass der Buchhalter des Bauern ihm sagte, dass Sie so mit Aktien handeln. "Niedrig kaufen, hoch verkaufen" und all das Zeug.
Haftungsausschluss
Dies ist mein erster Versuch einer KotH-Herausforderung, und da ich hier im Grunde nur APL mache, habe ich beschlossen, damit fortzufahren.
Allerdings bin ich mir nicht ganz sicher, ob dies neben den anderen Bots ausgeführt werden kann, da es sich um einen Tradfn handelt und nicht direkt in eine CMD / Bash-Shell eingegeben werden kann.
Um dies in Bash auszuführen, benötigen Sie den folgenden Befehl:
$ echo apl_stock_farmer args | dyalog 'stock_exchange.dws' -script
Wo:
apl_stock_farmer
ist der Name der Funktion in der ersten Codezeile.args
ist ein Vektor von durch Leerzeichen getrennten Argumenten (in der ersten Runde wäre dies der Fall10 5 100 1
).dyalog
ist der Pfad zur ausführbaren Dyalog-Datei'stock_exchange.dws'
ist der Name (oder Pfad, wenn sich die Datei nicht in demselben Verzeichnis befindet, in dem die Shell geöffnet ist) des Arbeitsbereichs, der die Funktion enthält. Diese Arbeitsbereichsdatei erhalten Sie, indem Sie einen leeren Arbeitsbereich öffnen)ed apl_stock_farmer
, den obigen Code eingeben , einfügen und dann a)save <path>
. Ich kann diese Arbeitsbereichdatei auch bereitstellen, wenn das einfacher wäre.-script
Dies ist nur ein Argument, das dyalog veranlasst, den angegebenen Code auszuführen und auf stdout zu drucken, ohne die REPL zu öffnen.Leider habe ich keine Möglichkeit gefunden, es mit Windows CMD oder Powershell zum Laufen zu bringen, also habe ich es mit Git Bash ausgeführt. Ich bin nicht sicher, wie machbar es ist, diesen Bot im Wettbewerb zu platzieren, aber ich mag diesen Code viel zu sehr, um ihn nicht zu posten.
quelle
Analphabetischer Dividendeninvestor
Angenommen, die Leute haben nach der Dividende mehr Bargeld, sodass sie mit größerer Wahrscheinlichkeit kaufen werden. Verkauft direkt vor Dividenden, kauft direkt danach. Durchläuft einen weiteren Verkaufs- / Kaufzyklus in den anderen 3 Runden.
quelle
Kaufen / Reinvestieren Sie so viel wie möglich!
Ähnlich wie bei meinem Dollar-Cost-Averager, der überraschenderweise ziemlich durchschnittlich war, kauft dieser in jeder Runde so viele Aktien, wie erschwinglich sind, und verkauft sie nur in der letzten Runde.
quelle
if balance > share_price-1000:
Block einzurücken oder nicht?Anfänger Broker (aber bekommt die Grundidee)
se_stock_exchange.rb
:Wartet, bis sich der Preis ändert, und kauft / verkauft dann alles. Ich meine, das ist es, was es in Day Trading für Dummies zu tun gibt. Hinweis: Dies ist wahrscheinlich ein echtes Buch, und das ist wahrscheinlich etwas, was jemand davon bekommen könnte .
Speichert Daten in
se_stock_exchange.data
. Ausführen mitruby se_stock_exchange.rb ${SHARE_PRICE} ${SHARES} ${MONEY} ${ROUND}
(Ersetzen der entsprechenden Werte).quelle
se_stock_exchange.rb:24:in `<main>': undefined method `+' for nil:NilClass (NoMethodError)
Halb mehr oder gar nichts
Ich verwende Python selten. Lassen Sie mich wissen, wenn dies irgendwo einen Fehler verursacht.
Die Strategie besteht darin, zu warten, bis der Aktienkurs mindestens 50% über dem Preis zum Zeitpunkt des Erwerbs liegt, sie dann zu verkaufen und sofort neue Aktien zu kaufen, damit sie auf die Erhöhung des Aktienkurses warten können.
Hoffentlich werden die
Leute, dieSchimpansen sind, gegen Ende nicht anfangen, Aktien zu verkaufen ... (es scheint, dass die meisten Bots nur auf den richtigen Moment warten, was auch immer das ist)quelle
Fibonacci
Ich habe dies in Python 3 umgeschrieben, um es einfacher zu machen. Hoffnungsvoll!
Es kauft die Hälfte der maximalen Aktienanzahl, die erschwinglich ist, wenn die Runde einer ungeraden Fibonacci-Zahl entspricht, und verkauft die Hälfte der verfügbaren Aktien, wenn die Runde einer geraden Fibonacci-Zahl entspricht, sowie alle 100 Runden. Verkauft alle Aktien in Runde 1000. Ansonsten wartet es nur. Kauft Aktien nur bei positivem Saldo.
quelle
Error in roundNum%%2 : non-numeric argument to binary operator Execution halted
Gierig B ***** d
Er wird alles geben, wenn es billig ist, und alles verkaufen, sobald der Preis steigt ...
quelle
sell()
die nur einesTechnischer Analyseroboter
Ich habe Betriebswirtschaft studiert und versucht, die einfachste Methode zur Analyse eines Aktienmarktes zu finden (die technische Analyse). Nach der Theorie müssen Sie nur alle Minima des Graphen analysieren, um festzustellen, ob es einen Trend gibt (nach oben oder nach unten). Während eines Aufwärtstrends muss man kaufen und während eines Abwärtstrends muss man verkaufen.
Ich glaube nicht, dass diese Methode zu gut funktioniert, aber probieren wir es aus :)
Getestet mit python3
quelle
Glückszahl 6
EDIT: Oh ffs, ich denke, dass ich die Verkaufszahlen nicht auf int umgerechnet habe, das war eines meiner Probleme.
Wahrscheinlich mein letzter Beitrag, es sei denn, ich langweile mich bei der Arbeit und mache etwas etwas raffinierter, aber ich falle wie die raffinierten Bots schon in die Nischen.
Dieser Typ verkauft im Grunde alle 6 Runden einen Teil seiner Aktien, weil Hey 6 seine Glückszahl ist.
quelle