我一直在尝试计算交易指标相对强弱指数(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。
2条答案
按热度按时间eoxn13cs1#
尝试更改
到
注意两个括号,它应该是以前计算的rma值,而不是以前的源值。
lymnna712#
Trandingview使用以下公式计算RMA(RSI中使用的EMA类型):
RMA = alpha * 源+(1 - alpha)* EMA[1]其中alpha = 1 /长度
该公式包括EMA[1]。这是前期EMA的结果。如果你开始没有这个值,结果将是不一样的。尝试包括这一点,你会看到结果是一样的,在Tradingview。