ふぁんくしょん -5ページ目
<< 前のページへ最新 | 1 | 2 | 3 | 4 | 5

[カブロボ]日本語メソッド名不可

http://kaburobo.jp/blog/index.html

自分はメソッド名を日本語で書いていて、手元では動作していたのだが、ソースをサーバーに上げてみたところエラーが出る。いろいろ書き換えて試してみたのだが、やはり日本語メソッド名がまずいらしい。というわけで主催者におととい問い合わせたら今日返事が来た。また、運営者blog(上記リンク)でもこの件について注意が掲載された。

以下メールより引用。

こちらですが、日本語文字列は、サーバでの動作でエラーになって
しまっております。
大変申し訳ございませんが、宜しくお願いします。

引用終わり。

ということで、残念ながら対応はしていないし、してもらえないようだ。自分は提出直前に文字列置換することにした。

追記:12/15
「void 二日目(){}」だと通らなかったのですが、「void テスト(){}」だと通るようです。

[カブロボ]二日目の処理

二日目は一日目に買った株を成行で売り飛ばすことにしました。それでぼぼ元の状態に戻して、残りの期間で自分のアルゴリズムを動かすことにしました。これで条件を満たせずにランク外になるリスクは完全に回避できて、(2日減るものの)余計なことを考えずに自分の作戦に集中できるのが良い感じ。

以下はソースです。

 void 二日目処理(InvestmentAgent investmentAgent)
 {
  //初日に買った銘柄を売り払う。
  
  Stock[] stocks = investmentAgent.getStocks(); //取引対象銘柄全部の配列
  for(int i = 0;i < stocks.length;i++)
  {
   Holding hold = (Holding)(investmentAgent.getPortfolio().getHoldings().get(stocks[i]));
   if(hold != null && hold.getNumber() > 0)
   {
    new MyStock(stocks[i],investmentAgent).成行売り(hold.getNumber());
   }
  }
 }

WSHで文字列の一括置換

http://www.atmarkit.co.jp/fwin2k/win2ktips/308strrpl/strrpl.html

カブロボの日本語メソッド名を含むコードが手元では動いたのだが、サーバーに置こうとしたらコンパイルできないと言われてしまう。いろいろ調べたところやはり日本語なのがいけなという結論になる。そこで日本語のメソッド名や変数名を一括で変換したいのだけれども、WindowsでやっているのでUnixみたいにコマンドで楽チンなわけではない。

WindowsにはWSHという、スクリプト言語(jsとvbsだったと思う)で記述する.batみたいなものがあって、検索したところ、それを利用した置換スクリプトがあったので改造して使ってみました。

今回は単純な処理なのであまりWSHのありがたみを感じないですが、結構いろいろなことができて便利なようです。下の記事が詳しいと思います。知り合いが書いてるんですよね。この記事。

http://www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_01.html

[カブロボ]一日目の処理

とりあえず、大会側で用意されたクラスライブラリでは物足りなかったので株の銘柄を表すMyStockオブジェクトを作成。メソッド名はすべて日本語で、呼び出し側見れば意味が分かるので、コードは割愛。

その後、一日目の処理だけ書いてみた。
大会の規則で2銘柄以上購入が条件なので、一日目は最も安く買える株2つを買うことにした。自分の考えているアルゴリズムだと一銘柄だけ購入になってしまう危険性もあるので、最初の一日は捨てる方向で。

半角スペースが置換されコードが見づらかったためtabを全角スペースに置き換えたので、引用する場合は注意。

ちなみに変数名とかメソッド名を日本語にしているのは、株式用語が英語だとさっぱりで、日本語のほうがコーディングの効率が良いと判断したからです。普段は日本語はあまり使いません。Eclipse使っていて、メソッドは一覧から選択しているので、日本語のタイプはコードに出てくるほどはしていません。
----------------------------------------------
 void 初日処理(InvestmentAgent investmentAgent)
 {
  //初日はとりあえず、売買基準を満たす。
  //二銘柄購入。総購入金額が安くなる二つ。
  
  Stock[] stocks = investmentAgent.getStocks(); //取引対象銘柄全部の配列

  //一番安いのを探す
  long minval = 1000000000L;
  MyStock minstock = new MyStock(stocks[0],investmentAgent);

  for(int i = 0;i < stocks.length;i++)
  {
   MyStock stock = new MyStock(stocks[i],investmentAgent);
   long val = stock.終値()*stock.最低売買単位();
   if(minval > val)
   {
    minval = val;
    minstock = stock;
   }
  }

  //一番安いのを除いてもう一度
  long minval2 = 1000000000L;
  MyStock minstock2 = new MyStock(stocks[0],investmentAgent);

  for(int i = 0;i < stocks.length;i++)
  {
   MyStock stock = new MyStock(stocks[i],investmentAgent);
   if(minstock.株式コード() == stock.株式コード())continue;
   long val = stock.終値()*stock.最低売買単位();
   if(minval2 > val)
   {
    minval2 = val;
    minstock2 = stock;
   }
  }
  
  minstock.成行買い(1);
  minstock2.成行買い(1); 
  
 }

.NETで正規表現を使う

http://www.itmedia.co.jp/enterprise/articles/0412/07/news034.html

C#,VB.NET向けの正規表現などを扱った記事。文字列処理をする際に正規表現は結構便利。使い方を覚える労力に見合う価値はあると思います。この記事は正規表現のやさしめの例がいくつか挙げられています。

Windowsのショートカットキー

http://www.microsoft.com/japan/enable/products/keyboard/winxp.asp
Windows+dが便利だったので、他にもないか調べてみたら、マイクロソフトのサイトで一覧を発見。

Windowsキー関連で使いそうなものを下に挙げておきます。

[スタート] メニューを表示するか、または非表示にする Windows ロゴ キー
デスクトップを表示する Windows ロゴ + D
すべてのウィンドウを最小化する Windows ロゴ + M
最小化したウィンドウを元のサイズに戻す Windows ロゴ + Shift + M
マイ コンピュータを開く Windows ロゴ + E
コンピュータをロックする Windows ロゴ + L
[ファイル名を指定して実行] ダイアログ ボックスを開く Windows ロゴ + R

[カブロボ]Hello World++

カブロボに参加すべく、早速コードを書いてみました。
データ取得等はクラスライブラリが用意されていて、Javadocもあるので、アルゴリズム作成に集中できるようです。
とりあえず、株価等のデータを取得するとか基本的な動作を列挙してみました。
プログラム(手続き)になっていないので、何の意味もないコードです。もちろんこれ以外にもたくさん取得できる情報があります。

分かったことメモ
・プログラムはRobotを実装する
・runをオーバーライドする
・動かす際はjarに固めてサーバーにアップロードする
・サーバーでは過去のデータを用いて実験が出来る
・特定の期間中はサーバーでは練習ラウンドを開催。次回(最後の練習ラウンド)は12/15から

//-------------------------------------------------------
import java.util.Map;
import jp.kaburobo.investment.Holding;
import jp.kaburobo.investment.InvestmentAgent;
import jp.kaburobo.investment.Portfolio;
import jp.kaburobo.investment.SimpleStockOrder;
import jp.kaburobo.investment.Stock;
import jp.kaburobo.investment.StockOrder;
import jp.kaburobo.robot.Robot;

public class MyRobot implements Robot{
public void run(InvestmentAgent investmentAgent){

//株オブジェクト
Stock[] stocks = investmentAgent.getStocks(); //取引対象銘柄全部の配列
int 株式コード = stocks[0].getCode();
String 株式名 = stocks[0].getName();

//ポートフォリオオブジェクト
Portfolio po = investmentAgent.getPortfolio();
long 取引可能金額 = po.getAvailableMoney();
long 総額 = po.getMoney();
Map 持ち株 = po.getHoldings(); //キーが株オブジェクト。値が持ち株オブジェクト
po.setMemo("何らかのメッセージ");
String なんらか = po.getMemo();

//持ち株オブジェクト
Holding 特定銘柄の持ち株 = (Holding)持ち株.get(stocks[0]); //もし0番目の株を持ってなかったらnullっぽいので注意
float 取得単価 = 特定銘柄の持ち株.getPrice();
int 株数 = 特定銘柄の持ち株.getNumber();
Stock 対象株 = 特定銘柄の持ち株.getStock();


//注文
SimpleStockOrder stockOrder = new SimpleStockOrder();
stockOrder.setLimit(1000); //指値(0なら成行)
stockOrder.setLimitType(StockOrder.LIMIT); //指値注文
stockOrder.setLimitType(StockOrder.MARKET); //成行注文

stockOrder.setUnitType(StockOrder.MONEY); //金額
stockOrder.setUnitType(StockOrder.NUMBER); //単位株数
stockOrder.setQuantity(1); // 注文を1単位株に設定

stockOrder.setQuantityByMoney(1000000); //売買限度額(明示的に金額で指定)
stockOrder.setQuantityByNumber(10); //売買限度単位数(明示的に単位数で指定)
stockOrder.setStock(stocks[0]); // 注文の銘柄を設定
stockOrder.setTradeType(StockOrder.BUY); // 買い注文に設定

investmentAgent.order(stockOrder); // 注文の発行




}
}

「デスクトップの表示」のショートカット

Windowsの便利なショートカット

[Windowsキー] + d

「デスクトップの表示」とその解除が出来ます。
私は今日知ったばかりなのですが、もうすでに何回も使っています。

自動株取引ソフトウェアコンテスト

http://www.kaburobo.jp/
告知はだいぶ前からされていますが、Javaで株取引をするロボットを作成するというコンテストです。賞金総額150万円だそうです。1月下旬から一ヶ月間の投資成績で順位をつけるそうです。で1月始めまで登録受付中。私も参加しようと思っているので、コードを書くたびに報告します。

ビンゴ@ドラクエ8の期待値

ドラクエⅧのカジノにはビンゴゲームがありますが、儲かるゲームなのか損するゲームなのか知りたかったので、プログラムを書いて実験してみました。

プログラムでは以下を仮定しました。
・全てのボールが公平に出る
・ビンゴカードは右上から1,2,3,4と順番に並んでいる事にする(勝率?には影響しないので)

標準乱数を使っている辺りが不安ですが大勢には影響ない範囲でしょう。
プログラムに間違い等ありましたら突っ込みお願いします。
3000万ゲームで回収率2.58(258%)と出ました。


//---------------------------------------------------------------
#include<iostream>

using namespace std;

const int kaisuu = 30000000;

bool card[5][5];
double score[] = {0,0,0,400,200,100,50,25,10,5};

bool isbingo()
{
for(int i = 0;i < 5;i++)
{
if(card[i][0] && card[i][1] && card[i][2] && card[i][3] && card[i][4])return true;
if(card[0][i] && card[1][i] && card[2][i] && card[3][i] && card[4][i])return true;
}

if(card[0][0] && card[1][1] && card[2][2] && card[3][3] && card[4][4])return true;
if(card[4][0] && card[3][1] && card[2][2] && card[1][3] && card[0][4])return true;
return false;
}

int main()
{

double haitou = 0;
for(int l = 0;l < kaisuu;l++)
{
for(int i = 0;i < 5;i++)
for(int j = 0;j < 5;j++)
card[i][j] = false;

card[2][2] = true;

for(int i = 0;i < 10;i++)
{
int ball = rand() % 25;
if(card[ball/5][ball%5])
i--;
else
{
card[ball/5][ball%5] = true;
if(isbingo())
{
haitou += score[i];
break;
}
}
}
}

double kaishuuritu = haitou / (double)kaisuu;

cout << kaishuuritu << endl;

}
//---------------------------------------------------------------
<< 前のページへ最新 | 1 | 2 | 3 | 4 | 5