IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Java technology  >

カブロボ・コンテスト : カブロボコンテストへのご招待・その3

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません


レベル: 中級

鳥海 不二夫, , OCSolutions

2006年 1月 25日

さて、前回のコラムでは情報取得方法、売買注文の方法などをお伝えしました。自作ロボによるコンテストへの参加方法もお伝えしましたが、皆さん無事カブロボ・コンテストへは参加されましたか?ちょっと前から私のロボットはライブドアショックのあおりを受けて順位を一気に下げてしまいました。無念。

前回コラムの補足

さて、前回コラムで株価指標情報などを取得する再に、

	Calendar calendar = Time.getTime();

というコードを書いておりました。これについてちょっと補足します。
実はTimeというクラス、kaburoboSDK以外にも、java.util.sql.Timeが存在します。もしこちらのクラスをimportしてしまいますと、getTimeで返って来る値がdoubleになるため、コンパイルエラーとなってしまいます。
必ずjp.kaburobo.utilをimportするようにしてください。

実践的なkaburoboを目指して

さて、これまでのコラムでは、カブロボ・コンテストに参加するための基本情報をお伝えしてきました。
しかしながら、参加するからにはちゃんと意味のある売買をしなければいけません。というわけで、最終回である今回は、より実践的な、

  • テクニカル分析
  • カブロボの基本戦略

についてお伝えしていきたいと思います。




上に戻る


テクニカル分析とは

テクニカル分析は、チャートを見ながら購入する銘柄を決定する分析方法です。 「チャートでこういう形が現れたら、それは買いのサインだ!」とか、「こういう形になったらあとは株価が下がるばかりだから、早めに売らないと損をするぞ!」とかいった分析が可能になります。

もちろん、必ずそうなると決まっているわけではないですが、少なくとも経験的には結構当てはまるもののようで、占いやランダムよりはよっぽど頼りがいがあります。一般にテクニカル分析は短期予測に適しているといわれています。というのも、テクニカル分析は銘柄チャートの動きを元に分析を行うため、あまりにも長期の予測になると外乱が増えてしまい、役に立たなくなってしまうことが多いためです。カブロボ・コンテストは、短期予測によって取引を行うことになるため、テクニカル分析は非常に有効に働くことが予想されます。

カブロボにはそんなテクニカル分析を使うために便利なクラスがいくつも用意されていますので、利用して高性能カブロボを目指しましょう。

カブロボで使えるテクニカル分析

カブロボSDKで用意されているテクニカル分析手法は、以下のとおりです。

  • 移動平均乖離情報
  • ゴールデンクロス情報
  • MACD情報
  • 相対力指数RSI
  • ボリュームレシオ

それぞれについて簡単に説明しましょう。

移動平均乖離情報

株価は、毎日変動しています。その動きはカオスといわれ、予測は出来ないといわれています。しかしながら、一定の期間は一定の傾向をもって変動を繰り返していることが分かっています。そこで、平均的な値動きから今現在の値動きがどの程度はなれているかによって買い時、売り時を判断する方法が移動平均乖離法です。 あがりすぎたら売却し、下がりすぎているようであれば購入するというのが基本戦術になります。

ゴールデンクロス情報

ゴールデンクロスとは、長期移動平均を短期移動平均が下から上へ追い越したことをいいます。超買いのタイミングです。ゴールデンクロスを見つけたら、何はなくとも買いに走りたいところです。 逆に、デッドクロスは、長期移動平均を短期移動平均が上から下へ突き破ったときをいいます。今後株価がどんどん下がっていくといわれる恐怖のシグナルです。 これら二つのシグナルがゴールデンクロス情報です。この指標での判断は簡単。ゴールデンクロスシグナルが出たら買い、デッドクロスシグナルが出たら売りです。

MACD情報

MACDは、2本の平滑平均(5日と20日の平滑平均)の差を指し、さらにその移動平均とのゴールデンクロス、デッドクロスから株価の予想をする手法です。 なかなか直感的な説明が難しい指標です。

相対力指数RSI

相対力指数RSIは、株価の変動幅(上昇・下降)に対する上昇分の割合を示します。一定期間内の変動の割合を見ることで、その期間ではどのくらい上がったり下がったりしたのかが確認できます。その式は、


RSI=A/A+B

A=期間内の値上がり幅の合計
B=期間内の値下がり幅の合計
によって与えられます。

RSI値が100%なら、期間内はずっと上昇しつづけた持っていればうれしい銘柄で、逆に0%なら、期間中下落し続けた持っていたら毎日胃が痛くてたまらなくなるであろう恐ろしい銘柄ということになります。

ボリュームレシオ

ボリュームレシオ(Volume ratio)は、出来高と株価を元に、RSIのような売りすぎ、買いすぎを表現する情報です。基本的には、RSI同様に株価が上昇したときの出来高と株価が下落したときの出来高の比で表されます。
他のテクニカル分析の手法と違い、出来高を使う点が特徴的です。

テクニカル分析準備

テクニカル分析を行うためにはTechnicalAnalysisManagerを使います。また、チャート情報もあわせて使います。

// agentは、InvestmentAgent
TechnicalAnalysisManager techManager = agent.getTechnicalAnalysisManager();
List list = infoManager.getIndexInformation(stocks, Time.getTime(), -30);
PriceData[] priceDataArray = (PriceData[])list.toArray(new PriceData[0]);

TechnicalAnalysisManageは全てのテクニカル分析を行う大本のクラスとなります。テクニカル分析を行うためには、このクラスの必要なメソッドを呼べばよいわけです。

一方、PriceDataの配列は、テクニカル分析に必要なチャート情報です。この例ですと、今日から遡って30日分の値動きチャート情報を取得しています。では、次にこのチャート情報とTechnicalAnalysisManagerを利用して実際にテクニカル分析を行ってみましょう。今回例として用いるのは、移動平均乖離率です。

移動平均乖離率

移動平均乖離率情報を取得するメソッドはTechnicalAnalysisManager#getConversionPremiumです。

	public void run(InvestmentAgent agent) {
		//Stock情報を取得
		Stock[] stocks = agent.getStocks();
		Stock stock = stocks[0];
		//チャート情報を取得
		InformationManager infoManager = agent.getInformationManager();

		List list = infoManager.getIndexInformation(stock, Time.getTime(), -30);
		PriceData[] priceDataArray = (PriceData[])list.toArray(new PriceData[0]);
		//テクニカル分析の準備
		TechnicalAnalysisManager techManager = agent.getTechnicalAnalysisManager();
		//移動平均乖離率を10日移動平均を利用して取得
		//conversionListは、移動平均ConversionPremiumが格納されたList
                List conversionList = techManager.getConversionPremium(priceDataArray, ", 10);
		Iterator it = conversionList.iterator();
		while(it.hasNext()){
			ConversionPremium cp = (ConversionPremium)it.next();
			double conversionPremium = cp.getConversionPremium();
			System.out.println("乖離率:"+conversionPremium);
		}
	}
            	

TechnicalAnalysisManager#getConversionPremiumの最初の引数は、移動平均を取るPriceDataの配列です。株価に対して移動平均乖離率を求めるのなら、二番目の引数には好きな文字列を入れてください。ちょっと分かり辛いのですが、ここでは二番目の引数は関係ないと思ってもらってかまいません。二番目の引数を使うのは、米ドルやTOPIXの移動平均乖離率などのテクニカル分析の指標を手に入れる場合に使いますので、今回は気にしないようにしましょう。そして、三番目の引数には何日の平均を取るかを入れます。

得られたListにはConversionPremiumが格納されています。これによって乖離率を%単位で取得することが出来ます。 なお、ConversionPremiumクラスで得られる情報の一覧は以下のとおりです。

情報メソッド返値
乖離率getConversionPremium()%表示のdouble
移動平均値getMovingAverage()MovingAverageのインスタンス
日付getDate()Calendar

では早速実行してみます。

■1日目2005/05/01 日 終了時の所持金額
No Data
実行時間: 0.0 秒.

■2日目2005/05/02 月 終了時の所持金額
                  総資産 = 手持ち資金+所有株式時価総額 = 5,000,000円
                 手持ち資金(運転可能金額 + ロック金額) = 5,000,000円
                                           運転可能金額 = 5,000,000円
                                                     ロック資金 = 0円
                                              単純計算年率利益率 0.0%

○ロボットの銘柄評価
乖離率:-0.5401378282734173
乖離率:-2.165795369678869
乖離率:-1.142108219434567
乖離率:-0.4694835680751174
乖離率:-1.0740531373657518
乖離率:-0.1890359168241966
乖離率:-1.1197570696526813
乖離率:-1.4245014245014245
乖離率:-0.4748338081671415
乖離率:-0.8374571754853403
乖離率:-2.313133244121587
乖離率:-6.23796688486715
乖離率:-4.263565891472868
乖離率:-3.767323833691188
乖離率:-3.6949685534591215
乖離率:-1.7203875815700986
乖離率:-1.0727056019070278
乖離率:-1.3775204631662963
乖離率:-0.6024096385542169
乖離率:-0.6261361341143249
乖離率:-0.0608149199270244
実行時間: 1.125 秒.
後略
            

これを見ると、ちゃんと乖離率が取得できていることが分かります。

一般的に、移動平均に対して、株価が5%上回れば目先調整局面に入り、10%上回れば天井になるという相場の経験則があります。また、逆に移動平均に対して、株価が5%下回れば目先反発に転じて、10%下回れば底になると言われています。ここで、結果を見てみると、10日ほど前に移動平均乖離率が5%を下回っていたことが分かりました。このときに購入していれば儲けが期待できたかもしれませんね。

他のテクニカル分析クラス

さて、先に紹介した他のテクニカル分析については、メソッド及び、返って来るクラスの一覧をあげておきます。いずれのメソッドも引数は移動平均乖離法で用いたTechnicalAnalysisManager#getConversionPremiumで与えた引数と同様に与えます。その結果返り値としてテクニカル分析法に応じたクラスのインスタンスが指定した日付分入ったListが帰ってきます。それぞれのクラスについてはカブロボSDKをご覧下さい。

分析法メソッドList内のクラス
移動平均乖離率TechnicalAnalysisManager#getConversionPremiumConversionPremium
ゴールデンクロスTechnicalAnalysisManager#getGoldenCrossGoldenCross
MACDTechnicalAnalysisManager#getMACDMACD
RSITechnicalAnalysisManager#getRSIRSI
ボリュームレシオTechnicalAnalysisManager#getVolumeRatioVolumeRatio

SDKにないテクニカル分析

カブロボSDKではすでにメジャーなテクニカル分析手法が準備されていますが、他にもまだまだテクニカル分析の手法は存在します。たとえば、メジャーな分析法として、3点チャージ投資法というものがあります。これは、移動平均乖離率、ボリュームレシオ、RSIを組み合わせて購入売却を決定するテクニカル分析手法です。また、カブロボSDKで用意されているボリュームレシオは2種類ありますが、実はもうひとつボリュームレシオの導出方法があります。これらのテクニカル分析を導入するためには、自分自身で各種情報を元に計算する必要があります。
でも、この新しい指標を考えることこそがカブロボの楽しみといえるかもしれません。是非皆さんも新しい分析方法を編み出して、カブロボ・コンテストでの優勝を目指してください!




上に戻る


勝つための戦略

最後にカブロボとは直接関係ありませんが、株の売買をする上での戦略についてちょっとお話したいと思います。もちろん、カブロボにまったく無関係なわけはなく、この戦略を理解してカブロボ作成の参考にしていただければと思います。

株購入に際する基本的戦略は以下の三つに集約されます。

  1. 買い時
  2. 売り時
  3. 損切り時

買い時

買い時とは、ある銘柄を購入するタイミングのことです。どのような銘柄が買い時の銘柄でしょうか?答えは簡単。値上がりしそうな銘柄です。って当たり前な話ですが、実際のところこれがカブロボの本質なのです。テクニカル分析だって、ファンダメンタル分析だって、すべては値上がりしそうな銘柄を見つけ出すために行っているわけですから。
もちろん、未来予測が正確に出来ない限り、値上がり銘柄をすべて発見することは出来ないでしょう。ですが、「値上がりする可能性が高い」銘柄を見つけることはできるはずです。もちろん、別に細木某先生に値上がり銘柄を聞かなくたって大丈夫。ゴールデンクロスの発見であったり、RSIによる判断などできっと見つけることができるはずです。
カブロボ・コンテストに参加する場合、様々な手法を駆使することで、いかにして効率よく値上がりする銘柄を発見するか。そこに全力を投じることに成るでしょう。

あ、ちなみに値下がりしそうな銘柄を発見することができれば、これはこれで、空売りすればいいだけでやっぱり儲けることが出来ます。値下がりしそうな銘柄を発見するアルゴリズムを考えるというのも手かもしれません。

売り時

売り時は、購入した銘柄を売るタイミングのことです。そのままですね。しかしながら、この売り時というのが中々難しいものです。人間がやると、ついつい欲張って「もうちょっと値上がりするかも・・・」等と思って、売り時を逃してしまったり、「もう値上がりしないだろう」と思って売ってしまうと一気に株価が跳ね上がって悔しい思いをしたりします。
では、どんなタイミングが売りのタイミングなのでしょうか?これは中々難しいですが、必ず守るべきは買ったときより値が上がったと気に売る事です。これまた当たり前の話ですが。
しかし、このタイミングをどう決めればいいでしょうか?最も単純な方法は、

  • 目標額を設定しておく

という手法でしょう。これならば、この銘柄を売るときは必ずある程度儲かったときとすることができます。また、もともと設定しておいた金額なので、万が一その後大いに値上がりしても諦めがつきます。
もっとも、人間がやると、ついつい欲が出て「もうちょっと待ってみよう」と思ってドツボにはまりがちですが、カブロボ君なら目標額を超えた時点でさくっと売ってくれますので、安心です。
カブロボ・コンテストにおいては、持っている銘柄すべてを毎日目標額で指値で売り注文を出しておけば、目標額に到達した瞬間に売ってくれるので、便利です。

また、これ以外の売りのタイミングとしては、

  • 値下がりシグナルを発見する

というものもあります。これは、買い時で判定した値上がりシグナルの逆を取ることによって、「もう下がりそうだ!」というシグナルが出た時に売りに出すという方法です。買い時とちょうどバランスが取れる方法です。
もちろん、空売りしていた場合は逆に値上がりシグナルが出たと気に買い戻すことになります。

ちなみに、筆者の友人に「株の売り時っていつだと思う?」と聞いたところ、「自分が買いたいと思ったとき」という達観した意見が得られました。妙に説得力がある意見です。

損切り時

買った株がさっぱり値上がりしないとき、どうすればいいでしょうか?

  1. 値上がりするまで持ちつづける
  2. 諦めて売ってしまう

「損をしなければいずれ儲かる」という考えに基づけば、「値上がりするまで持ちつづける」を選択する事でいずれプラスになると考えてしまうかもしれません。しかしながら、考えても見てください。その株は、貧乏な私たちが身銭を削って溜め込んだお金で買った株じゃないですか。値上がりするのを待っていたら、いつまでたってもそのお金を使うことが出来ません。もし、持ちつづけている間に他にいい銘柄を見つけても、買うことが出来ません。ということは、儲かるチャンスもみすみす逃していることになります。特に、カブロボ・コンテストは基本的に短い期間で終了してしまいます。したがって、いつか上がると思い込んで持ちつづけると、そのままコンテストが終了してしまうということだって十分考えられます。というわけで、カブロボ・コンテストでは値下がりした銘柄は「諦めて売ってしまう」ことを強くオススメします。諦めて売って、次を買う、これを基本スタンスにするとよいでしょう。

とはいえ、闇雲に売ってしまってもしょうがありません。基本戦略としては、

  • ホールド期間を過ぎたら売る
  • 購入価格より大幅に下がったら売る

の二つがよいでしょう。最初の条件で、持ちすぎを回避し、二つ目の条件で損のし過ぎを回避します。
BayesianRobotではこの二つを併用していますが、モチロンどちらか片方だけでもかまいません。また、損切りラインを動的に変更するという手もあります。最初のうちは損切りラインを-1万円にしておいて、時間とともに-5千円、-4千円とあげていく、なども考えられます。
いずれにせよ、損切りは必ず発生するものと考えて、いかに被害を減らして次の儲けを探すかがカブロボ・コンテストにおいても重要な要素となることでしょう。




上に戻る


終わりに

「株ロボを作ろう!」アマゾン書籍紹介ページへ さて、カブロボ・コンテスト参加に向けて、いろいろ情報をお送りしてきました。いかがだったでしょうか?まだまだ、書き足りない部分も多々ありましたが、字数の制限もあり、ご容赦ください。
もっと詳しく知りたい方は、書籍「株ロボを作ろう!」などをご参考ください。

ちなみに、1月20日現在第二回カブロボ・コンテストにおいて上位300ロボット中自作ロボはわずかに29台です。自作ロボットでいい成績を収めれば、自作ロボ部門の優勝は簡単・・・そうに見えますね。あ、ちなみに筆者の自作ロボットははるか400位くらいをウロウロしています。トホホ。
私が提供したBayesianRobotや簡易ロボットがやはり調子良いようですので、彼らを倒すような強いアルゴリズムを搭載した自作ロボットの出現を心待ちにしております。出てきたらちょっと悔しいけど。



著者について

鳥海不二夫さんは、書籍「株ロボを作ろう」の著者で、第1回大会にて6位入賞(自作ロボとしては第3位)の実績をお持ちです。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



はいいいえわからない
 


 


12345
不充分・不完全である大変素晴らしい
 


上に戻る


    日本IBMについて プライバシー お問い合わせ