テクニカル分析
http://kaburobo.jp/howto/makerobot.html#6
テクニカル分析は TechnicalAnalysisManagerクラスを使って行うことができます。
このクラスでは以下のテクニカル分析を行うことができます。
その他のテクニカル分析を行う場合は、自分で計算するコードを記述する必要があります。
移動平均乖離率
RSI
直近のRSIでソートする例(長いな。。。)
public class TestRobot3 implements Robot{ public void run(InvestmentAgent agent) { MyStockManager manager = new MyStockManager(agent); MyStock[] mystocks = manager.searchByLastRSI(); for(int i=0; i<mystocks.length; i++){ MyStock mystock = mystocks[i]; System.out.println( mystocks[i].getStock() + "," + mystock.getLastRSIValue() ); } } class MyStockManager{ private InvestmentAgent agent; public MyStockManager(InvestmentAgent agent){ this.agent = agent; } public MyStock[] searchByLastRSI(){ Stock[] stocks = agent.getStocks(); MyStock[] mystocks = new MyStock[stocks.length]; for(int i=0; i<stocks.length; i++){ mystocks[i] = new MyStock(agent, stocks[i]); } Arrays.sort(mystocks, new Comparator(){ public int compare(Object o1, Object o2) { double p1 = ((MyStock)o1).getLastRSIValue(); double p2 = ((MyStock)o2).getLastRSIValue(); if(p1 == p2){ return 0; }else if(p1 < p2){ return -1; }else{ return 1; } } }); return mystocks; } } class MyStock{ private InvestmentAgent agent; private Stock stock; private RSI[] rsis; public MyStock(InvestmentAgent agent, Stock stock){ this.agent = agent; this.stock = stock; calcRSI(); } private void calcRSI(){ Calendar time = Time.getTime(); List infoList = agent.getInformationManager().getIndexInformation(stock, time, -20);//過去20日(適当な日数) PriceData[] infos = (PriceData[])infoList.toArray(new PriceData[0]); TechnicalAnalysisManager tech = agent.getTechnicalAnalysisManager(); List rsiList = tech.getRSI(infos, "", 9);//9日RSI rsis = (RSI[])rsiList.toArray(new RSI[0]); } public Stock getStock(){ return stock; } public double getLastRSIValue(){ return rsis[rsis.length-1].getRsi(); } } }
TechnicalAnalysisManager#getXXXメソッドでは、PriceDataのtype(String型)を渡すメソッドが
ありますが、このtypeは通常の株価の実装IndexInformationの場合は、無視されるようです(何をわたしても一緒)。StockMarketInformationの場合、引数で日経の価格、ダウの価格など、いろいろ変わります。
参考:PriceDataインターフェイスのクラス階層
(Iはインターフェイス、Cはクラス)
(I)PriceData (C)ExchangeInformation (C)FutureInformation (I)StockPriceData (C)IndexInformation (C)StockMarketInformation
カブロボと直接関係はないですが、Listから配列への変換は、
List#toArray(ArrayType[])
メソッドが便利です。引数のArrayType[0]はちょっと奇妙に感じますが、
こういう風に書いておくと、ちょうどいいサイズの配列を返してくれます。
配列のソートは、
Arrays.sort(Object[], Comparator)
が利用できます。
引数にComparatorインターフェイス(の実装クラス)をわたします。