首页 > 解决方案 > 为什么 ta-lib 的 RSI 输出根据输入数组大小而有所不同,而周期始终为 14?

问题描述

我在我的项目中使用节点的 talib 绑定​​来计算基于 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 个项目,现在这两个输出非常接近但不一致。

谢谢!

标签: binancecandlestick-chartta-libtechnical-indicatorcandlesticks

解决方案


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

过去 14 天计算的 RSI 是否等于 70 天数据的最后一个 RSI?不。第二天的 Bcs RSI 取决于前一天的 RSI,它不仅知道 14 天,而且还知道更早的数据。它以一定的权重影响 RSI 值,权重下降到 0(指数平滑)。因此,要将您的 RSI 与 Binance 的 RSI 同步,您最好了解他们何时开始 RSI 计算 - 这可能是年初甚至历史数据的开始。如果您不能从他们的起点开始 RSI 计算以准确再现他们的结果,那么您可能会获取足够大的数据,希望尽管 RSI 在该数据的开头会与 Binance 的 RSI 不同,但其值将收敛到 Binance 的 RSI 值由于旧数据对新 RSI 的影响正在下降,因此在该数据结束时的几天内。


推荐阅读