Java TA-LIB Mama指示器的结果不正确
我从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
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不匹配的情况?那么就很容易解释实现上的差异了。