在AlgoTrader中运行SimulationStarter类

时间:2014-01-22 11:04:37

标签: java eclipse algorithm indexoutofboundsexception trading

我正试图在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运行它,或者这是唯一的方法吗?

如果有任何想法或建议,我们将不胜感激。

以下是SimulationStarterServiceLocator类的代码。

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();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

要修复此错误,您需要在Eclipse中打开Run Configuraitons并添加程序Arguments,VM Arguments和ArrayIndexOutOfBoundsException将消失。

enter image description here

坏消息是还有另一个错误:2014-01-22 11:15:35,771 ERROR JDBCExceptionReporter对用户'algouser'@'localhost'的访问被拒绝(使用密码:YES)

我现在将调查

答案 1 :(得分:3)

要运行AlgoTrader,您需要拥有一个数据库(MySQL)并在AlgoTrader的源代码中配置数据库。没有DB AlgoTrader不起作用。