为什么 ta-lib 的 RSI 输出根据输入数组大小而不同,而周期始终为 14?

Why ta-lib's RSI output differs based on the input array size while the period is always 14?

我在我的项目中使用节点的 talib-binding 来计算基于 Binance 的 websocket 烛台馈送的 RSI。

我想尽可能多地将我的 RSI 输出与 Binance 的 RSI 指标显示的同步,但有趣的是,对于默认的 14 个周期,我为不同大小的输入数组获得不同的 RSI 输出。例如:

//Chart interval 1 min in both cases

console.log(`records length: ${this.records.length}`); // length: 14
const outReal = talib.RSI(this.records, 'Close');

console.log(outReal) // ouputs: 56

------

console.log(`records length: ${this.records.length}`); // length: 70
const outReal = talib.RSI(this.records, 'Close');

console.log(outReal) // ouputs: 21

我很困惑,周期设置为 14(默认)RSI 不应该只考虑最后 14 根蜡烛(图表间隔 1 分钟)吗?

至于将我的输出与 Binance 的 RSI 同步。我可以同步两者的唯一方法是将输入数组截断为恰好 14 个项目,现在两个输出非常接近但不一致。

谢谢!

RSI 是一个基于移动 window 的指标。 Timeperiod 是这个 window 的大小。第二天的 RSI 取决于前一天的 RSI 值。如果您的数据长度是 14 talib,则应该 return 大小为 1 的数组或大小为 14 的数组,其中包含 13 个 NaN 和 1 个有意义的值(取决于绑定的实现)。如果您的数据长度为 70,则 talib 应该 return 排列最近 56 天至少有 56 个 RSI 值。可能节点绑定 return 只是最后一天的值,这很奇怪或者你做错了什么 - return 值必须是数组。

最近 14 天计算的 RSI 是否等于 70 天数据的最后一个 RSI?不。第二天的 Bcs RSI 取决于前一天的 RSI,它不仅知道 14 天,而且还知道更早的数据。它影响具有特定权重的 RSI 值,该权重递减至 0(指数平滑)。因此,要将您的 RSI 与 Binance 的 RSI 同步,您最好找出他们开始计算 RSI 的时间——可能是年初,甚至是历史数据的开始。如果您不能从他们的起点开始计算 RSI 以准确重现他们的结果,那么您可能会获取足够大的数据,希望尽管 RSI 在该数据的开头与 Binance 的 RSI 不同,但其值将收敛到 Binance 的 RSI 值此数据末尾的几天,因为旧数据的影响对于新的 RSI 正在减少。