2

我正在尝试SimulationStarted使用 AlgoTrader 开源版本中的移动平均策略来运行课程。

当我开始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();
        }
    }
}
4

2 回答 2

3

要修复此错误,您需要在 Eclipse 中打开运行配置并添加程序参数和 VM 参数,这样 ArrayIndexOutOfBoundsException 就会消失。

在此处输入图像描述

坏消息是还有另一个错误:2014-01-22 11:15:35,771 ERROR JDBCExceptionReporter Access denied for user 'algouser'@'localhost' (using password: YES)

我现在将调查

于 2014-01-22T11:18:43.270 回答
3

为了运行 AlgoTrader,您需要有一个数据库 (MySQL) 并在 AlgoTrader 的源代码中配置数据库。没有 DB AlgoTrader 将无法工作。

于 2014-01-22T12:51:31.700 回答