我试图使用TA-Lib进行技术分析。我下载了用于.NET的TA-Lib-Core Nuget包。不幸的是,我无法找到任何API文档,所以一些方法参数有点神秘。
我在2016年4月12日至2017年12月4日here下载了AMD的历史数据。
这就是我对RSI和MACD计算的看法:
int outBegIdx1, outNBElement1;
double[] outReal = new double[data.Count];
int outBegIdx2, outNBElement2;
double[] outMACD = new double[data.Count];
double[] outMACDSignal = new double[data.Count];
double[] outMACDHist = new double[data.Count];
TicTacTec.TA.Library.Core.Rsi(0, data.Count - 1, data.Select(x => x.Close).ToArray(), 14, out outBegIdx1, out outNBElement1, outReal);
TicTacTec.TA.Library.Core.Macd(0, data.Count - 1, data.Select(x => (float)x.Close).ToArray(), 12, 26, 9, out outBegIdx2, out outNBElement2, outMACD, outMACDSignal, outMACDHist);
我将结果与TradingView的AMD页面here进行比较。要查看RSI和MACD值,请点击"指标"在顶部并选择那些。此外,您应该查看1年日常图表。
问题是TA-Lib正在输出截然不同的结果,我不确定我是否正确使用这些API。我所看到的RSI为65.34,MACD柱状图为0.0431,而TradingView的分别为39.42和-0.2165。
请注意data[0]
具有2016年4月12日的收盘价,而最后一个元素是2017年4月4日。此外,我不知道outBegIdx
和outNBElement
参数代表什么。
如何返回正确的值?
答案 0 :(得分:3)
Here is文档解释了*变量的含义。简而言之,您的数组对应于原始数据:
for (int i = 0; i < outNbElement; i++){
qDebug() << "Result for day #" << outBegIdx+i << ": outMACD: " << outMACD[i]
<< " outMACDSignal: " << outMACDSignal[i]
<< "outMACDHist: " << outMACDHist[i];
}
对于ex,MACD(12,26,9)将返回data.Count - 33
(如果我记得正确,它将是-33)输出值作为输入数据的前33个值将用于初始化MACD使用的EMA。例如,如果您正在寻找10天MA(移动平均线)并将10天数据传递给TA-Lib,那么您应该只需要输出数组中的1天结果值(最后一天),因为前9天用于在这个时间点,初始化和10天MA还没有准备好。我不确定MACD的准确值是33(12,26,9) - 您可以在指标Lookback
函数的帮助下找到确切的值。在C ++ API中有这样的东西,它们也必须在C#API中的某个地方。考虑到回溯值,您甚至可以为结果数组分配更少的空间。无论如何,当您传递*数组时,您将安全地保存,这些数组与原始数据分配相同的大小,并依赖out*
索引进行迭代。
如果TA-Libs移动平均线&#39;结果与某些网站结果显着不同,这通常是您开始计算时的影响。例如,在现场您参考我看到MACD指标是针对一年中的第一个月计算的。如果他们只使用像TA-Lib这样的去年数据来计算它,他们就无法得到这个MACD数据。必须浪费一些数据的Bcs来初始化移动平均线。这意味着他们提前开始了MACD计算。例如3年前(或他们拥有的所有数据)并仅显示过去12个月的结果。例如,如果您切换到所有期间而不是1期,您会看到一小段图表在一开始就缺少指标的值。他们实际上开始了这个规模的MACD计算。 我会尝试提供TA-Lib 3年的数据期,并将其去年与网站进行比较。它应该足以使他们的结果收敛。
如果您100%确定TA-Lib的指标和网站指标是根据相同数据计算的,那么您应该期望您的结果相同或略有不同。这种小差异可能是由于指标的不同实施。例如,MACD(12,26,9)在其公式中使用因子2 /(12 + 1),2 /(26 + 1),2 /(9 + 1)。值2/27可以在飞行中计算并与所有可用的进动一起使用。或者它可以四舍五入到0.074。或者你可以在你的实现中参考一些书,发现他们推荐像Technical Analysis of Stock Trends, Tenth Edition by Robert D. Edwards,W.H.C. 中的0.075。 TA-Lib在飞行中计算这些值,但could be forced通过一些C ++ API技巧使用硬编码(0.075,0.15,0.2)。