我想按照tradingview图表计算RSI 14。
根据wiki的说法,这应该是解决方案:https://www.tradingview.com/wiki/Talk:Relative_Strength_Index_(RSI)
我在一个名为RSI的对象中实现了这一点:在对象RSI中调用:
self.df['rsi1'] = self.calculate_RSI_method_1(self.df, period=self.period)代码的实现计算:
def calculate_RSI_method_1(self, ohlc: pd.DataFrame, period: int = 14) -> pd.Series:
delta = ohlc["close"].diff()
ohlc['up'] = delta.copy()
ohlc['down'] = delta.copy()
ohlc['up'] = pd.to_numeric(ohlc['up'])
ohlc['down'] = pd.to_numeric(ohlc['down'])
ohlc['up'][ohlc['up'] < 0] = 0
ohlc['down'][ohlc['down'] > 0] = 0
# This one below is not correct, but why?
ohlc['_gain'] = ohlc['up'].ewm(com=(period - 1), min_periods=period).mean()
ohlc['_loss'] = ohlc['down'].abs().ewm(com=(period - 1), min_periods=period).mean()
ohlc['RS`'] = ohlc['_gain']/ohlc['_loss']
ohlc['rsi'] = pd.Series(100 - (100 / (1 + ohlc['RS`'])))
self.currentvalue = round(self.df['rsi'].iloc[-1], 8)
print (self.currentvalue)
self.exportspreadsheetfordebugging(ohlc, 'calculate_RSI_method_1', self.symbol)我测试了其他几种解决方案,例如,但是没有返回一个很好的值:
https://github.com/peerchemist/finta https://gist.github.com/jmoz/1f93b264650376131ed65875782df386
因此,我创建了一个基于:https://school.stockcharts.com/doku.php?id=technical_indicators:relative_strength_index_rsi的单元测试
我创建了一个输入文件:(见下面的excel图像)和一个输出文件:(参见下面的excel图像)
运行unittest (此处未包含的unittest代码)应该会导致结果,但只检查最后一个值。
if result == 37.77295211:
log.info("Unit test 001 - PASSED")
return True
else:
log.error("Unit test 001 - NOT PASSED")
return False 但我还是不能通过测试。我用excel检查了所有的值。

所以现在我有点迷路了。
如果我遵循这个问题:Calculate RSI indicator from pandas DataFrame?,但这不会给收益带来任何价值。
tradingview?
发布于 2021-03-15 08:21:26
下面是TradingView中当前RSI指示符版本的Python实现:
https://github.com/lukaszbinden/rsi_tradingview/blob/main/rsi.py
发布于 2020-05-27 13:09:40
我在计算RSI时遇到了同样的问题,结果与TradingView不同,我发现了InvestoPedia中描述的RSI第2步公式,并修改了代码如下:
N = 14
close_price0 = float(klines[0][4])
gain_avg0 = loss_avg0 = close_price0
for kline in klines[1:]:
close_price = float(kline[4])
if close_price > close_price0:
gain = close_price - close_price0
loss = 0
else:
gain = 0
loss = close_price0 - close_price
close_price0 = close_price
gain_avg = (gain_avg0 * (N - 1) + gain) / N
loss_avg = (loss_avg0 * (N - 1) + loss) / N
rsi = 100 - 100 / (1 + gain_avg / loss_avg)
gain_avg0 = gain_avg
loss_avg0 = loss_avgN是计算RSI的周期数(默认为14),代码被放入一个循环中来计算一个序列的所有RSI值。
发布于 2020-06-15 13:01:00
对于那些经历相同的人来说。
我的原始数据包含了卷为零的滴答声。过滤这个OLHCV行将直接给出好的结果。
https://stackoverflow.com/questions/61139814
复制相似问题