使用 pandas 计算相对强弱指数
Relative Strength Index calculation using pandas
我正在尝试使用 pandas 计算相对强度指数 (RSI),但似乎无法正确调整 here 提供的解决方案。为什么这不返回 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))
这是在黑暗中拍摄的照片,因为您没有提供太多背景信息。
0.23.0 不再支持 pandas.stats.moment.ewma
。现在使用 pd.Series.ewm
实现指数加权 windows。这个 returns exponentially-weighted-windows object window 对象如果不提供滚动 window 的方法就不能用在任何类型的方程式中。以下是可用方法的列表:
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
我假设您从 here 复制了上面的函数,它似乎甚至没有回答 OP。如果您想对跨度为 n
的序列 price.Close
进行此分析,并计算每个指数加权 window:
的 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))
我正在尝试使用 pandas 计算相对强度指数 (RSI),但似乎无法正确调整 here 提供的解决方案。为什么这不返回 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))
这是在黑暗中拍摄的照片,因为您没有提供太多背景信息。
0.23.0 不再支持pandas.stats.moment.ewma
。现在使用 pd.Series.ewm
实现指数加权 windows。这个 returns exponentially-weighted-windows object window 对象如果不提供滚动 window 的方法就不能用在任何类型的方程式中。以下是可用方法的列表:
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
我假设您从 here 复制了上面的函数,它似乎甚至没有回答 OP。如果您想对跨度为 n
的序列 price.Close
进行此分析,并计算每个指数加权 window:
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))