Latar Belakang
Anda semua adalah pedagang untuk perusahaan saham yang sedikit kurang dari yang memiliki reputasi baik. Anda semua adalah bagian dari kelompok pedagang yang hanya fokus pada satu saham tertentu.
Setiap jam, setiap pedagang memiliki kesempatan untuk membeli saham X atau menjual saham X. Ada 50 jam per putaran dan 3 putaran per kompetisi. Pada akhir dari semua putaran, trader dengan nilai rata-rata tertinggi memenangkan perjalanan ke Jamaika!
Gameplay
Ada 3 putaran 50 putaran masing-masing.
Setiap trader memulai putaran dengan $ 5000 dan Sejumlah saham acak antara 20 dan 30 saham. Harga saham dimulai pada angka acak antara 10 dan 150.
Setiap belokan, setiap pedagang dapat Membeli sejumlah saham yang mereka mampu atau Jual sejumlah saham yang mereka miliki, masing-masing dengan harga saat ini per saham.
Harga per saham meningkat dengan angka acak antara 1 dan 5 untuk setiap saham yang dibeli dan berkurang dengan nilai acak antara 2 dan 6 untuk setiap saham yang dijual. Harga minimum adalah $ 1.
Penting untuk dicatat bahwa semua pedagang memproses transaksi mereka pada saat yang sama, artinya setiap pedagang yang membeli / menjual saham tidak akan mempengaruhi harga hingga belokan berikutnya.
Pemain dengan nilai rata-rata tertinggi di akhir 3 putaran menang. Nilai ditentukan dengan mengambil jumlah uang yang tersisa pada akhir putaran dan menambahkan jumlah saham yang dimiliki oleh pedagang * menutup harga pasar.
Argumen
Program Anda akan dijalankan kembali pada setiap awal giliran menerima harga pasar saat ini, jumlah uang pedagang saat ini dan jumlah saham yang dimiliki oleh pedagang itu.
Ex:
120 5000 0
Keluaran
Program pedagang Anda harus mengeluarkan surat yang sesuai dengan tindakan yang ingin diambil diikuti oleh kuantitas.
Ex:
B10 //Buy 10 shares
atau
S3 //Sell 3 shares
Pedagang juga memiliki opsi untuk tidak melakukan apa pun yang berubah. Itu bisa dicapai dengan mengeluarkan W atau perintah lain yang bukan 'B> amnt <' atau 'S> amnt <'
Pengajuan
Program Anda akan berada di dalam direktori 'players /> nama program Anda <':
+-- players
| +-- BotNameFolder
| +-- BotProgram
Harap berikan kode Anda bersama dengan argumen baris perintah untuk menjalankannya dari dalam direktori 'pemain'. Misalnya pedagang Test1 dapat dijalankanjava -cp "Test1" Test1
Aturan tambahan
Silakan, tembak dirimu EmoWolf, Idc.
Tidak main-main dengan apa pun di luar direktori BotNameFolder Anda, jangan ragu untuk membuat file di sana untuk info persisten sepanjang putaran / putaran.
Jangan sengaja membuat program untuk menghentikan simulasi.
Saya akan menerima beberapa entri per pengguna, selama entri tersebut bertindak sebagai entitas yang terpisah (Tidak ada perdagangan orang dalam).
Papan peringkat
[java&-cp&"TestPlayer"&Test1]:$10027395221
[python&daydreamer/daydreamer.py]:$5000
[java&-cp&"DayTrader"&DayTrader]:$4713199930331196453
Saya akan mencoba memperbarui leaderboard setidaknya sekali sehari
Pengendali
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Random;
public class Controller {
public static BigInteger marketValue = BigInteger.valueOf(100);
public static BigInteger newValue = BigInteger.valueOf(100);
public static final char BUY = 'B';
public static final char SELL = 'S';
public static final int MARKET_INDEX = 1;
public static final int MONEY_INDEX = 2;
public static final int SHARE_INDEX = 3;
public static int numRunning = 0;
public static final int MAX_RUNNING = 10;
public static void main(String[] args){
try {
BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream("resources/config")));
int numRounds = Integer.parseInt(br1.readLine());
int turnsPerRound = Integer.parseInt(br1.readLine());
//Create the array of players
List<String> players = new LinkedList<String>();
String line1 = null;
while((line1 = br1.readLine()) != null){
players.add(line1);
}
BigInteger[] totalVals = new BigInteger[players.size()];
for(int i = 0; i < totalVals.length; i++){
totalVals[i] = BigInteger.valueOf(0);
}
br1.close();
//Begin processing
for(int round = 0; round < numRounds; round++){
//Create players' shares and currency array
Map<String,BigInteger[]> vals = new HashMap<String, BigInteger[]>();
for(int i = 0; i < players.size(); i++){
vals.put(players.get(i), new BigInteger[]{BigInteger.valueOf(5000), BigInteger.valueOf(getRandInt(20,30))});
}
marketValue = BigInteger.valueOf(getRandInt(10,150));
newValue = marketValue;
for(int turn = 0; turn < turnsPerRound; turn++){
marketValue = newValue;
Queue<Object[]> processQueue = new LinkedList<Object[]>();
for(String playerKey : vals.keySet()){
BigInteger[] valSet = vals.get(playerKey);
String[] pkParts = playerKey.split("&");
String[] parts = new String[pkParts.length + 3];
for(int i = 0; i < pkParts.length; i++){
parts[i] = pkParts[i];
}
parts[pkParts.length] = marketValue + "";
parts[pkParts.length + 1] = valSet[0] + "";
parts[pkParts.length + 2] = valSet[1] + "";
processQueue.add(new Object[]{playerKey, parts});
}
while(!processQueue.isEmpty() || numRunning > 0){
if(numRunning < MAX_RUNNING && !processQueue.isEmpty()){
numRunning++;
Object[] o = processQueue.poll();
String pKey = (String)(o[0]);
String[] p = (String[])(o[1]);
try {
Process proc = new ProcessBuilder(p).directory(new File("resources/players").getAbsoluteFile()).start();
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = br.readLine();
br.close();
switch(line.charAt(0)){
case BUY :
BigInteger numShares = new BigInteger(line.substring(1).trim());
if(numShares.multiply(marketValue).compareTo(vals.get(pKey)[0]) <= 0){
BigInteger[] tempVals = vals.get(pKey);
tempVals[0] = tempVals[0].subtract(numShares.multiply(marketValue));
tempVals[1] = tempVals[1].add(numShares);
vals.put(pKey, tempVals);
newValue = newValue.add(numShares.multiply(BigInteger.valueOf(getRandInt(0,2))));
if(newValue.compareTo(BigInteger.valueOf(Integer.MAX_VALUE)) >= 1){
newValue = BigInteger.valueOf(Integer.MAX_VALUE - 1);
}
}
break;
case SELL:
BigInteger shares = new BigInteger(line.substring(1).trim());
if(shares.compareTo(vals.get(pKey)[1]) <= 0){
BigInteger[] tempVals = vals.get(pKey);
tempVals[0] = tempVals[0].add(shares.multiply(marketValue));
tempVals[1] = tempVals[1].subtract(shares);
vals.put(pKey, tempVals);
newValue = newValue.subtract(shares.multiply(BigInteger.valueOf(getRandInt(5,10))));
if(newValue.compareTo(BigInteger.valueOf(1)) <= -1){
newValue = BigInteger.valueOf(1);
}
}
break;
}
} catch (Exception e) {
System.err.println("[" + pKey + "] threw error:");
e.printStackTrace();
} finally{
numRunning--;
}
}else{
try{
Thread.sleep(50);
continue;
}catch(InterruptedException e){
continue;
}
}
}
System.out.println("Turn " + turn + " over: " + marketValue);
}
System.out.println("End of round market value is: " + marketValue);
int count = 0;
for(String player : vals.keySet()){
totalVals[count] = totalVals[count].add(vals.get(player)[0].add(vals.get(player)[1].multiply(marketValue)));
count++;
}
newValue = BigInteger.valueOf(100);
}
for(int i = 0; i < players.size(); i++){
System.out.println("[" + players.get(i) + "]:$" + (totalVals[i].divide(BigInteger.valueOf(numRounds))));
}
} catch (Exception e) {
System.err.println("An exception occured while running the controller.");
e.printStackTrace();
}
}
public static Random r = new Random(new Date().getTime());
public static int getRandInt(int min, int max){
return r.nextInt(max - min) + min;
}
}
Kompilasi ini dengan java Controller.java
dan jalankan dari direktori yang berisi direktori seperti di bawah ini:
+-- resources
| +-- config
| +-- players
| +-- Player1Folder
| +-- Player1Program
| +-- Player2Folder
| +-- Player2Program
File config
akan terlihat seperti ini:
3
50
java&-cp&"TestPlayer"&Test1
python&daydreamer/daydreamer.py
java&-cp&"DayTrader"&DayTrader
Angka pertama adalah jumlah putaran, angka kedua adalah putaran per putaran, diikuti oleh perintah untuk menjalankan setiap pemain.
Ganti spasi dengan ampersand! ('&')
~ Beri tahu saya jika saya dapat meningkatkan kata-kata dari posting ini sama sekali, dan selamat berdagang!
sumber
Jawaban:
Saya hadirkan 'lamunan', yang selalu tertidur dan lupa membeli atau menjual apa pun. Dia berharap pemain lain akan mengalami kerugian bersih. Kode python:
dijalankan dengan
python daydreamer\daydreamer.py 120 5000 0
atau nilai apa pun yang Anda inginkan.Saya akan mengirim jawaban yang lebih serius nanti, ini hanya untuk membuat bola bergulir :)
sumber
DayTrader
Diperbarui untuk perubahan aturan yang dibuat pada 8/21/2014, di mana pemain sekarang mulai dengan 20-30 saham.
Beli sebanyak mungkin, lalu jual sebanyak mungkin.
Filsafat
Kami berharap pola di bawah ini akan berulang berulang kali. Perhatikan bahwa dengan mengikuti pola ini, kami juga berkontribusi padanya.
Polanya jernih di awal. Nilai akan meningkat setelah satu putaran. Seharusnya berkurang setelah putaran kedua. Di luar itu, proyeksi menjadi kabur. Saya berharap untuk melakukannya dengan baik di putaran awal, sebelum pasar stabil.
Kompilasi dengan
javac DayTrader.java
. Jalankan denganjava -cp "DayTrader" DayTrader
.sumber
Walt Disney - Python 3
Walt menunggu sampai saham mencapai titik terendah dan kemudian membeli sebanyak uangnya memungkinkan. Lalu, ketika harganya melambung, dia menjual semuanya.
Berdasarkan strategi Disney ketika dia 'selamat' melalui Wall Street Crash. Sayangnya, program saya tidak dapat membangun taman hiburan ... Jika saja ...
Menjalankan:
Kode:
sumber
Tommy
hanya tahu apa yang dia miliki tetapi bertekad untuk mempertaruhkan segalanya di pasar. Jika dia bisa membeli, dia akan melakukannya. Jika dia tidak bisa, dia menjual semua yang dia miliki sehingga dia bisa giliran berikutnya. (Ini akan bekerja dengan baik dengan yang ekstrem seperti DayTrader tetapi akan mengoreksi otomatis jika nilainya turun ketika ia berpikir itu akan tumbuh.)
Naskah Golf
Ini adalah kode yang sama tetapi jika lebih suka ini. Saya menulis java setelah dalam kasus hal BigInteger diperlukan. Gunakan apa pun yang lebih mudah.
sumber
BuyAndHold - C
Kompilasi dengan: gcc buyandhold.c -o buyandhold
Jalankan dengan ./buyandhold HARGA UANG SAHAM
sumber
Alfred Pennyworth - Python 2
Ketika saya sedang berpatroli suatu malam, Alfred mencoba membuat program perdagangan saham tanpa sepengetahuan saya. Dia pikir dia bisa menyembunyikannya dari saya, tetapi saya menemukannya dan mencari tahu apa fungsinya. Karena aku Batman. Sekarang saya telah memutuskan untuk memasukkannya ke dalam kompetisi untuk memberinya pelajaran.
Uang bukan masalah bagi Alfred karena saya BENAR-BENAR kaya, tetapi dia masih pintar tentang perdagangannya. Ketika dia kehabisan saham, dia membeli sebanyak yang dia mampu, terlepas dari harga pasar. Kemudian dia menjual 10 (atau semua yang tersisa) saham setiap kali harga pasar lebih tinggi dari harga yang dibeli.
Jalankan dengan:
python GoAwayMasterBruce.py <args>
sumber
AttributeError: 'ArgumentParser' object has no attribute 'parseargs'
Versi Python mana yang dibutuhkan?parse_args()
NaifBot
NaiveBot adalah baru untuk semua ini "pasar saham" hooplah. Dia hanya berasumsi bahwa ketika harga naik dia harus membeli, dan ketika harga turun dia harus menjual. Tapi dia bukan getah, dia punya trik di lengan bajunya! Dia hanya pernah membeli setengah dari apa yang dia mampu, dan hanya pernah menjual setengah dari apa yang dia miliki.
Tidak lagi tinggal di dalam kotak di bawah jalan bebas hambatan untuk NaiveBot!
Jalankan dengan
php Naivebot.php $1 $2 $3
, buatcache.json
di folder saat ini.sumber
Keuntungan - Haskell
Kompilasi dengan
ghc profit.hs
dan jalankan./profit price money stock
.Jika tidak cukup efisien, tambahkan
-O3
flag, meskipun mungkin berlebihan: DEdit:
"dioptimalkan", sekarang menjual semuanya ketika harganya sama dengan
Integer.MAX_VALUE
.sumber
main = putStrLn . trade . map read =<< getArgs
? Kurang berisikcabal install pointfree
,, sekarang semua orang akan berpikir Anda makan monad untuk sarapan.WaitForCrash
EDIT: cacat tetap dalam konsep
EDIT: sekarang menggunakan int panjang
Ini adalah percobaan pertamaku. Berperilaku sangat sederhana dan membuat satu bagian untuk membedakan apakah itu babak pertama atau yang berikutnya. Di babak pertama tidak ada yang bisa hilang, jadi ia membeli saham. Jika memiliki saham, mereka menjualnya. Jika pada akhirnya harga saham turun menjadi 10, itu akan membeli lagi.
kompilasi dengan:
gcc waitforcrash.c -o waitforcrash
jalankan sebagai
./waitforcrash PRICE MONEY SHARES
sumber
Gempa bumi
Bergantian antara membeli segala sesuatu dan menjual segala sesuatu (kecuali satu). Itu tidak benar-benar bertujuan untuk menang sebanyak itu mengganggu orang lain.
Kompilasi dengan
csc Earthquaker.cs
. Jalankan denganEarthquaker
.sumber
System.IO.File.ReadAllText
danWriteAllText
, sehingga Anda dapat menyederhanakan pelacakan riwayat Anda sedikit.brain.txt
file -nya .MonkeyTrader (dalam JAWA)
Ada pepatah yang mengatakan bahwa monyet adalah pedagang yang baik. Saya buktikan. Keputusan antara "beli" dan "jual" benar-benar acak.
sumber
IntelliTrader
Putaran pertama ia akan menjual sahamnya jika harganya bagus: $ 80 atau lebih. Kemudian dia akan menjual jika harganya sama atau lebih baik dari harga terakhir yang dijualnya, beli jika harganya sama atau lebih rendah dari harga terakhir yang dibelinya.
IntelliTrader.java
Kompilasi dengan javac IntelliTrader . Jalankan dengan java -cp "IntelliTrader" IntelliTrader
sumber
theAnswerOfLifeIs42.py
Program saya suka nomor 42
Aturannya sederhana: Saya bisa membeli 42 saham atau menjual 42 saham.
sumber
LeesonLearnt v1.1 (Jawa, konservatif)
Karena perubahan aturan berarti bahwa kita sekarang mulai dengan beberapa saham, tidak ada lagi langkah pertama yang dijamin terbaik, jadi saya telah menyederhanakan ini dengan menghapus kasing khusus untuk belokan pertama.
Diminta sebagai
sumber
Dollar Cost Averager - Python 3
Strategi ini mencoba untuk menggunakan rata-rata biaya dolar dengan membeli (sedekat mungkin) sejumlah uang tetap (ditetapkan secara sewenang-wenang pada 150 sehingga mungkin akan menggunakan sebagian besar uangnya pada akhir) setiap belokan.
sumber
Cash Is King - Python 2 atau 3
Lelaki ini sangat pesimis dengan pasar saham. Dia lebih suka menyimpan uangnya di kas di mana dia bisa menyimpannya dengan aman di bawah kasurnya.
sumber
Pelan dan pasti
Selama punya uang, ia membeli saham senilai $ 165. Kalau tidak, ia menjual semua sahamnya untuk mendapatkan lebih banyak uang, untuk membeli lebih banyak saham. Pada putaran ke-50 itu memastikan untuk menjual semua saham, karena pada akhirnya kami ingin uang tunai.
Kompilasi dengan javac SlowAndSteady.java. Jalankan dengan java -cp "SlowAndSteady" SlowAndSteady. Penghitung harus diatur ulang di antara putaran, tetapi jika file dihapus, itu juga akan berfungsi.
sumber
BeliHighMenjual Rendah
Telusuri sejarah pasar dan beli saat harga rendah dan jual saat tinggi.
Jalankan dengan:
sumber
Waktu Tepat - Python 3
Saya bosan jadi saya menulis peserta lain ...
Pengusaha muda ini menjalani hidupnya setiap saat. Ketika waktunya tepat, dia membuat keputusan. Dia juga menggunakan bahasa Prancis di luar konteks ...;)
Menjalankan:
Kode:
sumber
Pengatur Waktu Ol - Fortran 77
Orang tua ini akan menyia-nyiakan pensiunnya setelah enam puluh tahun bekerja sebagai pegawai kantor. Namun, selama usia tuanya, dia menjadi sangat buta, jadi dia hanya bisa melihat dia nomor pertama dari setiap argumen, jadi dia memperkirakan harganya. Metodenya mirip dengan Walt, kecuali Timer Ol 'sedikit lebih ceroboh.
Karena masalah dengan pencetakan Fortran, saya telah menulis program Python yang akan membantu. Program mengambil argumen yang disediakan dan mengirimkannya ke program Fortran. Kemudian, program Python memformat ulang output ke format yang diharapkan.
Menyusun:
Menjalankan:
Kode Asisten Python:
FORTRAN Kode Utama:
sumber
Trader Test1
Kompilasi dengan
javac Test1.java
run withjava -cp "Test1" Test1
sumber
Landak - python2.7
Ini sebagian besar untuk memesan nama
Jalankan sebagai
sumber
BuyAndSell - C
Mirip tapi bukan duplikat Tommy. Berganti-ganti antara panik membeli sebanyak mungkin dan menjual semuanya. Hampir duplikat Earthquaker yang mempertahankan satu saham sementara BuyAndSell menjual semua saham. BuyAndSell tidak melakukan tindakan ketika tidak memiliki saham untuk dijual tetapi tidak punya cukup uang untuk membeli satu saham.
Kompilasi dengan "gcc buyandsell.c -o buyandsell"
Jalankan sebagai "./buyandsell PRICE MONEY SHARES
sumber
Gorge Soros
Beli perlahan, daripada menjual segala sesuatu dalam upaya menghancurkan pasar.
Jalankan dengan:
Soros.rb price money stock
sumber
Do not intentionally create programs to crash the simulation.