人類みんなごくつぶし

2004-11-12

[]複数期間を一括実行 03:20

package robot;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

import jp.kaburobo.driver.KabuRoboDriver;


public class Main {

    public static void main(String[] args) throws Exception{

        String robotClass = args[0];
        launch(robotClass, "2004-04-01","2004-04-30");
        launch(robotClass, "2004-05-01","2004-05-31");
        launch(robotClass, "2004-06-01","2004-06-30");
    }
    
    
    private static void launch( String robotoClass, String startDateStr, String lastDateStr) throws Exception{

        KabuRoboDriver launcher = new KabuRoboDriver();
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo"));
        Calendar startDate = new GregorianCalendar();
        Calendar endDate = new GregorianCalendar();

        startDate.setTime(dateFormat.parse(startDateStr));
        endDate.setTime(dateFormat.parse(lastDateStr));

        launcher.setStartDate(startDate);
        launcher.setEndDate(endDate);
        launcher.start(robotoClass);
    }
    
}

まあ、1月ごとに区切らずに期間を長くとってもいいけど。。。

(あ、なんかうまく動いてない気もする)


というか、環境をととのえている場合じゃないな。

なんでもいいから動くの作ろっと。

[]注文結果を一覧するクラス 03:10

package datarobo;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.List;

import robot1.Utils;
import jp.kaburobo.investment.InvestmentAgent;
import jp.kaburobo.investment.OrderResult;
import jp.kaburobo.investment.StockListManager;

public class OrderAnalyzer {

    static PrintWriter out;
    static {
        try{
            out = new PrintWriter(
                new FileWriter("out/order.csv")
                //System.out
                );
            //ヘッダ
            out.println(
                    "日付,"
                    + "コード,"
                    + "名前,"
                    + "価格,"
                    + "取引単位数,"
            );
        }catch(Exception e){
            e.printStackTrace();
        }
    }    
    
    private InvestmentAgent agent;
    
    
    public OrderAnalyzer(InvestmentAgent agent){
        this.agent = agent;
    }
    
    public void dumpAllOrderHistory(){

        StockListManager sm = StockListManager.getInstance();
        
        List orderResults = agent.getOrderResult();
        for(int i=0; i<orderResults.size(); i++){

OrderResult result = (OrderResult)orderResults.get(i); out.println( Utils.toDateString(result.getDate()) + "," + result.getStockCode() + "," + sm.getStock(result.getStockCode()).getName() + "," + result.getNumber() + "," + result.getSuccessPrice() ); } out.flush(); } }

最終日などに実行して、結果を確認。

うーん、しかし「最終日」ってとれないなぁ。

とりあえずローカル環境の実験としては、

staticなカウンターまわして判別もできるが、

最終日と最初の日のコールバックメソッドあってもいいかもね。

[]期間中の株価データをCSVに吐き出すロボット 02:57

package datarobo;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import jp.kaburobo.information.IndexInformation;
import jp.kaburobo.information.InformationManager;
import jp.kaburobo.investment.InvestmentAgent;
import jp.kaburobo.investment.Stock;
import jp.kaburobo.robot.Robot;
import jp.kaburobo.util.Time;


public class CSVTestRobot implements Robot{

    static PrintWriter out;
    static {
        try{
            out = new PrintWriter(
                new FileWriter("out/out.csv")
                //System.out
                );
            //ヘッダ
            out.println(
                    "日付,"
                    + "コード,"
                    + "名前,"
                    + "始値,"
                    + "終値,"
                    + "高値,"
                    + "安値,"
                    + "出来高"
            );
        }catch(Exception e){
            e.printStackTrace();
        }
    }    
    
    
    private void dumpData(Stock stock){
        InformationManager infoManager = agent.getInformationManager();        

        Calendar date = Time.getTime();
        IndexInformation info = infoManager.getIndexInformation(stock);
        

        out.println(
                "" 
                + toDateString(info.getDate())
                + "," + stock.getCode()
                + "," + stock.getName()
                + "," +info.getOpeningPrice()
                + "," + info.getClosingPrice()
                + "," + info.getHighPrice()
                + "," + info.getLowPrice()
                + "," + info.getTurnover()
        );
    }
    
    
    
    
    private InvestmentAgent agent;
    
    public void run(InvestmentAgent agent) {

        this.agent = agent;
        
        Stock[] stocks = agent.getStocks();
        for(int i=0; i<stocks.length; i++){

Stock stock = stocks[i]; //Stock stock = stocks[0]; dumpData(stock); } out.flush(); } private static SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); private String toDateString(Calendar calendar){ return format.format(calendar.getTime()); } }

EXCELのオートフィルタとグラフを使って分析

HSQLDBとデータがついてるので、直接DBからデータを抜き出してもいいかもしれんが。

[]第2回腕試し 提出締切:11月15日(月)24:00 01:13

締切まじかです。

しかし、コンテストサーバ重くてエントリーできないのですが。。。

naganonagano 2004/11/14 10:29 株ロボ、ネタじゃなかったんですね・・・驚

muimymuimy 2004/11/14 20:05 ネタみたいな本当ですw

トラックバック - http://d.hatena.ne.jp/muimy/20041112