.NET:无法从 TA-Lib 获得正确的 RSI 和 MACD 值

.NET: Can't get correct RSI and MACD values from TA-Lib

我正在尝试使用 TA-Lib 进行技术分析。我下载了 .NET 的 TA-Lib-Core Nuget 包。不幸的是,我找不到任何 API 文档,所以一些方法参数有点神秘。

我下载了 AMD 在 4/12/2016 和 4/12/2017 之间的历史数据here

这是我的 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 值,请单击顶部的 "Indicators" 和 select。您还应该查看 1 年日线图。

问题是 TA-Lib 输出的结果大相径庭,我不确定我是否正确使用了这些 API。我看到的是 RSI 为 65.34,MACD 直方图为 0.0431,而 TradingView 分别为 39.42 和 -0.2165。

请注意,data[0] 具有 2016 年 4 月 12 日的收盘价,而最后一个元素是 2017 年 4 月 12 日的收盘价。我也不知道 outBegIdxoutNBElement 参数代表什么。

如何 return 更正值?

Here is 解释 out* 变量含义的文档。简而言之,您的我们的数组对应于这样的原始数据:

for (int i = 0; i < outNbElement; i++){
              qDebug() << "Result for day #" << outBegIdx+i << ": outMACD: " << outMACD[i]
                          << " outMACDSignal: " << outMACDSignal[i]
                             << "outMACDHist: " << outMACDHist[i];
          }

例如,MACD (12,26,9) 将 return data.Count - 33(如果我没记错的话,它将是 -33)数组中的输出值作为输入数据的前 33 个值将用于初始化 MACD 使用的 EMA。例如,如果您正在寻找 10 天的 MA(移动平均线)并将 10 天的数据传递给 TA-Lib,您应该期望输出数组中只有 1 天的结果值(最后一天),因为前 9 天用于初始化和 10 天均线此时尚未准备就绪。我不确定 MACD(12,26,9) 的准确值 33 - 您可以借助指标的 Lookback 函数找到准确值。 C++ API 中有这样的内容,它们也必须在 C# API 中的某个地方。考虑到回溯值,您甚至可以为结果数组分配更少的 space。无论如何,当你传递*数组时,你是安全的,它分配与原始数据相同的大小并依赖 out* 索引来迭代它。

如果 TA-Libs 移动平均线的结果与某些网站的结果有显着差异,这通常是您开始计算时的影响。例如,在您提到的网站上,我看到 MACD 指标是针对一年中的第一个月计算的。如果他们像 TA-Lib 那样仅使用去年的数据来计算,他们将无法获得此 MACD 数据。必须浪费一些数据的 Bcs 来初始化移动平均线。这意味着他们更早地开始了 MACD 计算。例如 3 年前(或他们拥有的所有数据)并仅显示最近 12 个月的结果。例如,如果您切换到 ALL period 而不是 1y,您将看到一小段图表的指标值在一开始就丢失了。这就是他们实际开始计算此比例的 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. . TA-Lib calculates these values on fly, but could be forced 中的 0.075 来通过一些 C++ API 技巧使用硬编码(0.075、0.15、0.2)。