Lý lịch
Bạn là tất cả các thương nhân cho một công ty chứng khoán ít uy tín hơn một chút. Tất cả các bạn là một phần của một nhóm các nhà giao dịch chỉ tập trung vào một cổ phiếu cụ thể.
Mỗi giờ mỗi nhà giao dịch có cơ hội Mua cổ phiếu X hoặc Bán cổ phiếu X. Có 50 giờ mỗi vòng và 3 vòng mỗi cuộc thi. Kết thúc tất cả các vòng, nhà giao dịch có giá trị trung bình cao nhất sẽ thắng một chuyến đi đến Jamaica!
Trò chơi
Có 3 vòng 50 lượt mỗi lượt.
Mỗi nhà giao dịch bắt đầu vòng đàm phán với 5000 đô la và Một số lượng cổ phiếu ngẫu nhiên từ 20 đến 30 cổ phiếu. Giá của các cổ phiếu bắt đầu ở một số ngẫu nhiên giữa 10 và 150.
Mỗi lượt, mỗi nhà giao dịch có thể Mua bất kỳ số lượng cổ phiếu nào họ có thể đủ khả năng hoặc Bán bất kỳ số lượng cổ phiếu nào họ đang nắm giữ, mỗi cổ phiếu với giá hiện tại trên mỗi cổ phiếu.
Giá mỗi cổ phiếu tăng thêm một số ngẫu nhiên từ 1 đến 5 cho mỗi cổ phiếu được mua và giảm theo giá trị ngẫu nhiên từ 2 đến 6 cho mỗi cổ phiếu được bán. Giá tối thiểu là $ 1.
Điều quan trọng cần lưu ý là tất cả các nhà giao dịch xử lý các giao dịch của họ cùng một lúc, có nghĩa là bất kỳ nhà giao dịch mua / bán cổ phiếu nào sẽ không ảnh hưởng đến giá cho đến lượt tiếp theo.
Người chơi có giá trị trung bình cao nhất khi kết thúc 3 vòng đấu sẽ thắng. Giá trị được xác định bằng cách lấy số tiền còn lại vào cuối vòng và thêm số lượng cổ phiếu thuộc sở hữu của thương nhân * đóng cửa thị trường.
Lập luận
Chương trình của bạn sẽ được chạy lại vào đầu mỗi lượt nhận giá thị trường hiện tại, số tiền hiện tại của nhà giao dịch và số cổ phần mà thương nhân đó sở hữu.
Vd
120 5000 0
Đầu ra
Chương trình giao dịch viên của bạn phải xuất một chữ cái tương ứng với hành động mà nó muốn thực hiện theo số lượng.
Vd
B10 //Buy 10 shares
hoặc là
S3 //Sell 3 shares
Người giao dịch cũng có tùy chọn không làm gì cả. Điều đó có thể được thực hiện bằng cách xuất W hoặc bất kỳ lệnh nào khác không phải là 'B> amnt <' hoặc 'S> amnt <'
Đệ trình
Chương trình của bạn sẽ nằm trong thư mục 'người chơi /> tên chương trình của bạn <':
+-- players
| +-- BotNameFolder
| +-- BotProgram
Vui lòng cung cấp mã của bạn cùng với một đối số dòng lệnh để chạy mã từ bên trong thư mục 'người chơi'. Ví dụ: người giao dịch Test1 có thể được chạy vớijava -cp "Test1" Test1
Quy tắc bổ sung
Hãy tiếp tục, tự bắn EmoWolf, Idc.
Không làm phiền với bất cứ điều gì bên ngoài thư mục BotNameFolder của bạn, vui lòng tạo các tệp trong đó mặc dù để có thông tin liên tục trong suốt vòng / lượt.
Không cố ý tạo chương trình để phá vỡ mô phỏng.
Tôi sẽ chấp nhận nhiều mục nhập cho mỗi người dùng, miễn là các mục đó đóng vai trò là các thực thể riêng biệt (Không có giao dịch nội gián).
Bảng xếp hạng
[java&-cp&"TestPlayer"&Test1]:$10027395221
[python&daydreamer/daydreamer.py]:$5000
[java&-cp&"DayTrader"&DayTrader]:$4713199930331196453
Tôi sẽ cố gắng cập nhật bảng xếp hạng ít nhất một lần một ngày
Bộ điều khiển
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;
}
}
Biên dịch cái này với java Controller.java
và chạy từ một thư mục chứa một thư mục như dưới đây:
+-- resources
| +-- config
| +-- players
| +-- Player1Folder
| +-- Player1Program
| +-- Player2Folder
| +-- Player2Program
Các tập tin config
sẽ trông giống như thế này:
3
50
java&-cp&"TestPlayer"&Test1
python&daydreamer/daydreamer.py
java&-cp&"DayTrader"&DayTrader
Số thứ nhất là số vòng, số thứ hai là lượt trên mỗi vòng, tiếp theo là các lệnh để chạy từng người chơi.
Thay thế không gian bằng ký hiệu! ('&')
~ Hãy cho tôi biết nếu tôi có thể cải thiện từ ngữ của bài đăng này, và giao dịch hạnh phúc!