4

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

我在这里下载了 2016 年 4 月 12 日至 2017 年 4 月 12 日期间 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 页面进行比较。要查看 RSI 和 MACD 值,请单击顶部的“指标”并选择它们。此外,您应该查看 1 年日线图。

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

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

如何返回正确的值?

4

1 回答 1

5

这是解释 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) 将data.Count - 33在数组中返回(如果我没记错的话,它将是 -33)输出值,因为输入数据的前 33 个值将用于初始化 MACD 使用的 EMA。例如,如果您正在寻找 10 天 MA(移动平均线)并将 10 天数据传递给 TA-Lib,您应该期望输出数组(最后一天)中只有 1 天结果值,因为前 9 天用于初始化,此时 10 天 MA 还没有准备好。我不确定 MACD(12,26,9) 的确切值是否为 33 - 您可以在指标的帮助下找到确切值Lookback功能。C++ API 中有这样的,它们也必须在 C# API 的某个地方。考虑回溯值,您甚至可以为结果数组分配更少的空间。无论如何,当您传递与原始数据分配相同大小并依靠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。或者您可以在您的实施中参考一些书,并发现他们推荐 0.075,例如Robert D. Edwards,WHC 的第十版股票趋势技术分析。TA-Lib 会即时计算这些值,但可能会通过一些 C++ API 技巧强制使用硬编码 (0.075, 0.15, 0.2)。

于 2017-04-13T16:49:10.920 回答