ЗАМЕЧАНИЕ. Эта задача теперь закрыта: я больше не буду обновлять таблицу лидеров и не буду менять принятый ответ. Тем не менее, вы можете запустить контроллер и обновить таблицу лидеров самостоятельно, если хотите.
Присоединяйтесь к чату!
Введение
Добрый вечер, трейдеры! Вы все трейдеры для гольф-компании PPCG. Ваша задача - заработать как можно больше денег.
Вызов
Напишите программу, которая покупает и продает акции на бирже Stack Exchange, чтобы заработать как можно больше денег.
Игровой процесс
Все игроки начнут с 5 акций и 100 долларов в своем банке. Игра всегда начинается с цены акции в 10 долларов.
Каждая игра будет иметь 1000 раундов, где первый раунд является раундом 1
. В каждом раунде вашей программе будет предоставлено четыре аргумента: текущая цена акции, количество принадлежащих вам акций, сумма ваших денег и число раундов (с 1 индексированием).
Например, если моя программа имеет test1.py
цену акции 100
, количество акций, которыми я владею 3
, количество денег, которое у меня есть 1200
, и число раундов 576
, моя программа будет работать так:
python test1.py 100 3 1200 576
В раунде цена акций каждого игрока будет одинаковой. Это не изменится до конца раунда.
В ответ игрок должен распечатать свою команду. Есть два варианта:
- Купить акции: Эта команда дается как
bn
гдеn
это количество акций , которые вы хотите купить. Например, если вы хотите купить 100 акций, вы получите:
b100
При покупке акций вам разрешается овердрафт до 1000 долларов. Если вы попытаетесь купить достаточно акций, превышающих этот овердрафт (баланс вашего банка опустится ниже $ 1000), вы будете объявлены банкротом. Это означает, что вы потеряете все свои акции и ваш баланс будет установлен на 50 долларов.
Ваша цена не повлияет на вашу цену, если вы обанкротитесь.
(Если ваш баланс составляет $ -1000, вы не банкрот. Однако, если ваш баланс составляет $ -1001, вы банкрот)
- Продать акции: Эта команда дается как
sn
гдеn
это количество акций вы хотите продать. Например, если вы хотите продать 100 акций, вы получите:
s100
Вы не можете продавать больше акций, чем у вас есть. Если вы попытаетесь это сделать, ваш запрос будет отклонен, и вы пропустите раунд.
Если вы хотите , чтобы пропустить раунд и ничего не делать, выход либо b0
или s0
.
Ваш запрос будет отклонен, если вы попытаетесь купить или продать отрицательное количество акций и / или нецелое число акций.
После 5 раундов, в конце каждого раунда, всем игрокам будут выплачиваться дивиденды, величина которых составляет 5% от средней средней цены акций за последние 5 раундов.
Как это работает?
Первоначально цена акции будет 10 долларов. В конце каждого раунда он будет пересчитан по формуле:
Цена акции будет ограничена, чтобы она никогда не опускалась ниже 1 доллара.
Чтобы предотвратить слишком быстрое изменение, изменение цены акции ограничено максимумом .
правила
- Ваша программа должна иметь имя
- Ваша программа допускает один текстовый файл для хранения данных. Он должен храниться в той же папке, что и ваша программа
- Включите в свой ответ информацию о том, как запустить вашу программу
- Этот KotH открыт для всех языков программирования, которые бесплатны и могут быть запущены в Windows 10
- Ваша оценка основана исключительно на содержании вашего баланса. Любые деньги, запертые в акциях, не будут засчитаны
- Вы можете редактировать свою программу в любое время. Перед каждой игрой последний код будет сохранен и скомпилирован
- Вы не должны писать код, специально предназначенный для другого бота.
контроллер
Контроллер написан на Python и может быть найден здесь: https://gist.github.com/beta-decay/a6abe40fc9f4ff6cac443395377ec31f
В конце он напечатает таблицу лидеров и отобразит график того, как цена акций менялась в течение игры.
Например, когда играли два случайных бота
выигрыш
Игрок с наибольшим количеством денег на балансе в конце последней игры выигрывает.
Leaderboard
Игра 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
Просмотр графиков каждого участника
Связанные, но геймплей и критерий победы очень отличаются от этой задачи.
источник
Ответы:
Опытный жадный идиот
PHP, протестированный на PHP> = 7, должен работать и на предыдущих.
Обновленная версия «Жадного идиота» с реструктурированным поведением и исправлениями ошибок, связанных с работой с огромными числами.
Заметки:
php C:\path\path\stack_exchange.php 10 5 100 1
.txt
добавляется в конец. Поэтому, пожалуйста, запустите пользователя с соответствующими правами на запись в пути к скрипту.php.ini
должны быть без комментариев (точка с запятой в начале строки должна быть удалена, если это еще не сделано):; extension_dir = "ext"
;extension=gmp
источник
php -v
. Остальные для этого не нужны. Я полагаю, что у вас будет много проблем с настройкой множества разных языков для этой задачи! Я бы никогда не посмел сделать что-то подобное: DШимпанзе на пишущей машинке
Шимпанзе умнее обезьян, они не будут покупать акции, которые им не по карману, или продавать акции, которых у них нет.
Тем не менее, все равно довольно случайно.
Работать с python3, но должен (?) Также работать с python2
источник
OYAIB
Следуя старой поговорке «владей своим возрастом в облигациях», эта программа пытается сделать то же самое. Таким образом, мы не подвержены волатильности рынка в конце игры.
Изменить: Глядя на контроллер, он показывает, что мы можем только покупать / продавать полные акции, но можем иметь дробный остаток на счете.
источник
investments
не учитывается в вашем счете).Одинокий бухгалтер
buy-sell.py
:Не хранит ничего в
buy-sell.txt
.В нечетные раунды он покупает столько акций, сколько может. В четных раундах он продает все свои акции.
Намерение состоит в том, чтобы сначала поднять цену акций, купив как можно больше акций, а затем продать эти акции, чтобы получить больше денег. Это работает, потому что последний раунд четный (раунд 1000).
Даже несмотря на то, что цена за акцию останется неизменной (
5
) после каждой пары раундов (при условии, что бот один, а значит, Одинокий бухгалтер ), баланс бота увеличивается, поскольку цена продажи выше, чем цена покупки, и больший баланс приводит к способность покупать больше акций. Это порочный круг, но в хорошем смысле (для меня).Основная уязвимость связана с тем, что злые боты играют рядом, продавая, чтобы понизить цену акций (не уверен, хорошо ли это и для них). В этом случае бот может остаться с балансом в $ -890, если есть достаточно злых ботов. Этот бухгалтер действительно хочет их душевного спокойствия. ;-)
источник
Пассивный Трейдер
Этот парень не слишком хорош в этом вопросе с «акциями», но он слышал, что если он сейчас потратит немного денег, он со временем получит немного денег, что составит в целом больше, чем он потратил.
Он купит достаточное количество акций, чтобы перейти к 0 долларам (для этого парня нет овердрафта, он не гуннит, чтобы влезть в долги ради небольшой прибыли), а затем будет сидеть, позволяя дивидендам расти
Запускать с python3, но должен (?) Также работать с python2.
источник
Процент трейдера Python3
(возможно работает в python2)
Инструкция по бегу
Как это работает
Надеемся, что изменения должны устранить проблемы, вызванные делением с плавающей запятой
источник
Наивный статистик
Сделано для Python 3, может работать в Python 2
Это наивный статистик, который пытается предсказать цены акций, покупая / продавая, только если цена выросла / падает дольше, чем обычно, одновременно покупая акции, если цена снизилась до единицы, и продавая все акции в последнем раунде.
источник
Усреднитель стоимости доллара
(протестировано с Python 3.7)
Первый пост в Codegolf, так скажите мне, если я сделал что-то не так.
Основная идея состоит в том, чтобы купить одну акцию в каждом раунде, если это возможно, и продать все акции в конце.
источник
Эквалайзер
Распределяет свои финансовые ресурсы поровну между денежными средствами и акциями в каждом раунде, кроме последнего. Я считаю, что эта стратегия - математически обоснованный способ заработать хотя бы немного денег, но я могу ошибаться.
Могут быть или нет ошибки, которых я не поймал. Также несколько играл в гольф.
источник
p, n, b, r = map(float, argv[1:])
наp, n, b, r = map(int, argv[1:])
Обезьяны на пишущей машинке
Это кучка обезьян на пишущих машинках. Случайно продает или покупает акции X, где:
0 <= X <= 1,000,000
Работать с python3, но должен (?) Также работать с python2
источник
cmd=random.choose(['b','s'])
иnum = str(random.randint(0, 1000000))
?import lazy
from random import randint, choice;print("{}{}".format(choice(["b", "s"]), randint(0, 1e6)))
;-PКупить по низкой цене
(Python 2 или 3)
источник
Ложный Игрок
(Python 2 или 3)
источник
(Dyalog) APL Фермер
TradFn, который покупает каждую возможную акцию в первом раунде и продает только тогда, когда текущая цена акций выше, чем цена, за которую они были куплены. После продажи бот будет покупать только те акции, которые дешевле, чем цена, по которой он продал последние акции.
Это потому, что бухгалтер фермера сказал ему, что ты так делаешь на бирже. «Купи дешево, продай дорого» и все такое.
отказ
Это моя первая попытка бросить вызов KotH, и, поскольку я здесь делаю только APL, я решил продолжить.
Тем не менее, я не совсем уверен, сможет ли это работать вместе с другими ботами, так как это Tradfn, и его нельзя подавать напрямую в оболочку CMD / Bash.
Итак, чтобы запустить это в Bash, вам нужна следующая команда:
$ echo apl_stock_farmer args | dyalog 'stock_exchange.dws' -script
Где:
apl_stock_farmer
это имя функции, которая находится в первой строке кода.args
вектор аргументов, разделенных пробелами (в первом раунде это будет10 5 100 1
).dyalog
путь к исполняемому файлу Dyalog'stock_exchange.dws'
является именем (или путем, если файл не находится в том же каталоге, который открыта оболочкой) рабочей области, содержащей функцию. Этот файл рабочей области можно получить, открыв чистую рабочую область, набрав)ed apl_stock_farmer
, вставив приведенный выше код, а затем выполнив команду a)save <path>
. Я также могу предоставить этот файл рабочей области, если это будет проще.-script
это просто аргумент, который заставляет dyalog выполнять данный код и выводить на stdout без фактического открытия REPL.К сожалению, я не нашел способа заставить его работать с Windows CMD или Powershell, поэтому я запустил его с помощью Git Bash. Я не уверен, насколько возможно выставить этого бота на соревнование, но мне слишком нравится этот код, чтобы не публиковать его.
источник
Неграмотный Дивиденд Инвестор
Предполагается, что после дивидендов у людей появляется больше наличных, поэтому они с большей вероятностью будут покупать. Продает прямо до дивидендов, покупает сразу после. Проходит один цикл продажи / покупки в 3 других раунда.
источник
Покупайте / Реинвестируйте как можно больше!
Подобно моему усреднителю по долларовой стоимости, который, как ни странно, довольно средний, он покупает в каждом раунде столько акций, сколько доступно, и продает их только в последнем раунде.
источник
if balance > share_price-1000:
блоке или нет?Начинающий брокер (но получает основную идею)
se_stock_exchange.rb
:Ждет пока цена развернется, затем купит / продаст все. Я имею в виду, это то, что говорится в « Дневной торговле для чайников» . Это, вероятно, настоящая книга, и это, вероятно, кто-то может извлечь из нее .
Сохраняет данные в
se_stock_exchange.data
. Запустите сruby se_stock_exchange.rb ${SHARE_PRICE} ${SHARES} ${MONEY} ${ROUND}
(подставив соответствующие значения).источник
se_stock_exchange.rb:24:in `<main>': undefined method `+' for nil:NilClass (NoMethodError)
Половина больше или ничего
Я редко использую Python, дайте мне знать, если это вызывает ошибку где-то.
Стратегия заключается в том, чтобы подождать, пока цена акций не станет как минимум на 50% больше, чем цена в момент их покупки, затем продать их, а затем сразу же купить новые акции, чтобы они могли дождаться повышения цены новых акций.
Надеюсь,
люди-шимпанзе не начнут продавать акции ближе к концу ... (кажется, что большинство ботов просто ждут подходящего момента, что бы это ни было)источник
Фибоначчи
Я переписал это в Python 3, чтобы сделать вещи проще. С надеждой!
Он покупает половину максимального количества акций, которое доступно, когда раунд равен нечетному числу Фибоначчи, и продает половину доступных акций, когда раунд равен четному числу Фибоначчи, а также каждые 100 раундов. Продает все акции на 1000 раунде. В противном случае, он просто ждет. Покупает акции только при положительном балансе.
источник
Error in roundNum%%2 : non-numeric argument to binary operator Execution halted
Жадный B ***** d
Он пойдет олл-ин, когда будет дешево, и продаст все, как только цена поднимется ...
источник
sell()
которых принимается только одинРобот технического анализа
Я изучаю экономику бизнеса, поэтому я попытался реализовать самый простой метод анализа фондового рынка (технический анализ). Согласно теории, вам просто нужно проанализировать все минимумы графика, чтобы увидеть, есть ли тренд (вверх или вниз). Во время восходящего тренда вы должны покупать, а во время нисходящего тренда - продавать.
Я не думаю, что этот метод будет работать слишком хорошо, но давайте попробуем :)
Протестировано с python3
источник
Счастливый номер 6
РЕДАКТИРОВАТЬ: О боже, я думаю, что я не преобразование счетчика продаж в int была одной из моих проблем, ну что ж, мы снова здесь.
Вероятно, мой последний вклад, если я не скучаю на работе и не делаю что-то более изощренное, но я упал, словно опытные боты уже заполняют ниши.
Этот парень в основном продает часть своих акций каждые 6 раундов, потому что 6 - его счастливое число.
источник