这里有一些链接,我用来拿出代码
https://www.tradingview.com/pine-script-reference/v5/#fun_ta.rma
所以我一直在搜索,找出如何创建rsi像tradingview和后,看了一吨的stackoverview问题,我能够找到一个真正帮助我找出问题是什么.这是答案在这里Pandas.Series.ewm for calculating a RSI Indicator, with Wilders Moving Average
事实上,第一个平均值是使用过去rsi长度的平均值计算的.像这样
avg_gain[period] = gain[1 : period + 1].mean()
字符串
然后,在您这样做之后,您应用rma tradingview计算https://www.tradingview.com/pine-script-reference/v5/#fun_ta.rma
pine_rma(src, length) =>
alpha = 1/length
sum = 0.0
sum := na(sum[1]) ? ta.sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])
型
所以我想出的公式是这样的,我检查了一下,所有的东西都是98%的准确率......通常它是由.1或.05 ......但仍然超级超级接近
import numpy as np
def qf_tv_calc_rsi_wilder(prices: np.array, period: int):
prices_shift = np.roll(prices, 1)
prices_shift[0] = np.nan
pchg = (prices - prices_shift) / prices_shift
alpha = 1 / period
gain = np.where(pchg > 0, pchg, 0)
avg_gain = np.full_like(gain, np.nan)
loss = np.where(pchg < 0, abs(pchg), 0)
avg_loss = np.full_like(loss, np.nan)
avg_gain[period] = gain[1 : period + 1].mean()
avg_loss[period] = loss[1 : period + 1].mean()
for i in range(period + 1, gain.size):
avg_gain[i] = alpha * gain[i] + (1 - alpha) * avg_gain[i - 1]
avg_loss[i] = alpha * loss[i] + (1 - alpha) * avg_loss[i - 1]
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
return rsi
型
this is my rsi的
this is tradingviews rsi ... toward the start it gets a little crazy but that is because i only downloaded 200 candles while tradingview is using like 3000的
所以我的问题是在for循环中,我试图向量化它,但它不起作用
avg_gain[period + 1 :] = alpha * gain[period + 1 :] + (1 - alpha) * avg_gain[period]
avg_loss[period + 1 :] = alpha * loss[period + 1 :] + (1 - alpha) * avg_loss[period]
型
它会吐出一些疯狂的数字.有谁知道我怎么才能摆脱for循环?
1条答案
按热度按时间798qvoo81#
此脚本将给予一个相当接近的RSI值,而无需循环遍历数据集。
https://github.com/ImDakshitha/tradingview_rsi
但可能需要更大的数据集来获得更准确的结果(大约100个数据点)