Home > プログラミング > Javaカブロボ

Javaカブロボ Archive

【FAQ】SDKを起動してバックテストをすると重いです。

  • 2009-11-02 (月)

Q:SDKを起動してバックテストをすると重いです。何してはるんですか?
この画面が長時間表示され、バックテスト開始まで待たされます。

よろしければ[Enter]キーまたは start と打って[Enter]キーを押してください。
キャンセルする場合は quit と打って[Enter]キーを押してください。
ヘルプを表示する場合は help と打って[Enter]キーを押してください。
> start [Enter]
初期化中です。環境によっては時間がかかる事があります。

A:株価データを読み込んでいます。
データを先読みしておくことで後のシミュレーションを素早くこなすことが可能になります。テストを行う期間が長いほどこの方法が有利に働きます。
また、作成されるカブロボは過去の株価データを参照することが殆どであるため、例えば3年間データ中の最後の半年だけのテストにおいても、3年分全てのデータをSDKが読むことになります。

Q: SDKが解凍できません

A: SDKのダウンロードの仕組みに不具合がございました。 修正が完了しまして、現在は正常に解凍しインストールすることができます。 ご迷惑をおかけしましたことを、お詫びいたします。

カブロボのJavaプログラミングルール変更(使用不可メソッドの追加)

カブロボのJavaプログラミングルールに、以下の項目を追加いたしました。
このルールに該当する場合、Javaカブロボのソースのアップロード時に、その旨のメッセージが表示されます。

java.lang.Object.finalize メソッドオーバーライドとその同名のメソッドの使用不可

Javaプログラマー用補足資料もご参照ください。

【お知らせ】ETF機能対応のカブロボSDK2.1.0正式リリース

ETF機能対応のカブロボSDK2.1.0をリリースいたしました。

ログイン後、カブロボ工房からダウンロードして頂き、カブロボを開発して頂くことができます。
お試し頂けたら幸いです。

ETF対応のSDKまたKBユニバーサルの使用方法については以下のページをご参照ください。

*ETF機能対応のカブロボについて

今回の修正履歴は以下の通りです。

2008/04/14 version 2.1.0
【新機能】新しいテクニカル関数として騰落レシオが実装されました。AnalysisManager#getUpDownRatio()から実行出来ます。
【改良】自動損切り値をrobot-config.xmlに記述することで、ユーザーによる設定が可能になりました。
【修正】InformationManager#getEtfNikkei225List および #getEtfTopixList の戻り値が不正だった問題を修正しました。

また、カブロボルールにも一部以下のようなルールが追加されました。

・株式分割・株式併合もしくはそれに準ずるコーポレートアクションが予定されていた場合はその前後20 日間において新規注文が禁止され、保有している銘柄に関しては強制的に反対売買が執行されます。

*カブロボ作成ルール/仕様(PDF)

MarketRanking (ランキングデータ) を使ったサンプルロボット

MarketRanking の機能にフォーカスしたサンプルコードを解説いたします。
MarketRanking には多くのデータが日々更新されていますので、これを期にマスターしましょう。
基本的な使い方は

import jp.tradesc.superkaburobo.sdk.trade.data.EnumMarketRankingType;
import jp.tradesc.superkaburobo.sdk.trade.data.MarketRanking;

と書いて EnumMarketRankingTypeMarketRanking を import します。
次に

ArrayList < MarketRanking > rankingList =
tradeAgent.getInformationManager().getMarketRanking(EnumMarketRankingType.DROP_RATE);

のように書いてデータを取得します。
例では値下がり幅のデータを取得するために EnumMarketRankingType.DROP_RATE を使っていましたが、
EnumMarketRankingType にはDROP_RATE だけでなく合計で21種類データを取得することができます。

DIVIDEND:配当利回り上位
DROP_CREDIT_BUYING:信用買残減上位
DROP_CREDIT_SALE:信用売残減上位
DROP_RANGE:値下がり幅
DROP_RATE:値下がり率
HIGH_CREDIT_RATIO:信用高倍率上位
HIGH_PBR:高PBR
HIGH_PER:高PER
LOW_CREDIT_RATIO:信用低倍率上位
LOW_PBR:低PBR
LOW_PER:低PER
NET_PROFIT_RATE:純利益成長率上位
ORDINARY_PROFIT_RATE:経常利益成長率上位
RISE_CREDIT_BUYING:信用買残増上位
RISE_CREDIT_SALE:信用売残増上位
RISE_RANGE:値上がり幅
RISE_RATE:値上がり率
SALES_RATE:売上高成長率上位
VALUE:売買代金
VOLUME:出来高
VOLUME_RATE:出来高乖離率

それでは、実際に MarketRanking を使ったカブロボを作ってみましょう。
今回は、SDKに付属する SampleRobot の screening メソッドを書き換えるだけでできます。
戦略は前日-3%以上値下がりした銘柄を次の日に買う、というシンプルな短期逆張りロボットです。

短期保有にするためには、SampleRobot の order メソッドの中の、orderReverseByRate の保有日数を調整する必要があります。

コードは以下のようになります。

01   @Override
02   public void screening(TradeAgent tradeAgent) {
03     
04     // オブジェクトメモを用意し、null チェックを行います。
05     SampleObjectMemo memo = (SampleObjectMemoMemoManager.getInstance().getObjectMemo();
06     if(null == memomemo = new SampleObjectMemo();
07     
08     // 注文予定リストを用意し、null チェックを行います。
09     ArrayList<SampleObjectRecord> memoList = memo.getMemoList();
10     if(null == memoListmemoList = new ArrayList<SampleObjectRecord>();
11
12     ArrayList<MarketRanking> rankingList = tradeAgent.getInformationManager().getMarketRanking(EnumMarketRankingType.DROP_RATE);
13
14     for(MarketRanking r : rankingList)
15     {
16       //-3%以内の値下がり率の銘柄は買わない
17       if(r.getData() >= -3)
18       {
19         break;
20       }
21       RobotLogManager.getInstance().log(r.getStock().getStockName()3);
22       RobotLogManager.getInstance().log(r.getData().toString()3);
23       //購入予定に追加
24       memoList.add(new SampleObjectRecord(r.getStock(), true, 111"値下がり率ランキング"));
25     }
26     
27     // オブジェクトメモにセットします。
28     memo.setMemoList(memoList);
29     
30     // オブジェクトメモを登録します。
31     MemoManager.getInstance().setObjectMemo(memo);
32   }

ソースコードダウンロード

SampleMarketRankingRobot.java
※カブロボをお使いのPCで実行するには、カブロボSDKが必要です。
 別途、カブロボサイトからカブロボSDKをダウンロードしご利用ください。

【お知らせ】ETF対応版カブロボSDK2.1.0-rc2版とカブロボ成績表作成ツール1.0.4-rc1リリース

ETF機能対応のカブロボSDK2.1.0 RC2版、および、カブロボ成績表作成ツール1.0.4 RC1版をリリースいたしました。

ログイン後、カブロボ工房からダウンロードして頂き、カブロボを開発して頂くことができます。
お試し頂けたら幸いです。

また、成績表も作成できるようになりました。
通常通り、カブロボサイトにてアップロード、また稼動テスト、日々の運用を行うこともできます。

ETF対応のSDKの使用方法については以下のページをご参照ください。

*ETF機能対応のカブロボSDK2.1.0-beta1版リリース
*ETFを売買するサンプルロボット

今回の修正履歴は以下の通りです。

2008/01/21 version 2.1.0 RC2
【改良】成績表作成ツールのETF対応に伴う内部修正を行いました。
【修正】2.1.0 RC1より最終成績表作成時に例外が発生することがあった問題を修正しました。

【お知らせ】カブロボSDK2.1.0-rc1版リリース

ETF機能対応のカブロボSDK2.1.0 RC版をリリースいたしました。

ログイン後、カブロボ工房からダウンロードして頂き、カブロボを開発して頂くことができます。
お試し頂けたら幸いです。

また、カブロボサイトにてアップロード、また稼動テスト、日々の運用を行うこともできるようになりました。

ETF対応のSDKの使用方法については以下のページをご参照ください。

*ETF機能対応のカブロボSDK2.1.0-beta1版リリース
*ETFを売買するサンプルロボット

今回の修正履歴は以下の通りです。

2008/01/07 version 2.1.0 rc1
【改良】上場前銘柄を、InformationManager#getStockList(Category) にて取得出来ないようにしました。
【修正】InformationManager#getEtfList() にて null を含んだ ArrayList が返る場合があった問題を修正しました。
【修正】株式分割または併合にて端株が売れない問題を修正しました。
(配布しているSDKでは発生いたしません。日々の運用にて発生する場合がありました)

ETFを売買するサンプルロボット

今回は新しく追加されたETF機能にフォーカスしたサンプルロボットを解説したいと思います。
ポートフォリオに ETF がなければ買い、あれば売りをするだけの単純なカブロボです。

ETFとは

ETF について、及び ETF 対応カブロボ SDK については ETF 機能対応のカブロボSDK 2.1.0-beta1版リリースのお知らせもご参照ください。

コードの説明

サンプルソースコード行の先頭には行数が付与されています。実際のソースコードでは行数の記述は不要です。


36     // ETF の銘柄リストをつくります。
37     ArrayList<Stock> etfStockList = new ArrayList<Stock>();
38     for(Category cat: im.getEtfList()){
39       etfStockList.addAll(cat.getStockList());
40     }

ETFの情報はInformationManager(im)のgetEtfListメソッドで取得することができます。
for文を回してETFだけのリストを作ります。


42     // 1銘柄ずつ保有していれば売り、保有していなければ買います。
43     for (Stock etf : etfStockList) {

etfStockListからStock型のオブジェクトが取得できるので、これを元に売買命令を出します。


44       if(pm.isHolding(etf)){
45         // 保有しているので全量を 即時 成行 で売却します。
46         for (Portfolio portfolio : pm.getPortfolio()) {
47           // このポートフォリオが ETF 銘柄か調べます。
48           if(etf.equals(portfolio.getStock())){
49             // ETF なので売却します。
50             portfolio.orderReverseNowMarketAll();
51           }
52         }
53       else {

銘柄を保有しているかどうかを調べます。
保有していた場合はその銘柄(ETF)を売却します。


53       else {
54         // 保有していない ETF なので、新規に買い注文を出します。
55         
56         // 買い注文を出すために、前日終値を取得し、数量を計算します。
57         StockData lastSession = im.getStockSession(etf);
58         if(lastSession == nullcontinue// 最後の場の情報を取得できなかったのでこの銘柄をスキップします。
59         Integer closingPrice = lastSession.getClosingPrice();
60         if(closingPrice== nullcontinue// 最後の場の終値が取得できなかったのでこの銘柄をスキップします。
61         
62         // 注文数 (総資産の40%)  (前日の終値)
63         int qty = orderMoney   / closingPrice.intValue();
64         
65         // 注文を出します。
66         if (! om.orderActualNowMarket(etf, qty) ) {
67           // 失敗した場合ログに理由と共に出力します。
68           rlm.log(etf.getStockName()+" "+qty+"株(終値:"+closingPrice+" 注文額:"+(closingPrice*qty)+" )の注文に失敗しました: "+om.getLastOrderResult().toJapanese());
69         }
70       }

保有していない場合、前日の終値と orderMoney (1回の注文で購入する1銘柄あたりの金額) から買う株数を計算します。
om.orderActualNowMarket(etf, qty) で実際に注文をし、失敗した場合はログに記録します。

ソースコードダウンロード
SampleEtfRobot.java
※カブロボをお使いのPCで実行するには、カブロボSDKが必要です。
 別途、カブロボサイトからカブロボSDKをダウンロードしご利用ください。
 また、ETFを使うためには robot-config.xml を事前に修正しておく必要があります。
 修正方法は robot-config.html (SDK付属の help/doc ディレクトリ内にございます)をご覧ください。

【FAQ】カブロボサイトでの稼動テストと拡張検証パックでのテストの結果の違いについて

カブロボサイトでの稼動テストと拡張検証パックを使用したときのJavaカブロボのテストの結果
の差異について、ご質問がありましたのでお答えいたします。

以下の要因により、結果が変わる可能性があります。

・本番サーバーでは、日々株式分割より株価が修正されたり、
 上場廃止より対象銘柄から外れたりしておりと、株価データの違いが考えられます。

・本番サーバーのカブロボSDKは、最新のものを使用しておりますので、
 お使いのカブロボSDKとのバージョンの違いが考えられます。

テストのバリエーションも豊富ですし、処理も高速なので、
カブロボの検証テストは、カブロボサイトでも行うことをお勧めいたします。

【お知らせ】ETF機能対応のカブロボSDK2.1.0-beta1版リリース

ETF機能対応のカブロボSDK2.1.0ベータ版をリリースいたしました。

ETF とは、"Exchange Traded Fund"の略で、
東証などの取引所で取引きされている投資信託のことを指しています。
カブロボでは、

1330 上場インデックスファンド225
1306 TOPIX連動型上場投資信託

の2銘柄を取り扱います。

ログイン後、カブロボ工房からダウンロードして頂き、カブロボを開発して頂くことができます。
お試し頂けたら幸いです。

お試し版であるため、カブロボサイトにアップロードまたオンラインテスト等はまだできません。
近日中にご利用頂けるようになる予定です。
安定版のカブロボSDK2.0.3は、通常通り行えます。

以下に、ETF対応のSDKの使用方法を簡単にご説明いたします。

●ETFを使うために
robot-config.xml を事前に修正しておきます。
指定方法は SDK付属のrobot-config.html のドキュメントをご覧ください。

●ETFの使い方
ETFは通常の銘柄と同様に扱うことができます。
OrderManagerクラスで通常の銘柄同様注文します。
成行、指値、逆指値も可能です。
また、空売りもできます。

●ETFのStockクラスの取得方法
詳しい内容は、JavaDocをご覧ください。

for(Category cat: InformationManager.getInstance().getEtfList()){
cat.getStockList()
}

EnumETFCodeList
InformationManager.getInstance().getEtfList()
InformationManager.getInstance().getEtfNikkei225List()
InformationManager.getInstance().getEtfTopixList()

●ETFと通常の銘柄の違い
- robot-config.xml の修正が必要
- 業種コードが10000以上 (通常は10000未満)
- ETF では出来高制限無し
- 出来高、売買代金は取得可能
- 銘柄詳細情報(stock_detail)では、PER, PBR は必ず -1 が返るが、それ以外は取得可能

【お知らせ】新刊「よくわかるJava」

「株式自動売買ソフトウェア 株ロボを作ろう!」の著者である鳥海氏が
「よくわかるJava」というJavaの入門書を発刊いたしましたのでお知らせいたします。amazonへのリンク

これからJavaのプログラミングを始められる方に最適な入門書です。
ご活用いただければ幸いです。

トレーリングストップのサンプルロボット

トレーリングストップとは | 簡単な設定例 | コード説明 | ソースコードダウンロード


トレーリングストップとは

トレーリングストップとは、利益になっているトレードにおいて、利益を確実に確定するという手法であり、利益から損失に変えない為のトレード手法です。逆指値の値段を株価に合わせて上げていくことで利益確定のラインを決定します。
設定できるのは以下の4項目です。
目標値(%)
ストップロス(%)
損切り(%)
最長ホールド日数(日)

目標値にはトレーリングストップが発動する条件を指定します。
5%と指定すると、高値が購入金額×1.05を超えるとトレーリングストップの注文を出します。

ストップロスには目標値を超えたときに、最高値を基準にストップロスの値段を設定します。
2%と指定すると、最高値×0.98の金額で逆指値注文を出します。

損切りには株価の安値を基準に反対売買注文を出します。
3%と指定すると、安値が購入金額×0.97を下回ったら、即時成行で反対売買注文を出します。

最長ホールド日数には保有する日数を設定します。
どのような場合でも、この期間が過ぎたら即時成行で反対注文を行います。

この説明は現物買いのときを前提にしていますが、信用売りを行っている場合もこの設定で大丈夫です。 つまり、信用売りの場合は安値が購入金額×0.95を下回ったら、トレーリングストップが発動し、最安値×1.05で逆指値の返済注文を出します。 最安値を更新すると逆指値の値段は下がっていきます。


簡単な設定例

カブロボSDKに付属するサンプルロボットに利益率が5%以上の銘柄に対してTrailing Stopの戦略を適応しました。
サンプルロボットでは保有銘柄の利益率が15%上がったら利益確定売りを行うのですが、Trailing Stopの戦略を行うことによって、 損益率がさらにあがっても利益確定売りライン(逆指値注文)を自動的に引き上げてくれるので、利益を確保しながら利益を伸ばすことができます。
また、損切りを購入株価の-6%の値段で逆指値注文を常に繰り返すことによって、サンプルロボットの損切りラインを過ぎてから成り行き売買で損切りを行うよりも、 リスクをコントロールすることができます。

1年でのトータル純損益 9.94%
平均利益 7.45%
平均損益 -4.79%

資産推移グラフ
サンプルロボット パフォーマンス

単純にバイアンドホールドでは生み出せない高い収益と安定性。

サンプルロボットのトレード毎実現損益率別件数ヒストグラム
サンプルロボット パフォーマンス

トレイリングストップ戦略実装サンプルロボットのトレード毎実現損益率別件数ヒストグラム
トレイリングストップ戦略実装サンプルロボット パフォーマンス

数10%以上値上がりする銘柄も、利益確定売りせずにホールドし続けます。
また逆指値注文による損切りを行うことで、設定した-6%前後で損切りできていることがわかります。


コード説明
行数
018 public class TrailingStopSampleRobot extends SampleRobot {
019
020   @Override
021   public void order(TradeAgent tradeAgent) {
022
023     // 保存してあるメモを取得します。
024     SampleObjectMemo memo = (SampleObjectMemo) tradeAgent.getMemoManager().getObjectMemo();
025     // メモが null の時のことを考えて null チェックをします。
026     if(memo == null) return;
027
028     // シグナルと反対のポジションを解消します。
029     orderReverseBySignal(memo);

SampleTrailingStopクラスはSampleRobotクラスを継承しています。
orderNewメソッドとorderReverseBySignalメソッドとscreeningメソッドはそのまま使用しますので、SampleTrailingStopクラスで記述する必要がありません。
orderメソッドは挙動が違うのでオーバーライドします。

行数
031     // ポートフォリオを参照します
032     ArrayList portfolioList = tradeAgent.getPortfolioManager().getPortfolio();
033     for (Portfolio portfolio : portfolioList) {
034
035     // トレーリングストップ注文を行います。
036       orderTrailingStop(portfolio, 5.0, 7.0, 6.0, 300);
037     }

自分のportfolioListを取得し、for文でポジションごとにトレーリングストップメソッドを呼び出します。
36行目の場合、
目標値(損益率)が5%を超えたらトレーリングストップを実行し
最高値より7%低いの金額で逆指値注文をします。
また目標値に届かなかった場合、買った値段より6%の金額で逆指値注文をして損切りします。
最後の300は保有日数が300日を超えたとき、どのような場合でも即時成行で反対注文を行います。

行数
085     // 保有銘柄の期間中の株価をリストとして取得します
086     ArrayList stockDataList = im.getStockSessionByInterval(
087        portfolio.getExecDate(), tm.getCurrentDate(), stock);
088
089     for (int i=0; i < stockDataList.size(); i ++)
090     {
091       StockData stockData = stockDataList.get(i);
092
093       if ( i == stockDataList.size()-1 )
094       {
095         // 新規売買を行ったセッションのみ終値で判断を行います。
096         // (高値・安値と約定価格の順序関係を認識できないため)
097
098         if (peakPrice < stockData.getClosingPrice())
099           peakPrice = stockData.getClosingPrice();
100
101         if (bottomPrice > stockData.getClosingPrice())
102           bottomPrice = stockData.getClosingPrice();
103       }
104       else
105       {
106         if (peakPrice < stockData.getHighPrice())
107           peakPrice = stockData.getHighPrice();
108
109         if (bottomPrice > stockData.getLowPrice())
110           bottomPrice = stockData.getLowPrice();
111       }
112     }

保有期間中の最高値と最安値を算出します。
stockDataListにstockで指定された銘柄の「portfolio.getExecDate」(購入日)から「tm.getCurrentDate」(今日)までの四本値を格納します。
for文で一日ごとを比較し最高値と最安値を算出します。
新規売買した日は高値・安値と約定価格の順序関係を認識できないため、終値のみを使います。

行数
118     if (portfolio.getExecQty() > 0)
119     {
120       // 現物買いトレードについての判断
121
122       // オーダータイミング2:ストップロスの逆指値注文を行います。
123
124       // 買付け後の最大利益率
125       double profitPeakRatio = ((double)peakPrice / execPrice - 1) * 100;
126
137
138       // 目標達成の判定
139       if ( profitPeakRatio > targetRate )
140       {
141         // 逆指値注文価格
142         int orderPrice = (int)(peakPrice * (1 - (stopLossRate / 100)));
143
144         orderReverseStopForPortfolio(
145           portfolio,
146           orderPrice,
147           "トレーリングストップによる売却 取得後の高値:" + peakPrice
148           );
149         return;
150       }

現物買いと信用売りで注文価格が異なるので場合わけします。
portfolio.getExecQtyが0より大きい場合現物買いなので、
現物買いに対応する注文値段を計算します。
その後、買付け後の最大利益率を計算し、
最大利益率が目標値を上回った場合にorderReverseStopForPortfolioメソッドを呼び出して逆指値注文を出します。

行数
152       // オーダータイミング3:損切りの対象です。
153
154       // 現物買いトレードの場合の損切り
155       int lossCutPrice = (int)(execPrice * (1 - (lossCutRate / 100)));
156       //損切りのための逆指値注文を行います。
157       orderReverseStopForPortfolio(
158         portfolio,
159         lossCutPrice,
160         "現物買いの損切り:"
161         );

最大利益率が目標値を上回っていなかった場合は損切りのための逆指値注文を行います。

行数
217   protected void orderReverseStopForPortfolio(Portfolio portfolio,int orderPrice, String reason){
218     // ポートフォリオから直接反対売買注文を行います。
219     boolean result = portfolio.orderReverseNowStopAll(orderPrice);

orderReverseStopForPortfolioメソッドで実際に逆指値注文を行います。
portfolio.orderReverseNowStopAll(orderPrice);で指定した値段で逆指値注文を行います。
その後はログを出力します。


ソースコードダウンロード
TrailingStopSampleRobot.java
※このロボットはSampleRobot.java、SampleObjectMemo.javaがないと動作しません。
カブロボをお使いのPCで実行するには、カブロボSDKが必要です。

別途、カブロボサイトからカブロボSDKをダウンロードしご利用ください。

【TIPS】成績指標(1)

成績指標(1)

カブロボでは成績や特徴を評価するために多数の成績指標が用意されています。
このコーナーでは複数回に渡って様々な成績指標を解説します。

◆トータル純損益

カブロボがどれだけ資産を増やせたかを計る、最もシンプルで大切な成績指標です。
運用期間中の資産の増加率をトータル純損益と呼びます。

例えば、5000万円の資金を6000万円に増やした場合、トータル純損益は20%になります。
逆に4000万円に減らしてしまった場合は-20%です。
売却・買戻ししていない保有株式も時価で評価します。

◆年率換算利回り

トータル純損益を複利で1年間あたりに換算した値です。

例えば、半年間のトータル純損益が10%だった場合、
半年を1年間に換算するために2乗します。
1.1を2乗した1.21、すなわち21%が年率換算利回りです。

運用期間が1年未満で短い場合は、極端な数字になりやすいので注意が必要です。
運用期間が1年を超える場合は、トータル純損益よりも0に近い数字になります。

【TIPS】銘柄の売買判断順序を工夫しよう

限られた資金を効率的に運用するには、銘柄の売買判断順序がとても重要です。
「値上がり率順」や「売買代金順」、「配当利回り順」など、21種類の順序から簡単に選ぶことができます。
設定する際は下記の方法・箇所をご利用下さい。

◆Java Kaburobo SDK

InformationManagerクラスのgetMarketRanking()メソッド

◆KBユニバーサル

「2. 銘柄を選ぶ 」の「銘柄ソート」ページ

◆KBストラテジー

「投資戦略ウィザード」をご利用の場合は、
「基本戦略」ページの「注目株(ランキング)」項目

「詳細設定」をご利用の場合は、
「基本戦略」の「行動」の「注目株(ランキング)」項目

【TIPS】出力ログを確認しよう

7月初旬より、カブロボサイト上で、運用中のカブロボに出力ログの表示機能がつきました。
プログラムから標準出力した内容がこのログビューアで見ることができます。

特に、SDKで開発されている方はご自分のロボットが運用環境ではどんなログを
出力しているのか気になるのではないでしょうか?

現時点はサーバ負荷の影響を考え、100行を上限とさせていただいています。
今後チューニングを重ね、すべてのログを見れるように改善していきたいと思います。

【SDK】TradeIDとCustomerTradeIDを使い分けよう

TradeIDでは足りないという方向けに、CustomerTradeIDというIDがあります。
CustomerTradeIDは何かというと、1つの注文に対してあなたが作ったカブロボが自由に付けられるIDのことです。
新規注文、返済注文を問わずに自由に指定出来ます。(逆に言えば何もしなければ何も指定されません。)
注文受付時に自動的に付与されるTradeIDとは異なり、CustomerTradeIDでは注文時に付与出来るのも
非常に便利に利用する事が出来ます。

TradeIDでは1トレードを表現するのに対して、
例えばCustomerTradeIDではどのシグナルで発生した注文かを割り当てる事も出来ます。

具体的には、短期売買の新規シグナルを1、長期売買の新規シグナルを2とした時に、
注文時にCustomerTradeIDを1か2を割り当てて注文をします。
そして、ポートフォリオ一覧で「ソフトバンク(9984) 3000円 1000株保有 TradeID=10」という状況があった場合に、
TradeID=10の注文履歴を検索します。
すると「9984 2800円 1000株 買い TradeID=10 CustomerTradeID=2」というような注文履歴が見つかる事でしょう。
この保有株は長期売買のシグナルで購入したものだということがわかり、
利益確定や損切りのライン調整が可能になります。

このように、CustomerTradeIDはTradeIDと組み合わせて利用することで非常に強力な投資戦略を組む事が出来ます。
是非あなたのカブロボにも組み入れてお役立て下さい。

【お知らせ】カブロボSDK2.0.3と対応パッケージをリリースしました

本日、カブロボSDK2.0.3とその対応パッケージ
(カブロボ成績表作成ツール、拡張検証パック)
をリリースいたしました。

これからカブロボを作られる方は、この最新版をお使いくださいます様お願いいたします。
ログイン後、カブロボ工房からダウンロードしていただけます。

今回の修正履歴は以下の通りです。

2007/07/10 version 2.0.3
【修正】信用残系のランキングがまれに取得出来ないことがあるのを修正
【修正】MarketRankingにおいて期間外を指定した際にエラーが発生する問題を修正
【修正】アップティックルールのチェックを指値価格の丸めより前に行うように修正

【SDK】TradeIDでカブロボのポートフォリオを厳密に管理

TradeIDというものをご存知でしょうか。
TradeIDとは1つのトレードにユニークに割り当てられるIDの事です。

カブロボでいうトレードとは、特別な意味を持ちます。
具体的に言うと「1つの新規注文と、それに対応する全ての返済注文」を1つのトレードとして扱います。
新規注文が成功した時点でTradeIDが割り当てられ、約定後はポートフォリオでもそのIDが管理されています。
ただし、注文時にはまだTradeIDは割り当てられていません。
注文を正しく受け付けた時点で割り当てられるので、注文をした次のフェーズから取得可能です。

TradeIDの流れを具体例で説明します。
ソフトバンク(9984)を2800円で1000株購入します。
この注文が受け付けられた時点で「9984 2800円 1000株 買い」という注文に対してTradeIDが振られます。
例えばTradeIDとして10が振られたとします。
すると、ポートフォリオ一覧においても、「9984 2800円 1000株保有 TradeID=10」という状況が確認出来ます。

ここでソフトバンクが3000円に値上がりしました。
ポートフォリオ一覧では「9984 3000円 1000株保有 TradeID=10」という状況になります。
値上がりしたので利益確定をしましょう。
「TradeID=10の保有株 9984 3000円 1000株 売り」という売り注文になります。
ここでTradeIDが指定されているのは、同じソフトバンクの保有株でも、別の機会に購入したものとは
TradeIDが異なるからです。
これで買い→売りの一連の流れがTradeIDというユニークなIDによって実現できました。

短期売買のシグナルで購入した保有株と、長期売買のシグナルで購入した保有株では
利益確定や損切りの許容度がまるで違います。
カブロボではそのようなシグナル別の保有株に対して個別にリスク管理が出来るようになっています。
TradeIDの意味をよく理解した上で是非投資戦略にお役立て下さい。

【SDK】条件付特別注文を使おう

カブロボSDKでは、寄付きの株価に応じて注文をコントロールすることができます。

条件付特別注文機能をご利用いただければ、始値に応じて発注することや、指値・逆指値などの注文価格を変更することができます。

取引時間中の値動きを想定したトレード手法、寄付きの急な相場変動へのリスク対策アルゴリズムなど、高度なカブロボの開発にぜひご活用下さい。

詳しい作り方は、以下のページが参考になります。

IBM developerWorks
第2回スーパー・カブロボ・コンテスト: 上級編(6) - 条件付き発注ロボットを作る

目次:
- 条件付き発注
- 条件付き発注ロボットを作るための準備
- 条件付き発注ロボットを作る
- スーパー・カブロボ・コンテストに参加しましょう!

【SDK】成績表の注文理由別集計を活用する

成績表の一番下に、注文理由別集計があるのはご存じですか?
以下の例のように、理由に数字を指定すると、理由毎に集計してくれます。
(その場合、数字は無視されます)
例えば、同一の理由で数値がしきい値を超えた場合、理由付けに、

  • A値しきい値越え:20
  • A値しきい値越え:35.2

と書けば、以下のように
  • A値しきい値越え:* --- 2件

といった形で、同一の理由として集計され、
理由全体の傾向が把握しやすくなっています。

理由の指定方法については、
OrderManager#setLastOrderReason()
の JavaDoc をご参照ください。

【お知らせ】カブロボSDK 2.0.2をリリースしました

本日、カブロボSDK 2.0.2 をリリースいたしました。 これからカブロボを作られる方は、この最新版をお使いくださいます様お願いいたします。 ログイン後、カブロボ工房からダウンロードしていただけます。

今回の修正履歴は以下の通りです。

2007/06/22 version 2.0.2

【修正】InformationManagerから銘柄リストを取得した場合に非対象銘柄が返る場合があった問題を修正
【修正】InformationManager#getMarketIndexByInterval, getMarketExchangeByInterval, getMarketDetailByIntervalの返すリストに終了指定日付のデータが含まれていない問題を修正

【SDK】オンラインセミナー: カブロボJavaプログラミング

テーマ: 「カブロボJavaプログラミング」 
Webブラウザを使って、いつでもご覧いただけます。 セミナー時間:60分間
視聴するには、こちらをクリックしてください。 数十秒して再生が始まります。 (6月20日に実施したセミナーです。協力:マネックス証券)
内容: 1. カブロボの仕組みと概要
    2. Kaburobo SDK(開発環境)のご紹介
    3. Kaburobo SDKを使って、カブロボを作ろう (協力:日本IBM)

*このセミナーは、「Eclipseを使い、Java言語でプログラミングができる(中級以上)の方」を対象とさせていただいています。 カブロボを作るための実践的な手法についてご説明します。開発環境は、Windows XPとEclipseを前提にしています。
 
セミナーの内容に関しまして、日本IBM developerWorks上に、詳しいご説明がございます。

 予習編 (カブロボ作成の準備) 開発環境の設定方法など
 カブロボ開発実践情報 いろいろなサンプルコードが揃っています。

【SDK】統計数学関数の活用

カブロボSDKには、統計的な数学関数を提供する KaburoboMath というクラスがあります。 統計的な計算する方は、自ら計算処理を記述しなくても、これらのクラスを利用すると便利です。

・数列の算術平均値
・2つの数列の相関係数
・2つの数列の共分散
・数列の変化率の不偏標準偏差
・数列の不偏標準偏差
・数列の母標準偏差
・数列の不偏分散
・アルファ値(ジェンセン測度)
・ベータ値

これらは、static メソッドなので、例えば、2つの数列の相関係数を計算する場合は、

KaburoboMath.calcCORREL(double[] ary1, double[] ary2)

と記述すると計算できます。 ぜひご活用ください。

【SDK】注文理由を使おう

Kaburobo SDK では、プログラミングの際に、それぞれの注文指示に、作者が理由を付けられる機能があります。 それらの理由は、運用(テスト)過程で自動集計され、詳細成績表の中で 「注文理由別の勝率」 として確認することができます。

この注文理由機能はとても強力です!
必要な個所に注文理由を付けてプログラミングすることにより、そのカブロボの、どの判断部分が良いのか、もしくは悪いのかを、容易に見分けることができるようになります。 是非この注文理由機能をつかって、より洗練されたアルゴリズムを研究していただければと思います。

【SDKサンプル】外国為替の影響を考慮したカブロボの作成

カブロボは、各銘柄の株価に関する情報だけではなく、他のマーケット関連情報についても取得できるようになっています。 その1つが外国為替情報です。 株価同様に毎日変化する米ドルやユーロといった外国通貨のクロスレート (簡単に言えば「1ドルや1ユーロが何円なのか」という情報) をカブロボの判断に加えることができます。

それを用いたカブロボを、IBM developerWorks 上で公開いただいていますので、ご紹介いたします。 Javaでカブロボを作られる方は、サンプルコードと詳しい解説が付いていますので、ぜひご覧ください。 記事はこちらです。

【お知らせ】カブロボSDK2.0.1をリリースしました

カブロボSDK2.0.1をリリースしました。 変更箇所は、以下をご覧ください。 お手数ですが、カブロボの開発にあたっては、この最新版のご利用をお願いします。
2007/05/29 version 2.0.1

【新機能】PortfolioManagerに指定銘柄を保有しているかを取得するメソッドを追加
【修正】特別な環境下において銘柄組み入れ比率などの設定が正しく反映されない問題を修正

【SDK】Javaプログラミングでお勧めのサイト

こちらの2つのサイトでは、カブロボSDKの使い方やサンプルロボットの情報が充実していますので、ご参考にしていただければと思います。

- 日本IBM developerWorks
- カブロボの豆

【SDK】バックテストの最終日に特別な処理を追加する方法

Kaburobo SDK には、terminate() というメソッドがあり、このメソッドはロボットの処理終了時に呼ばれます。 主に最終成績を表示する用途に使用されますが、他の終了処理を行なうこともできます。

【要望】分析クラスにint型配列以外も使用できるようにしてください

Q: double型配列を渡すことができる分析クラスに限りがあります。 今のところ、次の分析クラスにはint型の配列しか渡せません。また、MovingAverage#getBaseIndexExponentialArrayメソッドも、int型配列しか渡せません。MACDのSIGNALを計算したいので、MovingAverage#getBaseIndexExponentialArray(double[], int, int) を追加してださい。

A: ご提案ありがとうございます。 4月下旬にリリースする カブロボSDK RC2 にご要望の機能を盛り込もうと思います

【FAQ】TOPIXや日経平均に対し、AnalysisManagerクラスを使用できますか?

A: 株価指数のテクニカル分析につきましては、株価のように各分析クラスから取得する機能はありませんので、 InformationManager#getMarketIndexByInterval()等から、株価指数のdouble型配列を作成していただき、各分析クラスに渡していただくことでご利用いただけます。

【お知らせ】カブロボSDK2.0.0 rc1をリリースしました

rc1とは リリースキャンディデート1の略で、最終仕様の評価版を意味します。
このバージョンでは、ご要望が多かった 「条件付特別注文」 が出せるようになりました!

# 条件付特別注文とは?

注文に高度な発注条件を付加することができます。発注条件を付加した注文は、始値の決定後に市場に発注されます。トリガー機能と注文価格修正指示機能は、両方使用することも、どちらか片方のみを使用することもできます。

詳しくは、以下をご覧ください。 また、それ以外にも改良を加えています。
【トリガー機能】
始値が指定の下限値~上限値の範囲内であった場合に注文が市場に発注されます。 下限値と上限値の片方のみを指定することができます。
発注条件 : 下限値 ≦ 始値 ≦ 上限値

【注文価格修正指示機能】
指値・指成・逆指値の注文価格を始値によって修正させる機能です。
修正後注文価格 = 始値 + 修正加算額


########## SDK更新履歴 ############

2007/04/03 version 2.0.0 RC1

【新機能】条件付特別注文を追加しました。OrderManager#setLastOrderSpecial で利用可能です。
【改良】逆指値注文の約定価格の仕様を変更。注文価格より1呼値単位分、買いは高く、売りは安い約定価格になります。
【改良】不正防止の為、OrderManager#addOrder()をDeprecatedに変更
【改良】成績解析の精度を向上
【修正】beta2で廃止されたOrderManager#checkMaxOrderQtyと
OrderManager#checkMaxOrderQtyReverseを互換性維持のため復元
【修正】新規買い逆指値注文の必要取引余力を成行注文と同等の計算方法に変更

【お知らせ】カブロボSDK 2.0.0 beta2と2つのパッケージをリリースしました

カブロボSDK 2.0.0 beta2をリリースしました。 また、(1)カブロボ成績表作成ツールと、(2)拡張検証パックを別にご用意しました。

(1)カブロボ成績表作成ツール
このカブロボ成績表作成ツールは、カブロボSDKで検証したロボットの成績表を作成するツールです。 資産推移グラフ、年次成績表、ドローダウン推移グラフ、銘柄別集計、トレード別集計など様々な角度から、作成したカブロボのパフォーマンスを検証することができます。

(2)拡張検証パック
この拡張パックは、カブロボSDK 2.0.0 beta2とは、別パッケージです。
こちらをお使いいただくことで、カブロボ対象全銘柄での挙動が検証できるようになります。

それぞれの詳細は、以下をご覧ください。

-- カブロボSDKの変更履歴 --
2007/03/13 version 2.0.0 beta2
【新機能】InformationManager#getListedDate()に銘柄上場日を返す関数を追加
【新機能】InformationManager#getStockList(int date)に指定有効日数以上の銘柄リストを返す関数を追加
【新機能】InformationManager#getAvailableDateCount()に有効日数を返す関数を追加
【新機能】Stock#getAvailableDateCount()に有効日数を返す関数を追加
【改良】発注時の取引余力計算に手数料も同時に考慮するように改良
【改良】上場直後銘柄のテクニカル分析の計算方法を改良
【改良】上場直後銘柄のMarketRankingの計算方法を改良
【改良】決算データの取得可能日を現実的な2ヵ月後に変更
【修正】OrderManager#cancelOrderByIndex()でキャンセル注文を取り消すとNullPointerExceptionが発生する問題を修正
【修正】MovingAverage#getIndexExponentialにおいてIndexOutOfBoundsExceptionが発生する問題を修正
【修正】OrderManager#checkMaxOrderQtyReverseにおいてArithmeticExceptionが発生する問題を修正

■拡張検証パック
この拡張検証パックを使っての検証可能期間は2006年1月4日~2006年12月29日です。
ダウンロードした後、解凍し、カブロボSDKのインストールディレクトリにコピーしてお使いください。
※ 本検証パックでは多量な情報を扱います。そのため、高機能なPCが必要になります。以下の推奨スペックを満たさないPCでは、動作しない場合があります。
○推奨スペック 使用可能メインメモリ: 1GB (1024MB) 以上
○最低スペック 使用可能メインメモリ: 512MB 以上

【お知らせ】カブロボSDKベータ版 (2.0.0 beta1)をリリースしました

カブロボSDK: 次回用のベータ版 (2.0.0 beta1)をリリースしました!


前回大会でお寄せいただいたご要望にお応えするために、数々の新機能を追加しています。 また、処理速度を大幅に向上させています。

カブロボSDKは参加者登録しログインして頂きますと、ダウロードすることができます。

新機能は以下の通りです。(前回大会のSDK1.0系との互換性を考慮しています)
.
カブロボ開発は、JDK 6で行っていただくことをお勧めします。

【新機能】4本値データのキャッシュすることで計算量の多いロボットのバックテストを高速化
【新機能】統計的な数学関数を扱うKaburoboMathクラスを追加(staticメソッドのみのライブラリクラス)
【新機能】各注文に対して、どのファイルの何行目から出たものなのかを自動集計
【新機能】全ての注文に対して個別に注文理由をつけられるメソッドを追加
【新機能】MarketDetail(市況情報)のデータを追加し、APIの仕様を変更
     出来高、売買代金、値上がり株数、値下がり株数、変わらず株数、総株数、
     値付け率、時価総額、単純平均、加重平均
【新機能】Java6に対応
【新機能】Stock.getCreditTradeType()で信用貸借銘柄の区別を取得出来る機能を追加
【新機能】Portfolio及びPortfolioHistoryに以下のメソッドを追加
     保有日数(日)、評価損益(円)、評価損益(%)、現在株価(円)
【新機能】出力ログのポートフォリオをより詳細に把握出来るように表示項目を追加
【新機能】データパックの切り替えを設定ファイルにて変更出来る機能を追加(ディレクトリ名を指定)
【新機能】初期資金を設定ファイルで変更できる機能を追加
【新機能】新規注文の銘柄組入比率上限値を設定ファイルで変更できる機能を追加
【新機能】信用売りの有無を設定ファイルで変更できる機能を追加
【改良】過去5日間の出来高平均による注文量上限値を変更
【改良】InformationManager.getStockList()で上場済み銘柄のみ返すようにする(getStockListAllで既存の動作)
【改良】本戦環境と同様に、スクリーニング時の当日海外指標・外国為替データはNullが返るように変更
【改良】SDKの付属データを50銘柄を標準とするように変更
【改良】4本値のデータに限りNullPointerExceptionが出ないように変更(出来高0の日のデータ仕様を変更)
【改良】テクニカル分析においてNullPointerExceptionが出ないように変更
【改良】最終成績表において、最終ポートフォリオを最終日の引けで反対売買したとみなすように変更
【改良】最終成績表の表示を変更
【改良】逆指値注文の必要取引余力を指値注文と同等の計算方法に変更
【改良】複数タイムゾーンに対応するように改良
【修正】値幅制限が計算出来ない場合に取引余力以上の注文が出せてしまう問題を修正
【修正】MarketIndexの期間指定においてデータが取得できなかった問題を修正
【修正】BolingerBandをBollingerBandに修正


今後のKaburobo SDKのリリース予定は、こちらです。

2007/03/01 beta1: 機能(仕様)確認が目的のもの、最終版までに仕様を変更する場合があります。
2007/03/15 beta2: 同上(成績表示機能などを追加予定)
2007/04/03 RC: 最終仕様版 (皆さまからの要望を反映、不具合を修正)
2007/05/01 FINAL: 本番用


ご試用いただきまして、感想やご要望などをお知らせいただければ幸いです。

*汎用ロボットでご参加を希望される方は、4月に環境をリリースしますので、今しばらくお待ちください。

よろしくお願いします。

Home > プログラミング > Javaカブロボ

Search
Feeds

Page Top