用于计算 RSI(和 ROC)的输入参数的正确配置是什么

What is correct configuration of input parameters for calculating RSI (and ROC)

我已经尝试使用 Technical Indicators library to calculate RSI (and ROC) for candlestick's closing prices, but when I compare results from Binance,我得到的结果不是很准确:

我使用这个 Binance API:

获取数据

这是 RSI and ROC 指标的用法示例:

如果我这样做:

let inputData = {
        values: data, // 15 candlesticks, 1m candlestick data, values[0] is oldest closing price
        period: 14,
      };

我做计算:

const results_rsi = RSI.calculate(inputData);

我得到了单个元素数组,与 Binance 上的(实时)数据相比,结果相当不准确

如果我这样做:

let inputData = {
        values: data, // 100 candlesticks, 1m candlestick data, values[0] is oldest closing price
        period: 14,
      };

 const results_rsi = RSI.calculate(inputData);

我得到了一堆元素的结果,如果我将 result_rsilast 元素与 Binance RSI 14 (1m) 进行比较,我实际上非常 准确 结果。另外,我在其中一篇 git issues 中读到,提供更多的历史数据更好。

现在,到目前为止一切顺利......或者至少我是这么想的:) 然而,RSI 和 ROC 结果都非常准确。

问题是,当我应用相同的逻辑但使用不同的参数时,像这样说:

let inputData = {
        values: data, // 100(or even 200 and 500) candlesticks, 1h candlestick data, values[0] is oldest closing price
        period: 30,
      };

       const results_rsi = RSI.calculate(inputData);
      const results_roc = ROC.calculate(inputData);

我检查了 results_rsiresults_roc 的最后一个元素(我认为这是实际结果,但也许不是?),我仍然得到 RSI 的相当不错的结果, 但对于 ROC 我得到了非常错误的结果。这让我想到我是否正确使用了这个库,我什至不确定 RSI 结果是否正确,因为我没有尝试使用许多不同的参数/数据。

所以,问题:

(来自文档):

var data = 
[11045.27,11167.32,11008.61,11151.83,10926.77,10868.12,10520.32,10380.43,10785.14,10748.26,10896.91,10782.95,10620.16,10625.83,10510.95,10444.37,10068.01,10193.39,10066.57,10043.75];

var period = 12;
        
var expectResult = [-3.85,-4.85,-4.52,-6.34,-7.86,-6.21,-4.31,-3.24];
    
ROC.calculate({period : period, values : data});
  1. 这里ROC的实际结果是什么?因为返回数组。
  2. 应如何对输入值进行排序? (values[0] 应该是什么)?
  3. 我哪里错了? :D

“准确性”Data-depth 什么是足够的?
(更好:我们什么时候在屏幕上获得相等的输出?)

RSI 是包含先验数据元素的几个指标之一。因此,基于 15 天或 50 天基础数据的 14 天 RSI 将与基于 500 天数据的 14 天 RSI 大不相同。

因此,除非所有 TimeSeries 的“观察者”从 (a) 完全相同的 TimeSeries 和 (b) 使用完全相同的“长度”计算 RSI(对于 depth-of-prior DATA 相关的底层计算,这里开始对于第一个“观察到的”period-length 柱使用普通 SMA)和 (c) 使用完全相同的计算方法的数值属性(几乎所有平台都使用相同的 64 位 IEEE-754 数值处理,这需要不会引起问题,使用混合 FPGA/GPGPU/SoC/ASIC 算法但可能会引入这种 class 进一步的不一致(导致新的结果差异),
所以,
有当且仅当我们都从 TimeSeries-history 中数据的最“开始”开始时,满足 (a) & (b) & (c) 的最高机会(如果我们都使用相同的数据源,则容易,不是那么容易,如果有些人使用 time-zone 未校正的,来自不同 (T)OHLC(V) 数据源的不同 history-depths )并使用相同的数值处理方法。

一些 technical-indicators 不太容易受到 depth-of-observation 的影响,一些更多(如果这是一个核心问题(为了减少延迟/提高性能/保持 Quant-models' 的可重复性 &结果的可重复性),
尝试设置您的“准确性”阈值并测试所有 technical-indicators' 对 depth-of-prior 数据的依赖性(以便收敛开始满足您的“准确性”阈值,如果结果开始收敛并保持稳定,则进一步扩展深度没有意义 depth-of-prior DATA re-processing )

在某些情况下,如果您碰巧获得了如此“足够短”的 depth-of-prior 数据,则您不需要 re-process 更深入过去。在所有其他情况下并非如此,在这些情况下无法避免 DATA-depth 依赖。遗憾的是,如果我们想要获得相同的结果,我们都需要采用相同的深度(通常是最大深度,见上文)。