ตลาดหลักทรัพย์แลกเปลี่ยนกอง ~ แก้ไข [ปิด]


35

พื้นหลัง

คุณเป็นผู้ค้าทั้งหมดสำหรับ บริษัท หลักทรัพย์ที่มีชื่อเสียงน้อยกว่าเล็กน้อย คุณทุกคนเป็นส่วนหนึ่งของกลุ่มผู้ค้าที่มุ่งเน้นเฉพาะหุ้นหนึ่ง ๆ

ทุก ๆ ชั่วโมงผู้ซื้อขายแต่ละรายมีโอกาสที่จะซื้อหุ้น X หรือขายหุ้น X มี 50 ชั่วโมงต่อรอบและ 3 รอบต่อการแข่งขัน ในตอนท้ายของทุกรอบผู้ซื้อขายที่มีค่าเฉลี่ยสูงสุดชนะการเดินทางไปจาเมกา!

เพลย์

แต่ละรอบมี 3 รอบ 50 รอบ

ผู้ค้าแต่ละคนจะเริ่มรอบด้วย $ 5,000 และสุ่มจำนวนหุ้นระหว่าง 20 และ 30หุ้น ราคาของหุ้นเริ่มต้นที่ตัวเลขสุ่มระหว่าง 10 และ 150

แต่ละครั้งที่ผู้ซื้อขายแต่ละรายสามารถซื้อจำนวนหุ้นใดก็ได้ที่พวกเขาสามารถจ่ายได้หรือขายจำนวนหุ้นใด ๆ ที่พวกเขาถืออยู่ในปัจจุบันสำหรับแต่ละราคาปัจจุบันต่อหุ้น

ราคาต่อหุ้นจะเพิ่มขึ้นเป็นตัวเลขสุ่มระหว่าง 1 ถึง 5 สำหรับแต่ละหุ้นที่ซื้อและลดลงด้วยมูลค่าสุ่มระหว่าง 2 และ 6 สำหรับแต่ละหุ้นที่ขาย ราคาขั้นต่ำคือ $ 1

สิ่งสำคัญคือให้สังเกตว่าผู้ค้าทุกคนทำธุรกรรมของพวกเขาในเวลาเดียวกันหมายความว่าผู้ค้าที่ซื้อหรือขายหุ้นจะไม่ส่งผลกระทบต่อราคาจนกว่าจะถึงเทิร์นถัดไป

ผู้เล่นที่มีค่าเฉลี่ยสูงสุดในตอนท้ายของ 3 รอบชนะ มูลค่าถูกกำหนดโดยนำจำนวนเงินที่เหลืออยู่ในตอนท้ายของรอบและเพิ่มจำนวนหุ้นที่เป็นเจ้าของโดยราคาตลาดปิดของผู้ค้า *

ข้อโต้แย้ง

โปรแกรมของคุณจะถูกเรียกใช้ซ้ำในตอนเริ่มต้นของแต่ละรอบที่ได้รับราคาตลาดปัจจุบันจำนวนเงินปัจจุบันของผู้ซื้อขายและจำนวนหุ้นที่เป็นของผู้ซื้อขายรายนั้น

Ex:

120 5000 0

เอาท์พุต

โปรแกรมผู้ประกอบการค้าของคุณจะต้องส่งออกจดหมายที่สอดคล้องกับการกระทำที่ต้องการดำเนินการตามปริมาณ

Ex:

B10 //Buy 10 shares

หรือ

S3 //Sell 3 shares

ผู้ค้ายังมีตัวเลือกที่จะไม่ทำอะไรเลย ที่สามารถทำได้โดยการส่งออก W หรือคำสั่งอื่น ๆ ที่ไม่ใช่ 'B> amnt <' หรือ 'S> amnt <'

การส่ง

โปรแกรมของคุณจะอยู่ในไดเรกทอรี 'players /> ชื่อโปรแกรมของคุณ <':

+-- players
|   +-- BotNameFolder
|       +-- BotProgram   

โปรดระบุรหัสของคุณพร้อมกับอาร์กิวเมนต์บรรทัดคำสั่งเพื่อเรียกใช้จากในไดเรกทอรี 'เครื่องเล่น' ตัวอย่างเช่นผู้ค้า Test1 สามารถใช้งานได้java -cp "Test1" Test1

กฎเพิ่มเติม

เอาเลยยิงเอง EmoWolf, Idc

ไม่ยุ่งกับสิ่งใดนอกจากไดเรกทอรี BotNameFolder ของคุณอย่าลังเลที่จะสร้างไฟล์ในนั้นแม้ว่าจะมีข้อมูลถาวรตลอดทั้งรอบ / รอบ

อย่าจงใจสร้างโปรแกรมเพื่อจำลองการทำงานผิดพลาด

ฉันจะยอมรับรายการหลายรายการต่อผู้ใช้ตราบใดที่รายการนั้นทำหน้าที่เป็นหน่วยงานที่แยกจากกัน (ไม่มีการซื้อขายวงใน)

ลีดเดอร์บอร์ด

[java&-cp&"TestPlayer"&Test1]:$10027395221
[python&daydreamer/daydreamer.py]:$5000
[java&-cp&"DayTrader"&DayTrader]:$4713199930331196453

ฉันจะพยายามอัปเดตกระดานแต้มนำอย่างน้อยวันละครั้ง

ตัวควบคุม

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;
    }
}

รวบรวมสิ่งนี้ด้วยjava Controller.javaและเรียกใช้จากไดเรกทอรีที่มีไดเรกทอรีดังนี้

+-- resources
|   +-- config
|   +-- players
|       +-- Player1Folder
|           +-- Player1Program
|       +-- Player2Folder
|           +-- Player2Program

ไฟล์configควรมีลักษณะดังนี้:

3
50
java&-cp&"TestPlayer"&Test1
python&daydreamer/daydreamer.py
java&-cp&"DayTrader"&DayTrader

หมายเลขแรกคือจำนวนรอบจำนวนที่สองจะหมุนต่อรอบตามด้วยคำสั่งเพื่อเรียกใช้ผู้เล่นแต่ละคน

แทนที่ช่องว่างด้วยเครื่องหมายแอมเปอร์แซนด์! ( '&')

~ แจ้งให้เราทราบหากฉันสามารถปรับปรุงถ้อยคำของโพสต์นี้และการซื้อขายที่มีความสุข!


4
ดูเหมือนว่าแนวโน้มระยะยาวในตลาดที่วุ่นวายจะเห็นส่วนแบ่งมีมูลค่าติดลบ
ปีเตอร์เทย์เลอร์

6
คุณสามารถวางโปรแกรมคอนโทรลเลอร์ของคุณในรูปแบบ Github และใส่ลิงค์เพื่อให้เราทดสอบที่บ้าน
Peter Taylor

6
ดูลีดเดอร์บอร์ดฉันคิดว่าเกมนี้มีข้อบกพร่อง เช่นเริ่มต้นที่ $ 14 / sh ซื้อ 357 (ของตัวเอง 357, $ 0 ในธนาคาร) เลือกหมายเลขสุ่ม (3) ราคาสูงขึ้น 3 * 357 ถึง $ 1,085 / sh รอบต่อไป ขายหุ้นทั้งหมด 357 หุ้น (เป็นเจ้าของ 0, $ 387,345 ในธนาคาร) เลือกหมายเลขสุ่ม (3) ราคาลดลง 3 * 357 ถึง $ 14 / sh รอบต่อไป หลังจากสองรอบราคาจะไม่เปลี่ยนแปลงและธนาคารของคุณได้เพิ่มขึ้น 77x (คล้ายกัน แต่อาจให้ผลลัพธ์ที่น่าทึ่งน้อยกว่าด้วยตัวแปรสุ่มเริ่มต้นอื่น ๆ ) ฉันเสนอให้เปลี่ยนเป็นสำหรับแต่ละธุรกรรมแทนสำหรับแต่ละหุ้นเพื่อค่าที่สมเหตุสมผลมากขึ้น

4
หรือเพียงแค่สร้างหนังสือสั่งซื้อจริง
o0 '

3
ทำไมเริ่มด้วยการสุ่มเลือกจำนวนหุ้น?
Averroes

คำตอบ:


18

ฉันนำเสนอ 'เดย์ดรีมเมอร์' ที่หลับอยู่ตลอดเวลาและลืมซื้อหรือขายอะไร เขาหวังว่าผู้เล่นคนอื่นจะมีผลขาดทุนสุทธิ รหัสหลาม:

if __name__ == "__main__":
    print "W"

ทำงานด้วยpython daydreamer\daydreamer.py 120 5000 0ค่าอะไรก็ได้ที่คุณต้องการ

ฉันจะโพสต์คำตอบที่จริงจังมากขึ้นในภายหลังนี่เป็นเพียงเพื่อให้ลูกบอลกลิ้ง :)


3
ฉันไม่คิดว่าจะทำงาน - คุณต้องเยื้องการพิมพ์
isaacg

6
ระบุว่าราคาหุ้นมีแนวโน้มที่จะลดลงในระยะยาวการซื้อขายไม่ใช่อาจเป็นกลยุทธ์ที่ยอดเยี่ยม

5
เกมที่แปลกประหลาด: ท่าที่ชนะเท่านั้นไม่ได้เล่น เกมหมากรุกที่ดีล่ะ?
Tim S.

13

DayTrader

อัปเดตสำหรับการเปลี่ยนแปลงกฎเมื่อวันที่ 8/21/2557 ซึ่งผู้เล่นเริ่มต้นด้วยการแชร์ 20-30 ครั้ง

ซื้อให้มากที่สุดแล้วขายให้มากที่สุด

ปรัชญา

เราหวังว่ารูปแบบด้านล่างจะซ้ำรอยซ้ำไปซ้ำมา โปรดทราบว่าด้วยการยึดตามรูปแบบนี้เราจึงมีส่วนร่วม

  • ทุกคนสามารถซื้อหรือพักรอบเดียวเท่านั้น มูลค่าสามารถเพิ่มได้ดังนั้นเราจึงซื้อ
  • ทุกคนสามารถซื้อมากขึ้นถือหรือขายในรอบที่สอง เราไม่คาดหวังว่าผู้เล่นหลายคนจะซื้อในรอบที่สองดังนั้นเราจึงขาย

ลวดลายมีความใสตั้งแต่แรก มูลค่าจะเพิ่มขึ้นหลังจากรอบที่หนึ่ง มันควรจะลดลงหลังจากรอบที่สอง นอกเหนือจากนั้นการฉายภาพก็เลือน ฉันคาดว่าจะทำได้ดีในรอบแรกก่อนที่ตลาดจะทรงตัว

import java.math.BigInteger;

/**
 * Submission for http://codegolf.stackexchange.com/q/36515/18487
 * @author Rainbolt
 */
public class DayTrader {

    /**
     * @param args the command line arguments containing the current 
     * market value, our current money, and our current shares
     */
    public static void main(String[] args) {
        BigInteger marketValue = new BigInteger(args[0]);
        BigInteger myMoney = new BigInteger(args[1]);
        BigInteger myShares = new BigInteger(args[2]);

        // If we have less than or equal to 30 shares, buy as much as possible
        if (myShares.compareTo(new BigInteger("30")) <= 0) {
            System.out.println("B" + myMoney.divide(marketValue).toString());
        // Otherwise, sell as much as possible
        } else {
            System.out.println("S" + myShares.toString());
        }
    }

}

javac DayTrader.javaคอมไพล์ด้วย java -cp "DayTrader" DayTraderทำงานด้วย


1
Yay java! ทำให้ฉันวิ่งได้ง่ายขึ้น
spocot

6
บอตของคุณทำให้ตลาดขยายเกินจำนวนสูงสุดสำหรับจำนวนเต็มดังนั้นฉันจึงใช้ BigIntegers เป็นรหัส เนื่องจากรหัสของทุกคนใช้ ints มันจึงส่งผลค่อนข้างแย่บอททุกคนเก็บไว้สำหรับผู้ฝันกลางวัน
spocot

@spocot ฉันแก้ไขการติดตั้งใช้ BigInteger หวังว่าจะช่วยได้
Rainbolt

5
ฉันคิดว่านี่เป็นปัญหาโดยธรรมชาติในกฎ หากผู้ซื้อขายรายหนึ่งมีจำนวน 140 หุ้นเขาสามารถควบคุมตลาดได้ด้วยตัวเอง ในสองรอบเขาสามารถซื้อหุ้นได้ 10 คนและขายพวกเขาในราคา 140 ต่อคนนำไปสู่การชนะ 1,300% (สมมติว่าไม่มีใครทำตรงกันข้าม) สิ่งนี้จะทวีความรุนแรงขึ้นเช่น 5000 * 13 ^ 25 ซึ่งเป็นวิธีที่ใหญ่
Optokopper

2
@spocot ฉันแค่ต้องการ ping คุณเพราะฉันแก้ไขการส่งหลังจากการเปลี่ยนแปลงกฎล่าสุดของคุณ
Rainbolt

9

Walt Disney - Python 3

วอลท์รอจนกระทั่งหุ้นพุ่งเข้ามาถึงจุดต่ำสุดแล้วซื้อให้มากที่สุดเท่าที่เงินของเขาจะอนุญาต จากนั้นเมื่อราคาสูงขึ้นเขาขายพวกเขาทั้งหมด

ตามกลยุทธ์ของดิสนีย์เมื่อเขา 'รอดชีวิต' ผ่านทาง Wall Street Crash น่าเสียดายที่โปรแกรมของฉันไม่สามารถสร้างสวนสนุก ... ถ้าเพียง ...

วิ่ง:

python3 waltdisney.py

รหัส:

from sys import argv
import os

price=int(argv[1])
money=int(argv[2])
share=int(argv[3])

if os.path.exists('./buyingprice.txt'):
    f = open('buyingprice.txt', 'r')
    buyingprice=int(f.read())
    f.close()
else:
    buyingprice=0

if share > 0:
    if price > buyingprice*10:
        print('S'+str(share))
    else:
        print('W')
elif money > 0:
    if buyingprice==0:
        print('B10')
        m=open('buyingprice.txt', 'w')
        m.write(str(price))
        m.close()
    elif price <= buyingprice:
        print('B'+str(int(money/price)))
        g=open('buyingprice.txt', 'w')
        g.write(str(price))
        g.close()
    else:
        print('W')

คุณไม่มีวงเล็บปิดในบรรทัดการพิมพ์แรกของคุณ
supersam654

@ supersam654 โอ้ใช่แล้วขอบคุณ
Beta Decay

คุณช่วยชี้ให้เห็นแหล่งที่มาสำหรับการยืนยันของคุณว่า Walt Disney ใช้กลยุทธ์นี้จริง ๆ หรือไม่ เนื่องจากมี บริษัท ชื่อ Walt Disney Co ในตลาดหลักทรัพย์จึงเป็นเรื่องยากที่จะค้นหาและหน้าวิกิพีเดียของ Walt ไม่ได้กล่าวถึง
Michael


@Michael ฉันได้รับข้อมูลจากครูสอนประวัติศาสตร์ของฉันแล้วดังนั้นขออภัยหากแหล่งข้อมูลนั้นอ่อนแอ
สลายตัวเบต้า

8

ทอมมี่

เพียงรู้ว่าเขามีอะไร แต่มุ่งมั่นที่จะเสี่ยงทุกอย่างในตลาด ถ้าเขาสามารถซื้อเขาจะ ถ้าเขาทำไม่ได้เขาจะขายทุกอย่างที่เขามีเพื่อที่เขาจะได้กลับไปได้ (สิ่งนี้จะทำงานได้ดีกับเครื่องมือที่มีประสิทธิภาพมากเช่น DayTrader แต่จะแก้ไขอัตโนมัติหากค่าลดลงเมื่อเขาคิดว่ามันจะโตขึ้น)

import java.math.BigInteger;

public class Tommy {
    public static void main(String[] args) {
        BigInteger Value = new BigInteger(args[0]);
        BigInteger Money = new BigInteger(args[1]);
        BigInteger Shares = new BigInteger(args[2]);

       if (Money.compareTo(Value)<1) {
           System.out.print("S" + Shares.toString());
       } else {
           System.out.print("B" + Money.divide(Value).toString());
       }
    }

}

Golfscript

นี่คือรหัสเดียวกัน แต่หากต้องการสิ่งนี้ ฉันเขียน java หลังจากนั้นในกรณีที่จำเป็นต้องใช้ BigInteger ใช้สิ่งที่ง่ายกว่า

2$2$>{@@;;"S"\}{;\/"B"\} if

สำหรับการอ้างอิงในอนาคตตัวเลขทั้งหมดใน GS เป็นจำนวนเต็มขนาดใหญ่
Peter Taylor

ฉันเดาว่าฉันจะได้โพสต์ต้นฉบับโดยไม่ต้องกังวลเกี่ยวกับมันแล้ว! ข่าวดี.
kaine

ตอนแรกฉันแสดงความคิดเห็นว่าฉันคิดว่านี่เป็นสิ่งที่ซ้ำกันของ DayTrader แต่จากนั้นฉันก็ตระหนักว่าพฤติกรรมดังกล่าวเป็นเพียงเพราะสถานการณ์เดียวกันและพวกเขาสามารถแยกแยะได้ในสถานการณ์อื่น ขออภัยถ้าฉันโกรธใคร มารวยกันเถอะ!
Rainbolt

@Rainbolt ฉันเขียน GolfScript อ่านของคุณที่กำลังมองหารายการที่ซ้ำกันก่อนที่จะส่งและใช้จริงหรือบางส่วนรหัสของคุณเพื่อเขียนเวอร์ชัน Java ส่วนแกนไม่ใช่สิ่งที่ซ้ำกัน (หรือฉันจะไม่ส่ง) แต่ท้ายที่สุดก็กลายเป็นสิ่งที่คล้ายคลึงกันในตลาด volitile เหล่านี้ ฉันไม่ได้โกรธเคือง แต่ถ้าคุณรู้สึกว่ามันใกล้เกินไปฉันจะขอให้ตัดสิทธิ์ (แต่รหัสยังคงอยู่ฉันเรียนรู้บางสิ่งบางอย่างที่เขียนไว้ซึ่งเป็นประเด็นทั้งหมด) ในขณะที่คุณมีความสำคัญฉันจะไม่โกรธแม้ในกรณีที่ หมายเหตุ Earthquakers เกือบจะเหมือนกับคุณ แต่แตกต่างกัน (บันทึกลงไฟล์)
kaine

@kaine ไม่ไม่ลบ เช่นฉันกล่าวว่าผมคิดว่าพวกเขาเป็นที่ซ้ำกัน แต่พวกเขาแน่นอนไม่ได้ พวกมันคล้ายกันในพฤติกรรมเท่านั้นเนื่องจากสถานการณ์ ฉันผิดที่โพสต์ความคิดเห็นโดยอ้างว่าพวกเขาซ้ำซ้อนก่อนที่ฉันจะเข้าใจอย่างถ่องแท้ว่าคุณกำลังทำอะไรอยู่
Rainbolt

6

ซื้อและถือ - C

#include <stdio.h>
#include <stdlib.h>

/* BuyAndHold
 * Code revised from OptoKopper's WaitForCrash.c
 */
int main(int argc, char *argv[]) {
    long long int share_price = strtoll(argv[1], NULL, 0);
    long long int money = strtoll(argv[2], NULL, 0);

    if (money >= share_price) {
        printf("B%lld\n", money / share_price);
    } else {
        printf("W\n");
    }

    return 0;
}

รวบรวมกับ: gcc buyandhold.c -o buyandhold

เรียกใช้ด้วย. / ผู้ถือหุ้นราคาหุ้นราคา


1
ฮ่าฮ่าฉันหวังว่าบางคนจะเสริม DayTrader ด้วย BuyAndHold ทำได้ดี!
Rainbolt

6

Alfred Pennyworth - Python 2

ในขณะที่ฉันออกไปลาดตระเวนคืนหนึ่งอัลเฟรดพยายามสร้างโปรแกรมการซื้อขายหุ้นโดยที่ฉันไม่รู้ เขาคิดว่าเขาสามารถซ่อนมันได้จากฉัน แต่ฉันพบมันและคิดออกว่ามันทำอะไร เพราะฉันเป็นแบทแมน ตอนนี้ฉันตัดสินใจที่จะเข้าร่วมการแข่งขันเพื่อสอนบทเรียนให้เขา

เงินไม่ใช่วัตถุของอัลเฟรดเพราะฉันรวยจริงๆ แต่เขาก็ยังฉลาดเกี่ยวกับการซื้อขายของเขา เมื่อเขาออกจากหุ้นเขาซื้อให้มากที่สุดเท่าที่จะทำได้โดยไม่คำนึงถึงราคาตลาด จากนั้นเขาขายหุ้น 10 (หรือทั้งหมดที่เหลือ) ทุกครั้งที่ราคาตลาดสูงกว่าราคาที่ซื้อ

import argparse

parser = argparse.ArgumentParser(description="This is a private matter, Master Bruce. Learn how to make your own bed and I will tell you.")
parser.add_argument("Stuff", type=int, nargs='+', help="You don't need to know, Master Bruce.")

args=parser.parse_args()
vals=[]
for x in args:
    vals.append(x)

a=vals[0]
b=vals[1]
c=vals[2]

if c==0:
    x=1
    while x*a<b:
        x+=1
    print "B"+str(x)
    with open("lastval.txt", w) as f:
        f.write(a)

else:
    lastval=next(open("lastval.txt"))
    if a>lastval:print "S10" if c>10 else "S"+str(c)
    else:print 'W'

ทำงานด้วย: python GoAwayMasterBruce.py <args>


AttributeError: 'ArgumentParser' object has no attribute 'parseargs'Python เวอร์ชันใดที่ต้องการ?
Peter Taylor

ความผิดพลาดของฉันมีขีดล่าง parse_args()
RageCage

5

NaiveBot

NaiveBot เป็นของใหม่สำหรับ "ตลาดหุ้น" hooplah เขาแค่คิดว่าเมื่อราคาสูงขึ้นเขาควรซื้อและเมื่อราคาลดลงเขาก็ควรขาย แต่เขาไม่มีปัญญาเขามีแขนเสื้อขึ้น! เขาซื้อเพียงครึ่งเดียวของที่เขาสามารถซื้อได้และขายเพียงครึ่งเดียวของที่มี

ไม่มีการอาศัยอยู่ในกล่องใต้ทางด่วนสำหรับ NaiveBot อีกต่อไป!

<?php
$cur = array('price' => $argv[1], 'funds' => $argv[2], 'shares' => $argv[3]);

$cachefile = 'cache.json';
if( ! file_exists($cachefile) ) { $cache = array(); }
else { $cache = json_decode(file_get_contents($cachefile), true); }

// determine action
if( empty($cache) ) {
    $action = 'buy'; // always buy on first turn
} else if( $cur['price'] > $cache[count($cache)-1]['price'] ) {
    $action = 'buy';
} else if( $cur['price'] < $cache[count($cache)-1]['price'] ) {
    $action = 'sell';
} else {
    $action = 'hold';
}

// determine volume
if( $action == 'hold' ) {
    $volume = 0;
} else if( $action == 'buy' ) {
    // spend half my money on shares!
    $volume = floor(($cur['funds']/2)/$cur['price']);
} else if( $action == 'sell' ) {
    // sell half my shares!
    $volume = floor($cur['shares']/2);
}

// do a thing!
if( $action == 'hold' ) { echo 'W'; }
else if( $action == 'buy' ) { echo "B $volume"; }
else { echo "S $volume"; }
echo "\n";

$cache[] = $cur;
if( count($cache) == 50 ) { unlink($cachefile); } // wipe cache on last turn
else { file_put_contents($cachefile,json_encode($cache)); } // write cache

ทำงานด้วยphp Naivebot.php $1 $2 $3ทำให้cache.jsonในโฟลเดอร์ปัจจุบัน


5

กำไร - Haskell

  1. รอจนกระทั่งราคาเท่ากับ 1 / maxValue
  2. ซื้อ / ขายทุกอย่าง
  3. ????
  4. กำไร!!!

import System.Environment (getArgs)

main = putStrLn . trade . map read =<< getArgs

trade :: [Integer] -> String
trade [p,m,s] -- not intended
  | p == 1 = "B" ++ (show m)
  | p == (fromIntegral $ (maxBound::Int) - 1) = "S" ++ (show s)
  | otherwise = "W"

รวบรวมและทำงานด้วยghc profit.hs./profit price money stock

หากประสิทธิภาพไม่เพียงพอให้เพิ่มการ-O3ตั้งค่าสถานะแม้ว่าอาจเป็น overkill: D


แก้ไข:

"ที่ดีที่สุด" Integer.MAX_VALUEตอนนี้ขายทุกอย่างเมื่อราคาจะเท่ากับ


ทำไมไม่main = putStrLn . trade . map read =<< getArgs? มีเสียงดังน้อย
recursion.ninja

@awashburn เพราะผมไม่ได้ว่าดีอ่านเกี่ยวกับ monads;)
ThreeFx

ฉันหวังว่าความคิดเห็นของฉันช่วยให้คุณเรียนรู้สิ่งใหม่!
recursion.ninja

@ThreeFx มีโปรแกรมสำหรับทำcabal install pointfreeตอนนี้ทุกคนจะคิดว่าคุณกินพระสำหรับอาหารเช้า
ฌอน D

@SeanD ขอบคุณฉันจะดูมัน
ThreeFx

4

WaitForCrash

แก้ไข: แก้ไขข้อบกพร่องในแนวคิด

แก้ไข: ตอนนี้ใช้ int long long

นี่เป็นครั้งแรกที่ฉันลอง มันมีพฤติกรรมที่เรียบง่ายจริงๆและยังคงแบ่งหนึ่งเพื่อแยกความแตกต่างถ้ามันเป็นรอบแรกหรือหนึ่งในภายหลัง ในรอบแรกไม่มีอะไรจะสูญเสียดังนั้นมันจึงซื้อหุ้น หากมีการแบ่งปันก็จะขายพวกเขา หากในที่สุดราคาหุ้นลดลงถึง 10 ก็จะซื้ออีกครั้ง

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    long long int share_price = strtoll(argv[1], NULL, 0);
    long long int money = strtoll(argv[2], NULL, 0);
    long long int shares_owned = strtoll(argv[3], NULL, 0);

    if(shares_owned > 1) {
        printf("S%lld\n", shares_owned - 1);
    } else if (shares_owned == 0 || share_price == 10) {
        printf("B%lld\n", money / share_price);
    } else {
        printf("W\n");
    }

    return 0;
}

รวบรวมกับ: gcc waitforcrash.c -o waitforcrash

เรียกใช้เป็น ./waitforcrash PRICE MONEY SHARES


หวังว่าคุณจะไม่รังเกียจฉันรูดรหัสเพื่อใช้เป็นพื้นฐานสำหรับโซลูชัน BuyAndHold BTW ที่มี ints ยาวเป็นเวลานาน% d ต้องเป็น% Ld เพื่อหลีกเลี่ยงคำเตือน (หรือเป็น% lld หรือไม่ให้คำเตือนแก่ฉัน)
Glenn Randers-Pehrson

ไม่เป็นไร. ใช่ฉันมี% lld ในรหัสของฉันต้องลืมพวกเขาในการอัปเดต
Optokopper

3

Earthquaker

สลับไปมาระหว่างการซื้อทุกอย่างและขายทุกอย่าง (แต่อย่างใดอย่างหนึ่ง) มันไม่ได้มีจุดมุ่งหมายที่จะชนะเท่าที่จะทำลายคนอื่น

using System;
using System.IO;

namespace Earthquaker
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 3)
                return;

            int stockPrice = int.Parse(args[0]);
            int money = int.Parse(args[1]);
            int stocks = int.Parse(args[2]);

            bool shouldBuy = true;

            if (stocks != 0)
            {
                StreamReader sr = new StreamReader("brain.txt");
                if (sr.ReadLine() == "B")
                    shouldBuy = false;
                else
                    shouldBuy = true;
                sr.Close();
            }

            if (shouldBuy)
                Console.Write("B" + (money / stockPrice));
            else
                Console.Write("S" + (stocks - 1));

            StreamWriter sw = new StreamWriter("brain.txt", false);
            sw.Write(shouldBuy ? 'B' : 'S');
            sw.Close();
        }
    }
}

csc Earthquaker.csคอมไพล์ด้วย Earthquakerทำงานด้วย


.Net มีSystem.IO.File.ReadAllTextและWriteAllTextดังนั้นคุณสามารถทำให้การติดตามประวัติของคุณง่ายขึ้นเล็กน้อย
Peter Taylor

สิ่งนี้จะขัดข้องหากไม่พบbrain.txtไฟล์
Peter Taylor

3

MonkeyTrader (ใน JAVA)

มีคำกล่าวว่าลิงเป็นพ่อค้าที่ดี ฉันทำข้อพิสูจน์ การตัดสินใจระหว่าง "ซื้อ" และ "ขาย" เป็นการสุ่มทั้งหมด

import java.math.BigInteger;
import java.util.Random;

public class MonkeyTrader {
    /**
     * @param args the command line arguments containing the current 
     * market value, our current money, and our current shares
     */
    public static void main(String[] args) {
        BigInteger marketValue = new BigInteger(args[0]);
        BigInteger myMoney = new BigInteger(args[1]);
        BigInteger myShares = new BigInteger(args[2]);
        Random random=new Random();

        switch (random.nextInt(2)) {
        case 0:
            System.out.println("B" + myMoney.divide(marketValue));
            break;
        case 1:
            System.out.println("S" + myShares);
            break;
        }
    }
}

3

IntelliTrader

รอบที่ 1 เขาจะขายหุ้นถ้าราคาดี: $ 80 ขึ้นไป จากนั้นเขาจะขายถ้าราคาเท่ากันหรือดีกว่าราคาสุดท้ายที่เขาขายที่ซื้อถ้าราคาเท่ากันหรือต่ำกว่าราคาล่าสุดที่เขาซื้อ

IntelliTrader.java

import java.io.*;
import java.math.BigInteger;
import java.util.Properties;

public class IntelliTrader {

    private static final String ROUND_NUM = "roundNum";
    private static final String LAST_BUY = "lastBuy";
    private static final String LAST_SELL = "lastSell";
    private static final String FILE = "IntelliTrader/memory.txt";

    private Properties memory;
    private int roundNum;

    private IntelliTrader(Properties memory) {
        this.memory = memory;
        roundNum = new Integer(memory.getProperty(ROUND_NUM, "0"));
    }

    public String evaluate(BigInteger market, BigInteger money, BigInteger shares) {
        String command = "W";
        if (roundNum == 0) {
            if (market.intValue() > 80) {
                command = sell(market, shares);
            } else {
                command = buy(market, money);
            }
        } else {
            if (market.compareTo(new BigInteger(memory.getProperty(LAST_SELL, "0"))) >= 0) {
                command = sell(market, shares);
            } else if (market.compareTo(new BigInteger(memory.getProperty(LAST_BUY, "999999999"))) <= 0) {
                command = buy(market, money);
            }
        }
        return command;
    }

    private String buy(BigInteger cost, BigInteger money) {
        memory.setProperty(LAST_BUY, cost.toString());
        return "B" + money.divide(cost).toString();
    }

    private String sell(BigInteger cost, BigInteger shares) {
        memory.setProperty(LAST_SELL, cost.toString());
        return "S"+shares.toString();
    }


    public static void main(String[] args) {    
        BigInteger marketValue = new BigInteger(args[0]);
        BigInteger myMoney = new BigInteger(args[1]);
        BigInteger myShares = new BigInteger(args[2]);

        Properties memory = new Properties();
        try {
            memory.load(new FileReader(FILE));
        } catch (IOException e) {
            //ignore, file probably doesn't exist yet
        }

        int roundNum = new Integer(memory.getProperty(ROUND_NUM, "0"));
        if (roundNum > 49) {
            roundNum = 0;
            memory.setProperty(ROUND_NUM, "0");
            memory.setProperty(LAST_BUY, "0");
            memory.setProperty(LAST_SELL, "0");
        }

        IntelliTrader it = new IntelliTrader(memory);
        String command = it.evaluate(marketValue, myMoney, myShares);
        System.out.println(command);

        roundNum++;
        memory.setProperty(ROUND_NUM, ""+roundNum);
        try {
            memory.store(new FileWriter(FILE), "IntelliTrader memory properties");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

คอมไพล์กับjavac IntelliTrader เรียกใช้ด้วยjava -cp "IntelliTrader" IntelliTrader


ในการทดสอบของฉันดูเหมือนว่าจะเป็นเทรดเดอร์ที่ดีที่สุดอันดับสอง
Peter Taylor

2

theAnswerOfLifeIs42.py

โปรแกรมของฉันชอบหมายเลข 42

กฎง่าย: ฉันสามารถซื้อ 42 หุ้นหรือขาย 42 หุ้น

import sys
price, money, shares = [int(arg) for arg in sys.argv[1:]]

if money>42*price:
 print "B 42"
else:
 print "S 42"

2

LeesonLearnt v1.1 (Java, อนุรักษ์นิยม)

เนื่องจากการเปลี่ยนแปลงกฎหมายความว่าตอนนี้เราเริ่มต้นด้วยการแชร์บางส่วนไม่มีการย้ายที่ดีที่สุดก่อนใครดังนั้นฉันจึงทำให้สิ่งนี้ง่ายขึ้นโดยการลบเคสพิเศษสำหรับเทิร์นแรก

import java.math.BigInteger;

public class LeesonLearnt {
    private static final BigInteger THRESHOLD = new BigInteger("100");

    public static void main(String[] args){
        BigInteger price = new BigInteger(args[0]);
        BigInteger capital = new BigInteger(args[1]);
        BigInteger shareholding = new BigInteger(args[2]);

        BigInteger affordable = capital.divide(price);

        // In the long run, the shares will probably lose all their value.
        // But if they're cheap, buying them will pump them and they can be sold at a profit.
        // The target amount of our value held in shares varies exponentially with their price.
        BigInteger targetShareholding = price.compareTo(THRESHOLD) > 0
            ? BigInteger.ZERO
            : affordable.add(shareholding).shiftRight(price.intValue() - 1);
        if (targetShareholding.compareTo(shareholding) <= 0) {
            System.out.println("S" + shareholding.subtract(targetShareholding));
        }
        else {
            BigInteger diff = targetShareholding.subtract(shareholding);
            System.out.println("B" + diff.min(affordable));
        }
    }
}

เรียกใช้เป็น

java -cp LeesonLearnt LeesonLearnt <price> <capital> <shareholding>

1

Dollar Cost Averager - Python 3

กลยุทธ์นี้พยายามใช้ค่าเงินดอลลาร์เฉลี่ยโดยการซื้อ (ใกล้เคียงที่สุด) จำนวนเงินที่แน่นอน (ตั้งไว้ที่ 150 โดยพลการเพื่อให้มันอาจใช้เงินส่วนใหญ่ภายในสิ้นปี)

import sys
price, money, shares = [int(arg) for arg in sys.argv[1:]]
target_per_day = 150
buy = round(min(target_per_day, money) / price)
if buy * price > money:
    buy -= 1
if buy > 0:
    print("B" + str(buy))
else:
    print("W")

1

Cash Is King - Python 2 หรือ 3

ผู้ชายคนนี้มองโลกในแง่ร้ายเกี่ยวกับตลาดหุ้น เขาต้องการเก็บเงินเป็นเงินสดซึ่งเขาสามารถเก็บไว้ได้อย่างปลอดภัยภายใต้ที่นอนของเขา

import sys
shares = int(sys.argv[3])
if shares > 0:
    print("S" + str(shares))
else:
    print("W")

1

ช้าและมั่นคง

ตราบใดที่มีเงินก็จะซื้อมูลค่า $ 165 ต่อหุ้น มิฉะนั้นจะขายหุ้นทั้งหมดเพื่อรับเงินมากขึ้นเพื่อซื้อหุ้นเพิ่มเติม ในรอบ 50 ทำให้แน่ใจว่าจะขายหุ้นทั้งหมดเพราะในที่สุดเราต้องการเงินสด

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Paths;

public class SlowAndSteady{
    public static void main(String[] args) {
        BigInteger price = new BigInteger(args[0]);
        BigInteger cash= new BigInteger(args[1]);
        long shares= Long.parseLong(args[2]);
        BigInteger number = new BigInteger("165");
        String count = "0";


        try {
            count = new String(Files.readAllBytes(Paths.get("counter.txt")));
        } catch (IOException e) {

        }

        int c = Integer.parseInt(count)+1;

        if (c >= 50)
        {
            System.out.println("S" + shares);
            c=0;
        }

        else if(cash.compareTo(number) > 0)     System.out.println("B" + (number.divide(price)));

        else System.out.println("S" + shares);


        try {
            Writer wr = new FileWriter("counter.txt");
            wr.write(Integer.toString(c));
            wr.close();
        } catch (IOException e) {
        }
   }
}

คอมไพล์ด้วย javac SlowAndSteady.java เรียกใช้ด้วย java -cp "SlowAndSteady" SlowAndSteady ตัวนับควรรีเซ็ตระหว่างรอบ แต่ถ้าไฟล์ถูกลบมันจะยังทำงานได้


1

BuyHighSellLow

ติดตามประวัติตลาดและซื้อเมื่อราคาต่ำและขายเมื่อมันสูง

import sys

storage = 'BuyHighSellLow'
turn = 0
turns = 50
max_start_price = 150
limit = 0.25

price = int(sys.argv[1])
money = int(sys.argv[2])
shares = int(sys.argv[3])

# Calculate average price
with open(storage+'/history', mode='a') as f:
            pass # Create file if it doesn't exist
with open(storage+'/history', mode='r') as f:
    values = list((int(line) for line in f))
    turn = len(values) + 1
    if turn > turns: turn = 1
    if turn == 1:
            average = max_start_price + 1
            turn = 1
    else:
            average = sum((value / turn for value in values))

# Buy low and sell high
if price < average:
    print('B' + str(int(limit * money / price)))
elif price > average:
    print('S' + str(int(limit * shares)))
else:
    print('W')

# Save history
if turn == 1: mode='w'
else: mode = 'a'
with open(storage+'/history', mode=mode) as f:
    print(price, file=f)

ทำงานด้วย:

python3 BuyHighSellLow/buyhighselllow.py

1

เวลาถูกต้อง - Python 3

ฉันเบื่อดังนั้นฉันจึงเขียนผู้เข้าร่วมคนอื่น ...

ผู้ประกอบการรุ่นเยาว์คนนี้ใช้ชีวิตตลอดเวลา เมื่อถึงเวลาเขาตัดสินใจ เขายังใช้ภาษาฝรั่งเศสนอกบริบทอย่างน่ารำคาญ ... ;)

วิ่ง:

python3 timeisright.py [arg1] [arg2] [arg3]

รหัส:

import sys, time

price = int(sys.argv[1])
money = int(sys.argv[2])
shares = int(sys.argv[3])

lheure = int(time.time())

if lheure % 3 == 0:
    print('S'+str(int(shares/4)))
elif lheure % 3 == 1:
    print('B'+str(int(money/4*price)))
else:
    print('W')

1

Ol 'Timer - Fortran 77

ชายชราคนนี้กำลังจะเสียเงินบำนาญของเขาหลังจากทำงานเป็นพนักงานสำนักงานมาหกสิบปี อย่างไรก็ตามในช่วงวัยชราของเขาเขาตาบอดมากดังนั้นเขาจึงเห็นได้เพียงว่าเขามีหมายเลขแรกของแต่ละข้อโต้แย้งดังนั้นเขาจึงประมาณราคา วิธีการของเขาคล้ายกับของ Walt ยกเว้น Ol 'Timer จะประมาทมากกว่าเดิมเล็กน้อย

เนื่องจากปัญหาเกี่ยวกับการพิมพ์ Fortran ฉันได้เขียนโปรแกรม Python ซึ่งจะช่วยได้ โปรแกรมนำอาร์กิวเมนต์ที่ให้มาและส่งไปยังโปรแกรม Fortran จากนั้นโปรแกรม Python ปรับรูปแบบผลลัพธ์เป็นรูปแบบที่คาดหวัง

รวบรวม:

gfortran oltimer.for -o oltimer.exe

วิ่ง:

python3 assistant.py [arg1] [arg2] [arg3]

Python Assistant Code:

from subprocess import Popen, PIPE
import sys, re

ret = Popen('./oltimer.exe '+sys.argv[1]+' '+sys.argv[2]+' '+sys.argv[3], stdout=PIPE, shell=True).communicate()[0].decode('utf-8')
value=re.findall(r'\d+',ret)

if 'W' in ret:
     print('W')

elif 'B' in ret:
     print('B'+str(value[0]))

elif 'S' in ret:
     print('S'+str(value[0]))

รหัส FORTRAN หลัก:

      PROGRAM OLTIMER
C DEFINE VARIABLES
          INTEGER :: PRICE
          INTEGER :: STOCK
          INTEGER :: MONEY
          INTEGER :: INTBUFFER
          CHARACTER :: BUFFER
C GET CMD ARGUMENTS & CONVERT TO INT
          CALL getarg(1, BUFFER)
          READ (BUFFER, '(i10)') PRICE
          CALL getarg(2, BUFFER)
          READ (BUFFER, '(i10)') MONEY
          CALL getarg(3, BUFFER)
          READ (BUFFER, '(i10)') STOCK
C EVALUATE SITUTATION AND MAKE DECISION
          IF (PRICE.LT.5) THEN
            IF (MONEY.GT.0) THEN
                INTBUFFER=(MONEY*50)/(5-PRICE)
                PRINT*,'B',INTBUFFER
            ELSE
                PRINT*,'W'
            END IF
          ELSE
            IF (PRICE.GT.9) THEN
                IF (STOCK.GT.0) THEN
                    INTBUFFER=STOCK/(PRICE-9)
                    PRINT*,'S',INTBUFFER
                ELSE
                    PRINT*,'W'
                END IF
            ELSE
                PRINT*,'W'
            END IF
          END IF      
      END PROGRAM

1
ระบุว่าคุณต้องการ Python อยู่แล้วและมีคำตอบอื่น ๆ ใน Python แต่ไม่มีใน Fortran คุณไม่คิดว่าควรใช้งานทั้งหมดใน Python และลดภาระของคอมไพเลอร์ที่ OP ต้องติดตั้งหรือไม่
Peter Taylor

@ ปีเตอร์ฉันจะ แต่ฉันคิดว่ามันคงจะสนุกที่ได้มีภาษาที่แตกต่างไปจากเดิมอย่างสิ้นเชิงและดูว่ามันมีประสิทธิภาพอย่างไร
Beta Decay

0

ผู้ซื้อขาย Test1

public class Test1 {

    public static void main(String[] args){
        int marketValue = Integer.parseInt(args[0]);
        int myMoney = Integer.parseInt(args[1]);
        int myShares = Integer.parseInt(args[2]);

        //Buy 10 if we don't have any.
        if(myShares <= 0){
            System.out.println("B10");
        }else{
            System.out.println("S1");
        }
    }
}

คอมไพล์กับjavac Test1.javarun ด้วยjava -cp "Test1" Test1


0

เม่น - python2.7

นี่คือส่วนใหญ่เพื่อจองชื่อ

from __future__ import print_function
from sys import argv

storage = 'prices.txt'
price,cash,shares = map(long, argv[1:])
turn = 1
buy = lambda x: print('B%d' % long(x))
sell = lambda x: print('S%d' % long(x))
cashtoshares = lambda c: long(c/price)
TURN,PRICE,CASH,SHARES=range(4)

try:   
    data = [map(long, line.split()) for line in open(storage)]
    if data:
        turn = data[-1][TURN] + 1
except IOError:
    pass
with open(storage, 'a') as pricelist:
    pricelist.write('%d %d %d %d\n' % (turn, price, cash, shares))

if turn == 1:
    buy(cashtoshares(cash)) # convert all cash into shares
elif price == 1:
    buy(cashtoshares(cash)) # cannot buy at a better deal
elif price < 10:
    buy(cashtoshares(cash/2))
elif shares < 10:
    buy(cashtoshares(cash/2))
else:
    sell(shares/2)

เรียกใช้เป็น

python hedgehog.py PRICE CASH SHARES

0

ซื้อและขาย - C

คล้ายกัน แต่ไม่ซ้ำกับ Tommy สลับระหว่างการซื้ออย่างตื่นตระหนกให้มากที่สุดและขายทุกอย่าง Earthquaker เกือบเท่ากันซึ่งยังคงมีหนึ่งหุ้นในขณะที่ BuyAndSell ขายหุ้นทั้งหมด BuyAndSell จะไม่ดำเนินการใด ๆ เมื่อไม่มีหุ้นที่จะขาย แต่ไม่มีเงินเพียงพอที่จะซื้อหนึ่งหุ้น

/* BuyAndSell
 * Code revised from OptoKopper's WaitForCrash.c and my BuyAndHold.c
 * Alternates between buying as many shares as possible and selling everything
 * Run it as ./buyandsell PRICE MONEY SHARES
 */
int main(int argc, char *argv[]) {
    long long int share_price = strtoll(argv[1], NULL, 0);
    long long int money = strtoll(argv[2], NULL, 0);
    long long int shares = strtoll(argv[3], NULL, 0);

    if (money >= share_price) {
        printf("B%lld\n", money / share_price);
    } else {
        if (money == 0) {
            printf("S%lld\n", shares);
        } else {
            printf("W\n");
        }
    }

    return 0;
}

คอมไพล์ด้วย "gcc buyandsell.c -o buyandsell"

เรียกใช้เป็น "./buyandsell ราคาหุ้นเงิน


0

Gorge Soros

price = ARGV.shift
money = ARGV.shift
stock = ARGV.shift
if price*10<money
  puts "B10"
else
  puts "S#{stock}"
end

ซื้อช้ากว่าขายทุกอย่างในความพยายามที่จะผิดพลาดของตลาด

ทำงานด้วย:Soros.rb price money stock


1
มันบอกอย่างชัดเจนในข้อความคำถามDo not intentionally create programs to crash the simulation.
Beta Decay

@BetaDecay ฉันหมายถึงอย่าพยายามที่จะควบคุมความผิดพลาด พยายามที่จะผิดพลาดในตลาดเป็นส่วนหนึ่งของเกม
spocot

@spocot โอ้ฉันคิดว่าคุณหมายถึงการไม่สร้างโปรแกรมที่จะทำให้ตลาดพัง คุณควรวลีที่แตกต่างกันเพื่อป้องกันความสับสนมากขึ้น
Beta Decay
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.