- PR -

カブロボコンテストのプログラム

1
投稿者投稿内容
カム
会議室デビュー日: 2004/12/14
投稿数: 2
投稿日時: 2004-12-14 00:37
カブロボというコンテストのプログラムに参加するために以下のようなプログラムを作成しましたが、
java.lang.IndexOutOfBoundsException: Index: -1, Size: 0
at java.util.LinkedList.entry(Unknown Source)
at java.util.LinkedList.get(Unknown Source)
at RSIRobot3.run(RSIRobot3.java:35)
at jp.kaburobo.driver.KabuRoboDriver.start(KabuRoboDriver.java:246)
at jp.kaburobo.driver.KabuRoboDriver.main(KabuRoboDriver.java:418)
というエラーが出てしまい、どこを直したら良いのかわかりません。よろしければ、具体的にどこをどうすればよいか、教えてください。

import java.util.*;
import jp.kaburobo.robot.Robot;
import jp.kaburobo.investment.*;
import jp.kaburobo.information.*;
import jp.kaburobo.util.*;
import jp.kaburobo.search.*;
import jp.kaburobo.technical.*;

public class RSIRobot3 implements Robot{
public void run (InvestmentAgent investmentAgent){
Stock[] stocks =investmentAgent.getStocks(); // 銘柄の取得
Map holdingMap = investmentAgent.getPortfolio().getHoldings(); //持ち株の取



InformationManager informationManager =

investmentAgent.getInformationManager(); //データ取得用クラス

TechnicalAnalysisManager

technical=investmentAgent.getTechnicalAnalysisManager();

for(int i=0;i<stocks.length;i++){
List indexList = informationManager.getIndexInformation(stocks[i],Time.getTime(),-14);
IndexInformation indexinfo= (IndexInformation[])indexList.toArray(new IndexInformation[0]);
List rsiList = technical.getRSI(indexinfo,null,15);
RSI rsi = (RSI)rsiList.get(rsiList.size()-1);
SimpleStockOrder stockOrder = null;
Holding holding = null;
if(rsi.getRsi()>0){
if(rsi.getRsi()>=70){
stockOrder = new SimpleStockOrder(stocks

[i],StockOrder.SELL);}
else if(rsi.getRsi()<=20){
stockOrder = new SimpleStockOrder(stocks

[i],stockOrder.BUY);}
else{
holding = (Holding)holdingMap.get(stocks[i]);
if(holdingMap.size() > 0){
if(holding.getNumber()>0){
stockOrder = new SimpleStockOrder(stocks[i],StockOrder.SELL,holding.getNumber());}

else{
stockOrder = new SimpleStockOrder(stocks[i],stockOrder.BUY,-holding.getNumber());}
}
}
}
if(stockOrder != null){
investmentAgent.order(stockOrder);}
}
}
}
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-12-14 01:16
カムさん、面白そうですね。

まず失礼ながら、どこを『どうしたら良いか』教えてもらうより、
いまのカムさんのプログラムが『なぜまずいか』考えたほうが
良いのではないでしょうか。

エラーメッセージには大きなヒントが示されています。

少なくとも RSIRobot3.java の 35行目で呼び出している個所で
問題が起きています。
サイズがゼロのリンクリストを -1 して get( ) 使用としてます
から。
なぜ空っぽのリストからデータを取り出そうとしてるのでしょうか?
カム
会議室デビュー日: 2004/12/14
投稿数: 2
投稿日時: 2004-12-16 00:17
Kissingerさん、ご返答ありがとうございます。よくわからないので、再度質問させてください。
List rsiList = technical.getRSI(indexinfo,null,15);で、rsiListはなぜサイズがゼロなのでしょうか?
サイズがゼロでなければ、RSI rsi = (RSI)rsiList.get(rsiList.size()-1);としても大丈夫ですか?
1

スキルアップ/キャリアアップ(JOB@IT)