Java TA-LIB Mama指示器的结果不正确

Java TA-LIB Mama指示器的结果不正确,java,ta-lib,Java,Ta Lib,我从TA-LIB Mama指示器中得到了奇怪的结果 使用相同的价格数组调用其他指标会给出正确的结果 但是调用core.mama()会给mama值一到两个点子,而Fama值最多30个点子。我将其与JForex中的值进行比较,我已经针对其他平台验证了这些值 我通过调用TA-LIB来设置price数组的长度,但较长的回溯并不能改善结果: int priceLength = core.mamaLookback(fastLimit, slowLimit) + 1; 我的fastLimit和slowLim

我从TA-LIB Mama指示器中得到了奇怪的结果

使用相同的价格数组调用其他指标会给出正确的结果

但是调用
core.mama()
会给mama值一到两个点子,而Fama值最多30个点子。我将其与JForex中的值进行比较,我已经针对其他平台验证了这些值

我通过调用TA-LIB来设置price数组的长度,但较长的回溯并不能改善结果:

int priceLength = core.mamaLookback(fastLimit, slowLimit) + 1;
我的fastLimit和slowLimit设置在合理范围内

startIdx
param更改为0并返回更多值也无济于事

代码非常简单,很难看出我做错了什么。我是在放屁还是图书馆被窃听了

   public static double[] runMama(double[] prices, double fastLimit, double slowLimit) {

    try {
        MInteger outBegIdx = new MInteger();    
        MInteger outNbElement = new MInteger(); 
        int count = prices.length;
        Core core = new Core();

        // We only need the most recent value.

        double[] outputFama = new double[1];
        double[] outputMama = new double[1];

        RetCode retCode = core.mama(count-1, count-1, prices, fastLimit, slowLimit, outBegIdx, outNbElement, outputMama, outputFama);

        if (retCode != RetCode.Success) {
            throw new RuntimeException("TA-LIB Mama has barfed!");
        }

        return new double[]{outputMama[0], outputFama[0]};

    } catch (Exception e) {
        Printer.printErr("Problem with MESA", e);
        return null;
    }
}
好吧,我的错

我没有意识到JavaTA库以一种有点古怪的方式返回数据

与几乎所有其他交易库不同的是,最近的值具有较高的键,最高的键填充了许多与回望长度相关的零值

此外,当指示器具有内存时(如基于指数MA的Mama),需要比
core.mamaLookback(fastLimit,slowLimit)
返回的值更长的回溯时间才能得到有意义的结果。因此,您需要传入足够长的价格数组


我现在得到了可靠的结果。

阅读TA-LIB代码时,回溯是硬编码的,所以这不成问题。您知道JForex实现是如何工作的吗?所有这些TA库与其他系统的不兼容通常是由于外部系统可能比TA库使用更多的数据这一事实造成的。就像谷歌金融一样,它能够使用年初的数据,即使你们只要求它提供过去1个月的文学硕士学位。这种差异的另一个常见原因是像这里一样的起始周期的不对中:如果你知道JForex是如何工作的,或者可以在Excel中复制它的结果,很容易发现我可以用几个微点,但我认为30点不仅仅是一个差异。结果差得很远。我使用的是Dukas数据,因此,顺便说一句,起始时间是相同的。您能否提供一份Excel表格,计算一段数据的MAMA,并演示与TA Lib不匹配的情况?那么就很容易解释实现上的差异了。