Binance 为什么是ta lib';当周期始终为14?时,RSI输出根据输入数组大小而不同?

Binance 为什么是ta lib';当周期始终为14?时,RSI输出根据输入数组大小而不同?,binance,candlestick-chart,ta-lib,technical-indicator,candlesticks,Binance,Candlestick Chart,Ta Lib,Technical Indicator,Candlesticks,我在我的项目中使用节点的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 out

我在我的项目中使用节点的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是基于移动窗口的指标。Timeperiod是此窗口的大小。第二天的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。

是的,回溯期和使用的报价历史长度将产生不同。这是因为公式使用了一个随时间收敛的平滑因子。实际上,我已经在这里演示了平滑是如何影响RSI值的。