【问题标题】:.NET: Can't get correct RSI and MACD values from TA-Lib.NET:无法从 TA-Lib 获取正确的 RSI 和 MACD 值
【发布时间】:2017-09-09 00:22:00
【问题描述】:

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

我在 2016 年 4 月 12 日到 2017 年 4 月 12 日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 月 12 日的收盘价。我也不知道outBegIdxoutNBElement参数代表什么。

如何返回正确的值?

【问题讨论】:

    标签: .net stock indicator trading ta-lib


    【解决方案1】:

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

    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,就像Technical Analysis of Stock Trends, Tenth Edition by Robert D. Edwards,W.H.C. 一样。 TA-Lib 会即时计算这些值,但 could be forced 通过一些 C++ API 技巧使用硬编码 (0.075, 0.15, 0.2)。

    【讨论】:

      猜你喜欢
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 2022-01-23
      • 2012-01-07
      • 2016-04-01
      相关资源
      最近更新 更多