【问题标题】:nodejs talib MACDnodejs talib MACD
【发布时间】:2017-09-26 16:38:09
【问题描述】:

我使用talib技术分析库计算MACD。
我使用AAPL数据计算MACD(8,17,9),但talib值与谷歌和雅虎财经完全不同。
这是我的 javascript(我复制了自 2015-08-21 以来的最后一个 AAPL 关闭数据):

var talib = require('./node_modules/talib/build/Release/talib');
var marketData = { open: [], close: [106.2199999999999989,
 112.6500000000000057,
 115.0100000000000051,
 116.5000000000000000,
 117.1599999999999966,
 116,
 115.1500000000000057,
 115.2399999999999949,
 113.5498999999999938,
 119.6901000000000010,
 115.5199999999999960,
 115.1700000000000017,
 115.4000000000000057,
 114.6400000000000006,
 118.4350000000000023,
 121.4599999999999937,
 122.3700000000000045,
 122.9899999999999949,
 123.3199999999999932,
 122.8900000000000006,
 124.4800000000000040,
 125.1599999999999966,
 125.2199999999999989,
 130.7500000000000000,
 132.0699999999999932],high: [], low: [], volume: [] };
 talib.execute({
    name: "MACD",
    startIdx: 0,
    endIdx: marketData.close.length - 1,
    inReal: marketData.close,
    optInFastPeriod: 8,
    optInSlowPeriod: 17,
    optInSignalPeriod: 9
}, function (result) {
   console.log(result);
});

2005-08-21 来自 Yahoo 和 Google Finance 的 MACD 值为 -2.73,talib 值为 3.83,与更多数据 MACD 有很大不同。我做错了什么?
我还注意到 talib SMA 和 EMA 给出了相同的结果。
顺便说一下,在 Google 图表中反转 MACD 慢速和快速周期不会改变图表......雅虎会。

【问题讨论】:

  • 选择这些 optInXXX 参数时使用了什么逻辑?默认值似乎是 12、26、9。
  • 我正在为Rule#1 构建一个使用MACD(8,17,9) 的meteorjs 应用程序。当然我可以使用默认值,但我希望 talib 库适用于任何值...
  • 顺便说一句,你见过this discussion有以下解释:“雅虎和谷歌有不同MACD值的原因是他们使用不同的窗口长度。 雅虎和谷歌不使用34天每一次——他们一直使用到今年的第一天,每个交易日都会增加一个窗口。 ”。你能用 2015 年 1 月 1 日以来的所有数据尝试 TALib 吗?

标签: node.js finance google-finance ta-lib


【解决方案1】:

也许你可以使用talib-binding 来做到这一点,我昨天写的。代码如下:

import * as talib from 'talib-binding'
talib.MACD([106.2199999999999989,
    112.6500000000000057,
    115.0100000000000051,
    116.5000000000000000,
    117.1599999999999966,
    116,
    115.1500000000000057,
    115.2399999999999949,
    113.5498999999999938,
    119.6901000000000010,
    115.5199999999999960,
    115.1700000000000017,
    115.4000000000000057,
    114.6400000000000006,
    118.4350000000000023,
    121.4599999999999937,
    122.3700000000000045,
    122.9899999999999949,
    123.3199999999999932,
    122.8900000000000006,
    124.4800000000000040,
    125.1599999999999966,
    125.2199999999999989,
    130.7500000000000000,
    132.0699999999999932], 8, 17, 9)

结果是:

[ [ 3.8371737131517705 ],
    [ 2.7731844591512465 ],
    [ 1.063989254000524 ] ]

【讨论】:

    【解决方案2】:

    25 个数据点不足以获得好的结果。 EMA 系列(MACD 基于多组 EMA 系列)的计算是递归的。对于计算 EMA/MACD,我会说使用至少一年的收盘价数据。

    技术指标软件的烟幕测试可能相当艰巨,因为您必须确定您使用的是准确相同的数据集,确保您从相同的初始启动值开始等,作为参考系统/计算。

    就获取数据而言,雅虎显然是一种选择。 markit 还提供了an api,它可能会返回历史价格。

    【讨论】:

    • 是的,我注意到使用 quandl data 的区别。我尝试下载雅虎数据(real-chart.finance.yahoo.com/…>)进行相同的比较。结果与 25 点几乎相同:最后一个 MACD 仍然是 3.85。
    • 嗯,为了好玩,您可以尝试反转分配给 startIdxendIdx 的值吗?
    • 我收到Segmentation fault: 11MACD(8,17,9) 行是EMA8-EMA17SignalEMA9(MACD)。如果我手动执行此操作,我会得到 Yahoo 报告的相同 MACD=-1.67 值(有点不同,因为 talib SMA 和 EMA 是相同的......)
    • 我注意到您似乎正在输入一个数据集,该数据集从最近的数据点开始并向后移动——也就是说,索引 0 是 8 月 21 日,索引 1 是 8 月 20 日,索引2 是 8 月 19 日,以此类推。这是塔利卜期望的顺序吗?我唯一的另一个想法是颠倒数据集的顺序,让所有其他输入保持不变,然后看看你得到了什么。
    • 是的,订单没问题(元素 0 是最新的):至少,SMA 是这样工作的。颠倒顺序,MACD总是错的,
    【解决方案3】:

    我不是专家,但我知道如果您使用 3 个不同的时期(8、17 和 9),您将需要至少两倍于最长时期的值才能计算当前值。

    例如,假设您在时间 T 并且您计算值 T-17 的 17 个周期,您将需要至少 34 个值,以便可以正确计算 T-17 和 T-16...直到您达到您的当前值

    这有意义吗?

    【讨论】:

      猜你喜欢
      • 2020-07-27
      • 2016-01-15
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多