javascript 计算相对强弱指数(RSI)交易指标不匹配交易视图RSI

jxct1oxe  于 2023-09-29  发布在  Java
关注(0)|答案(2)|浏览(186)

我一直在尝试计算交易指标相对强弱指数(RSI)在NodeJS超过2天了。我已经使用了每一个RSI计算和技术指标包,我可以在互联网上找到。到目前为止,它们中没有一个与我在个人经纪图表和交易视图(显示相同的RSI值)中引用的任何显示的RSI指标相匹配。
交易观点声称这是他们用于RSI的公式。

来源:https://www.tradingview.com/support/solutions/43000502338-relative-strength-index-rsi/
rma()函数代表“相对移动平均线”。下面是用来计算相对移动平均线的公式。其中26.50是当前价格,26是前一天的价格。

来源:https://www.tradingcode.net/tradingview/ema-versus-rma/
alpha变量是应用于源值的基于时段的权重。
我在nodejs中使用以下代码实现了这些计算:

let change;
let gain = [];
let loss = [];

for (i = 0; i < closingPrices.length - 1; i++) {
    change = closingPrices[i + 1] - closingPrices[i];

    // add gains
    if (change >= 0) {
        gain.push(change);
    } else {
        gain.push(0);
    }

    // add loses
    if (change < 0) {
        loss.push(-1 * change);
    } else {
        loss.push(0);
    }
}

// calculation of relative moving average (defined by trading view)
function RMA(source, length) {
    let rma = (1 / length) * source[0] + (1 - (1 / length) * source[1]);
    return rma;
}

let avgGain = RMA(gain, 14);
let avgLoss = RMA(loss, 14);
let rs = avgGain / avgLoss;
let rsi = 100 - 100 / (1 + rs);

closingPrices是给定股票过去一年到现在每个交易日的收盘价数组。我已经用每只股票验证了这个数据,它对所有历史记录都是完全准确的。我对此很有信心,因为所有其他指标的计算都是正确的,比如SMA。我只是在精确计算RSI方面有困难。
我在上面为Shopify的股票(“SHOP”)运行了这个RSI指标脚本。这就是结果。
console.log(rsi) = 49.43%
然而,交易视图上显示的真实RSI值为42.20%
所以这是不正确的。我开始用尽我能找到的每一个资源来正确计算RSI。是的,我已经尝试了所有三种已知的方法。我试过用简单的移动平均线来计算RSI,用指数移动平均线来计算RSI,用怀尔德平滑法来计算RSI。它们都不符合交易视图或我的经纪公司的RSI指标值。
这似乎是一个共同的社区问题。我只遇到过一个来源,有人用python编写了一个RSI脚本,它与交易视图的RSI正确匹配。
以下是他们的剧本:https://gist.github.com/jmoz/1f93b264650376131ed65875782df386
我对Python不熟悉,所以看不懂。也许有更熟悉python的人可以为我将其翻译为JavaScript。

eoxn13cs

eoxn13cs1#

尝试更改

(1 - (1 / length) * source[1]);

((1 - (1 / length)) * rma[1]);

注意两个括号,它应该是以前计算的rma值,而不是以前的源值。

lymnna71

lymnna712#

Trandingview使用以下公式计算RMA(RSI中使用的EMA类型):
RMA = alpha * 源+(1 - alpha)* EMA[1]其中alpha = 1 /长度
该公式包括EMA[1]。这是前期EMA的结果。如果你开始没有这个值,结果将是不一样的。尝试包括这一点,你会看到结果是一样的,在Tradingview。

相关问题