AVIS: Ce défi est maintenant fermé: je ne mettrai plus à jour le classement et je ne changerai pas la réponse acceptée. Cependant, vous êtes libre d'exécuter le contrôleur et de mettre à jour le classement vous-même, si vous le souhaitez.
Rejoignez le chat!
introduction
Bonsoir, commerçants! Vous êtes tous des commerçants pour la société de golf PPCG. Votre tâche est de gagner le plus d'argent possible.
Défi
Ecrivez un programme qui achète et vend des actions à la Stack Exchange Stock Exchange dans le but de gagner le plus d'argent possible.
Gameplay
Tous les joueurs commenceront avec 5 actions et 100 $ dans leur banque. Le jeu commence toujours avec un cours de bourse de 10 $.
Chaque partie comportera 1 000 rounds au premier tour 1
. À chaque tour, votre programme recevra quatre arguments en entrée: le cours actuel de l'action, le nombre d'actions que vous détenez, le montant que vous possédez et le nombre de tours (indexé 1).
Par exemple, si mon programme est test1.py
, le prix de l'action est 100
, le nombre d'actions que je détiens est 3
, le montant d'argent que j'ai 1200
, et le nombre de rondes est 576
, mon programme sera exécuté comme suit:
python test1.py 100 3 1200 576
Dans un tour, le prix de l'action attribué à chaque joueur sera le même. Cela ne change pas jusqu'à la fin du tour.
En réponse, le joueur doit imprimer sa commande. Il y a deux options:
- Acheter des actions: Cette commande est donnée sous la forme
bn
oùn
est le nombre d'actions que vous souhaitez acheter. Par exemple, si vous souhaitez acheter 100 actions, vous devez générer:
b100
Lorsque vous achetez des actions, vous avez droit à un découvert pouvant atteindre 1 000 dollars. Si vous essayez d'acheter suffisamment d'actions qui dépassent ce découvert (votre solde bancaire passe en dessous de -1 000 $), vous serez déclaré en faillite. Cela signifie que vous perdrez toutes vos actions et que votre solde sera fixé à 50 $.
Si vous faites faillite, votre commande n’affectera pas le cours de vos actions.
(Si votre solde est de -1 000 $, vous n'êtes pas en faillite. Toutefois, si votre solde est de -1001 $, vous êtes en faillite)
- Vendre des actions: Cette commande est donnée sous la forme
sn
oùn
est le nombre d’actions que vous souhaitez vendre. Par exemple, si vous souhaitez vendre 100 actions, vous devez générer:
s100
Vous ne pouvez pas vendre plus d'actions que vous possédez. Si vous essayez de faire cela, votre demande sera refusée et vous éviterez le tour.
Si vous voulez sauter le tour et ne rien faire, indiquez soit b0
ou s0
.
Votre demande sera refusée si vous essayez d'acheter ou de vendre un nombre d'actions négatif et / ou un nombre d'actions non entier.
Après 5 tours, à la fin de chaque tour, tous les joueurs recevront un dividende dont la valeur correspond à 5% de la moyenne des cours moyens des 5 derniers tours.
Comment ça marche?
Initialement, le prix de l'action sera de 10 $. À la fin de chaque tour, il sera recalculé en utilisant la formule:
Le prix de l’action sera limité afin qu’il ne tombe jamais en dessous de 1 $.
Pour éviter toute modification trop rapide, la variation du cours de l’action est limitée à maximum .
Règles
- Votre programme doit avoir un nom
- Votre programme est autorisé à un seul fichier texte pour le stockage de données. Il doit être stocké dans le même dossier que votre programme.
- Incluez dans votre réponse les détails de l'exécution de votre programme
- Ce KotH est ouvert à tous les langages de programmation libres d’utilisation et peut être exécuté sur Windows 10
- Votre score est basé uniquement sur le contenu de votre balance. Tout argent bloqué en actions ne sera pas compté
- Vous pouvez modifier votre programme à tout moment. Avant chaque jeu, le dernier code sera sauvegardé et compilé
- Vous ne devriez pas écrire de code qui cible spécifiquement un autre bot.
Manette
Le contrôleur est écrit en Python et peut être trouvé ici: https://gist.github.com/beta-decay/a6abe40fc9f4ff6cac443395377ec31f
À la fin, un classement et un graphique illustrant l'évolution du cours de l'action au cours de la partie seront affichés.
Par exemple, quand deux robots aléatoires jouaient
Gagnant
Le joueur avec le montant d'argent le plus élevé à la fin du dernier match gagne.
Classement
Jeu 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
Voir les graphiques de chaque concurrent
En rapport, mais le critère de gameplay et de gain est très différent de ce défi.
la source
Réponses:
L'idiot gourmand expérimenté
PHP, testé sur PHP> = 7, devrait également fonctionner sur les précédents.
Une version mise à jour de "The Greedy Idiot" avec un comportement restructuré et des corrections de bugs liées au travail avec des nombres énormes.
Remarques:
php C:\path\path\stack_exchange.php 10 5 100 1
.txt
ajouté à la fin. Veuillez donc exécuter avec un utilisateur disposant des droits d’écriture appropriés sur le chemin du script.php.ini
ne devraient pas être commentées (le point-virgule au début de la ligne devrait être supprimé, si ce n'est déjà fait):; extension_dir = "ext"
;extension=gmp
la source
php -v
. Le reste n'est pas nécessaire pour cela. Je pense que vous allez avoir beaucoup de mal à configurer autant de langues différentes pour ce défi! Je n'oserais jamais faire quelque chose comme ça: DChimpanzés sur une machine à écrire
Les chimpanzés sont plus intelligents que les singes, ils n'achèteront pas de stocks qu'ils ne peuvent se permettre ni ne vendent des stocks qu'ils n'ont pas.
Toujours assez aléatoire sinon.
Exécuter avec python3, mais devrait (?) Fonctionner avec python2 aussi
la source
OYAIB
Suivant le vieil adage selon lequel vous êtes âgé de 30 ans, ce programme tente de faire de même. De cette façon, nous ne sommes pas soumis à la volatilité du marché en fin de partie.
Edit: En regardant le contrôleur, cela montre que nous ne pouvons acheter / vendre que des actions entières, mais que nous pouvons avoir un solde de compte fractionnaire.
la source
investments
n'est pas comptabilisé dans votre score).Comptable seul
buy-sell.py
:Ne stocke rien dans
buy-sell.txt
.Dans les tours impairs, il achète autant d'actions qu'il peut. À tour de rôle, il vend toutes ses actions.
L'intention est d'abord d'augmenter le prix de l'action en achetant autant d'actions que possible, puis de les vendre pour obtenir plus d'argent. Cela fonctionne parce que le tour final est égal (tour 1000).
Même si le prix de l'action restera le même (
5
) après chaque paire de tours (en supposant que le bot est seul, donc Lone Accountant ), le solde du bot augmente, car le prix de vente est supérieur au prix d'achat, et plus le solde conduit au possibilité d'acheter plus d'actions. C'est un cercle vicieux, mais dans le bon sens (pour moi).La vulnérabilité majeure vient du fait que des robots malfaisants jouent aux côtés de la vente afin de faire baisser le cours de l’action (je ne suis pas sûr que ce soit bon pour eux non plus). Dans ce cas, le bot peut rester avec un solde de -890 $, à condition qu'il y ait suffisamment de robots maléfiques. Ce comptable veut vraiment sa tranquillité d'esprit. ;-)
la source
Le commerçant passif
Ce type n’a pas grand-chose en ce qui concerne les «actions», mais il a entendu dire que s’il dépensait un peu d’argent maintenant, il obtiendrait au fil du temps des petites sommes qui lui rapporteraient plus que ce qu’il a dépensé.
Il achètera suffisamment d'actions pour atteindre 0 $ (pas de découvert pour ce type, il ne s'endette pas pour gagner un petit profit), puis reste assis à laisser les dividendes s'accumuler
Exécuter avec python3, mais devrait (?) Fonctionner avec python2 également.
la source
Pourcentage d'opérateurs Python3
(fonctionne peut-être en python2)
Instructions pour courir
Comment ça marche
Les modifications devraient, espérons-le, résoudre les problèmes causés par la division en virgule flottante
la source
Le statisticien naïf
Conçu pour Python 3, pourrait fonctionner en Python 2
C'est un statisticien naïf qui essaie de prévoir les cours des actions en achetant / vendant seulement si le cours a augmenté / baissé plus longtemps que d'habitude, tout en achetant des actions si le prix est bas et en vendant toutes les actions lors du dernier tour.
la source
Le coût moyen du dollar
(testé avec Python 3.7)
Premier message dans codegolf alors dites-moi si j'ai fait quelque chose de mal.
L'idée de base est d'acheter une action à chaque tour si cela est possible et de vendre toutes les actions à la fin.
la source
Égaliseur
Répartit ses ressources financières à parts égales entre les liquidités et les actions à chaque tour sauf le dernier. Je pense que cette stratégie est une manière mathématiquement juste de gagner au moins un peu d’ argent, mais je peux me tromper.
Il peut y avoir ou non des bugs que je n'ai pas attrapés. Également joué au golf un peu.
la source
p, n, b, r = map(float, argv[1:])
enp, n, b, r = map(int, argv[1:])
Singes sur une machine à écrire
C'est un groupe de singes sur des machines à écrire. Vend ou achète au hasard X actions, où:
0 <= X <= 1,000,000
Exécuter avec python3, mais devrait (?) Fonctionner avec python2 aussi
la source
cmd=random.choose(['b','s'])
etnum = str(random.randint(0, 1000000))
?import lazy
from random import randint, choice;print("{}{}".format(choice(["b", "s"]), randint(0, 1e6)))
;-PAcheter bas
(Python 2 ou 3)
la source
Joueur fallacieux
(Python 2 ou 3)
la source
L'agriculteur APL (Dyalog)
Un TradFn qui achète toutes les actions possibles au premier tour et ne vend que lorsque le prix actuel des actions est supérieur au prix auquel elles ont été achetées. Après la vente, le bot n’achètera que des actions moins chères que le prix pour lequel il a vendu les dernières actions.
C'est parce que le comptable de l'agriculteur lui a dit que c'est ainsi que vous négociez des actions. "Achetez bas, vendez haut" et tout ça.
Avertissement
C’est ma première tentative de défi KotH, et comme je ne fais que l’APL ici, j’ai décidé de continuer.
Cela dit, je ne suis pas tout à fait sûr que cela puisse fonctionner aux côtés des autres robots, car il s'agit d'un Tradfn et ne peut pas être directement introduit dans un shell CMD / Bash.
Donc, pour exécuter ceci dans Bash, vous avez besoin de la commande suivante:
$ echo apl_stock_farmer args | dyalog 'stock_exchange.dws' -script
Où:
apl_stock_farmer
est le nom de la fonction, qui se trouve dans la première ligne de code.args
est un vecteur d'arguments séparés par des espaces (ce serait le cas au premier tour10 5 100 1
).dyalog
est le chemin vers l'exécutable Dyalog'stock_exchange.dws'
est le nom (ou le chemin, si le fichier n'est pas dans le même répertoire ouvert par le shell) de l'espace de travail contenant la fonction. Ce fichier d'espace de travail peut être obtenu en ouvrant un espace de travail vide, en tapant)ed apl_stock_farmer
, en collant le code ci-dessus, puis en effectuant une opération)save <path>
. Je peux également fournir ce fichier d'espace de travail si cela serait plus facile.-script
est juste un argument qui fait que dyalog exécute le code donné et l’imprime sur stdout sans ouvrir le REPL.Malheureusement, je n'ai pas trouvé le moyen de le faire fonctionner avec Windows CMD ou Powershell, je l'ai donc exécuté avec Git Bash. Je ne sais pas à quel point il est possible de mettre ce bot sur la concurrence, mais j'aime trop ce code pour ne pas le publier.
la source
Investisseur dividendes illettrés
Après dividendes, les gens ont plus d’argent, donc ils seront plus susceptibles d’acheter. Vend juste avant les dividendes, achète juste après. Effectue un autre cycle de vente / achat dans les 3 autres tours.
la source
Achetez / Réinvestissez autant que possible!
Semblable à mon Averager Dollar-Cost qui, étonnamment, était plutôt moyen, cela achète à chaque tour autant d’actions qu’il est abordable et ne les vend que dans le dernier tour.
la source
if balance > share_price-1000:
bloc ou pas?Courtier débutant (mais obtient l'idée de base)
se_stock_exchange.rb
:Attend que le prix change, puis achète / vend tout. Je veux dire, c’est ce que dit Day Trading pour les nuls Note: c’est probablement un vrai livre, et c’est probablement quelque chose que quelqu'un pourrait en tirer .
Enregistre les données dans
se_stock_exchange.data
. Exécuter avecruby se_stock_exchange.rb ${SHARE_PRICE} ${SHARES} ${MONEY} ${ROUND}
(en remplaçant les valeurs appropriées).la source
se_stock_exchange.rb:24:in `<main>': undefined method `+' for nil:NilClass (NoMethodError)
Moitié plus ou rien
J'utilise rarement Python, laissez-moi savoir si cela génère une erreur quelque part.
La stratégie consiste à attendre que le prix de l’action soit au moins 50% plus élevé que le prix au moment de les vendre, puis de les vendre, puis d’acheter immédiatement de nouvelles actions afin qu’il puisse attendre la nouvelle augmentation.
Espérons que
leschimpanzés ne commenceront pas à vendre des actions vers la fin ... (il semble que la plupart des robots attendent le bon moment, peu importe ce que c'est)la source
Fibonacci
J'ai réécrit cela dans Python 3 pour faciliter les choses. J'espère!
Il achète la moitié du montant maximum d'actions abordable lorsque le tour est égal à un nombre impair de Fibonacci et vend la moitié des actions disponibles lorsque le tour est égal à un nombre pair de Fibonacci et également tous les 100 tours. Vend toutes les actions au tour 1000. Sinon, il attend. N'achète des actions que lorsque le solde est positif.
la source
Error in roundNum%%2 : non-numeric argument to binary operator Execution halted
Gourmand B ***** d
Il ira tout quand bon marché et vendra le tout quand le prix montera ...
la source
sell()
dont un seulRobot d'analyse technique
J'étudie l'économie des affaires et j'ai donc essayé de réaliser la méthode la plus simple pour analyser un marché boursier (l'analyse technique). Selon la théorie, il suffit d'analyser tous les minimums du graphique pour voir s'il y a une tendance (à la hausse). Pendant une tendance haussière, vous devez acheter et pendant une tendance baissière, vous devez vendre.
Je ne pense pas que cette méthode fonctionnera trop bien, mais essayons-la :)
Testé avec python3
la source
Nombre chanceux 6
EDIT: Oh ffs, je pense que ma conversion du nombre de ventes en int était l’un de mes problèmes, et bien on y retourne.
Probablement ma dernière contribution, à moins que je ne m'ennuie au travail et que je fasse quelque chose d'un peu plus sophistiqué, mais je suis tombé comme si des robots sophistiqués remplissaient déjà les niches.
Ce mec vend en gros certaines de ses actions tous les 6 tours, parce que 6 est son chiffre porte-bonheur.
la source