binance - 为什么 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 个项目,现在这两个输出非常接近但不一致。
谢谢!
解决方案
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 的影响正在下降,因此在该数据结束时的几天内。
推荐阅读
- c# - 如何在 Xamarin Visual Studio 中将图像添加到我的资源文件夹?
- javascript - 实时添加节点时D3动态网络慢
- mysql - Kubernetes Galera:WSREP:无法打开 gcomm 后端连接:110:
- java - 如何在子类中更改超类的变量类型?
- vba - VBA 选项按钮真、假或空
- xml - Ironpython 使用 xmlns 读取 XML
- c# - Nancy Autofac 防止容器处置
- gremlin - Gremlin Python 如何使 by(values('name','score')) 工作
- mcmc - 运行 Jags - 从 mcmc 对象中提取多个实现
- java - JavaFX TreeTableView 图像伪影