python - 使用 pandas 计算相对强弱指数
问题描述
我正在尝试使用 pandas 计算相对强度指数 (RSI),但似乎无法正确调整此处提供的解决方案。为什么这不返回 RSI 系列?
import pandas_datareader.data as web
import datetime
start = datetime.datetime(2018, 2, 8)
end = datetime.datetime(2019, 2, 8)
stock = 'TNA'
price = web.DataReader(stock,'yahoo', start, end)
n = 14
def RSI(series):
delta = series.diff()
u = delta * 0
d = u.copy()
i_pos = delta > 0
i_neg = delta < 0
u[i_pos] = delta[i_pos]
d[i_neg] = delta[i_neg]
rs = moments.ewma(u, span=27) / moments.ewma(d, span=27)
return 100 - 100 / (1 + rs)
print(rsi(price, n))
解决方案
这是在黑暗中拍摄的,因为您没有提供太多背景信息。
pandas.stats.moment.ewma
0.23.0 不再支持。现在使用pd.Series.ewm
. 这将返回指数加权窗口对象窗口对象,如果不提供滚动窗口的方法,就不能在任何类型的方程中使用它。以下是可用方法的列表:
rs.agg rs.apply rs.count rs.exclusions rs.max rs.median rs.name rs.skew r.sum
rs.aggregate rs.corr rs.cov rs.kurt rs.mean rs.min rs.quantile rs.std rs.var
我假设你从这里复制了上面的函数,它甚至似乎没有回答 OP。如果您想对price.Close
具有跨度的系列进行此分析n
并计算mean
每个指数加权窗口的 :
import pandas_datareader.data as web
import datetime
import pandas as pd
ewma = pd.Series.ewm
start = datetime.datetime(2018, 2, 8)
end = datetime.datetime(2019, 2, 8)
stock = 'TNA'
price = web.DataReader(stock,'yahoo', start, end)
n = 14
def RSI(series,n):
delta = series.diff()
u = delta * 0
d = u.copy()
i_pos = delta > 0
i_neg = delta < 0
u[i_pos] = delta[i_pos]
d[i_neg] = delta[i_neg]
rs = ewma(u, span=n).mean() / ewma(d, span=n).mean()
return 100 - 100 / (1 + rs)
print(RSI(price.Close,n))
推荐阅读
- json - single-spa axios 调用重定向到 single-spa 端口
- java - Spring Boot 不断询问登录凭据
- php - 在vuejs上上传文件时获取“未定义的偏移量:1” - php
- python - 如何检查一个列表是否是另一个列表的子集(有容差)
- sql - PL/SQL 从 Oracle 包中读取定义的游标,返回 SYS_REFCURSOR,使用 cx_Oracle
- javascript - celery 任务总是在 Node 中返回 null
- javascript - $Emit 传递“未定义”属性而不是 int 属性?
- html - 在页面中心并排对齐 3 个图像?HTML
- javascript - 将 drawio HTML 嵌入到 React 中
- vhdl - VHDL 代码错误:接近文本 e_my.vhd(61)"my_7segdec";期待“;”,或“端口”,或“通用”