我正试图在AlgoTrader的开源版本中使用移动平均策略运行SimulationStarted
类。
当我开始SimulationStarter
时,我得到ArrayIndexOutOfBoundsException
。
我试图通过eclipse运行它。从AlgoTrader开始,他们使用以下命令运行它
java.exe -cp target/classes;../../AlgoTrader/code/target/classes;../../AlgoTrader/code/lib/*;target/* -Dsimulation=true -DdataSource.dataSet=1year com.algoTrader.starter.SimulationStarter simulateWithCurrentParams
所以甚至可以通过eclipse运行它,或者这是唯一的方法吗?
如果有任何想法或建议,我们将不胜感激。
以下是SimulationStarter
和ServiceLocator
类的代码。
package com.algoTrader.starter;
import org.apache.commons.math.*;
import org.apache.log4j.Logger;
import com.algoTrader.ServiceLocator;
import com.algoTrader.service.SimulationServiceImpl;
import com.algoTrader.util.MyLogger;
public class SimulationStarter {
private static Logger logger = MyLogger.getLogger(SimulationServiceImpl.class.getName());
public static void main(String[] args) throws ConvergenceException, FunctionEvaluationException {
ServiceLocator.serverInstance().init("beanRefFactorySimulation.xml");
if ("simulateWithCurrentParams".equals(args[0])) {
ServiceLocator.serverInstance().getSimulationService().simulateWithCurrentParams();
} else if ("optimizeSingleParamLinear".equals(args[0])) {
String strategyName = args[1];
for (int i = 2; i < args.length; i++) {
String[] params = args[i].split(":");
String parameter = params[0];
double min = Double.parseDouble(params[1]);
double max = Double.parseDouble(params[2]);
double increment = Double.parseDouble(params[3]);
ServiceLocator.serverInstance().getSimulationService().optimizeSingleParamLinear(strategyName, parameter, min, max, increment);
}
}
ServiceLocator.serverInstance().shutdown();
}
}
服务定位器类
package com.algoTrader;
import com.algoTrader.entity.StrategyImpl;
import com.algoTrader.util.ConfigurationUtil;
public class ServiceLocator {
private static boolean simulation = ConfigurationUtil.getBaseConfig().getBoolean("simulation");
private static String strategyName = ConfigurationUtil.getBaseConfig().getString("strategyName");
public static CommonServiceLocator commonInstance() {
if (!simulation && !StrategyImpl.BASE.equals(strategyName)) {
return RemoteServiceLocator.instance();
} else {
return ServerServiceLocator.instance();
}
}
public static ServerServiceLocator serverInstance() {
if (!simulation && !StrategyImpl.BASE.equals(strategyName)) {
throw new IllegalArgumentException("serverInstance cannot be called from the client");
} else {
return ServerServiceLocator.instance();
}
}
}
答案 0 :(得分:3)
要修复此错误,您需要在Eclipse中打开Run Configuraitons并添加程序Arguments,VM Arguments和ArrayIndexOutOfBoundsException将消失。
坏消息是还有另一个错误:2014-01-22 11:15:35,771 ERROR JDBCExceptionReporter对用户'algouser'@'localhost'的访问被拒绝(使用密码:YES)
我现在将调查
答案 1 :(得分:3)
要运行AlgoTrader,您需要拥有一个数据库(MySQL)并在AlgoTrader的源代码中配置数据库。没有DB AlgoTrader不起作用。