Python中常见的金融回报与风险指标。
安装¶
empyrical 需要 Python 3.7 或更高版本。您可以使用 pip 进行安装:
pip install empyrical-reloaded
或使用 conda:
conda install empyrical-reloaded -c ml4t -c ranaroussi
执行上述命令时,empyrical需要并安装以下软件包:
numpy>=1.9.2
pandas>=1.0.0
scipy>=0.15.1
pandas-datareader>=0.4
yfinance>=0.1.59
Empyrical使用yfinance从Yahoo! Finance下载价格数据,并使用pandas-datareader访问Fama-French风险因子。
用法¶
简单统计¶
Empyrical 计算从收益和波动性到阿尔法和贝塔、风险价值(VaR)以及夏普比率或索提诺比率等基本指标。
import numpy as np
from empyrical import max_drawdown, alpha_beta
returns = np.array([.01, .02, .03, -.4, -.06, -.02])
benchmark_returns = np.array([.02, .02, .03, -.35, -.05, -.01])
# calculate the max drawdown
max_drawdown(returns)
# calculate alpha and beta
alpha, beta = alpha_beta(returns, benchmark_returns)
滚动指标¶
Empyrical 还可以为滚动窗口汇总收益和风险指标:
import numpy as np
from empyrical import roll_max_drawdown
returns = np.array([.01, .02, .03, -.4, -.06, -.02])
# calculate the rolling max drawdown
roll_max_drawdown(returns, window=3)
Pandas支持¶
Empyrical 同样兼容 NumPy 数组和 Pandas 数据结构:
import pandas as pd
from empyrical import roll_up_capture, capture
returns = pd.Series([.01, .02, .03, -.4, -.06, -.02])
factor_returns = pd.Series([.02, .01, .03, -.01, -.02, .02])
# calculate a capture ratio
capture(returns, factor_returns)
-0.147387712263491
Fama-French风险因子¶
Empyrical 从1970年起下载Fama-French风险因子数据:
import empyrical as emp
risk_factors = emp.utils.get_fama_french()
risk_factors.head().append(risk_factors.tail())
Mkt-RF SMB HML RF Mom
Date
1970-01-02 00:00:00+00:00 0.0118 0.0131 0.0100 0.00029 -0.0341
1970-01-05 00:00:00+00:00 0.0059 0.0066 0.0072 0.00029 -0.0152
1970-01-06 00:00:00+00:00 -0.0074 0.0010 0.0020 0.00029 0.0040
1970-01-07 00:00:00+00:00 -0.0015 0.0039 -0.0032 0.00029 0.0011
1970-01-08 00:00:00+00:00 0.0004 0.0018 -0.0015 0.00029 0.0033
2021-02-22 00:00:00+00:00 -0.0112 -0.0009 0.0314 0.00000 -0.0325
2021-02-23 00:00:00+00:00 -0.0015 -0.0128 0.0090 0.00000 -0.0185
2021-02-24 00:00:00+00:00 0.0115 0.0120 0.0134 0.00000 -0.0007
2021-02-25 00:00:00+00:00 -0.0273 -0.0112 0.0087 0.00000 -0.0195
2021-02-26 00:00:00+00:00 -0.0028 0.0072 -0.0156 0.00000 0.0195
资产价格与基准回报¶
Empyrical yfinance 用于从Yahoo! Finance下载价格数据。要获取自1950年以来的标普500收益率,请使用:
import empyrical as emp
symbol = '^GSPC'
returns = emp.utils.get_symbol_returns_from_yahoo(symbol,
start='1950-01-01')
import seaborn as sns # requires separate installation
import matplotlib.pyplot as plt # requires separate installation
fig, axes = plt.subplots(ncols=2, figsize=(14, 5))
with sns.axes_style('whitegrid'):
returns.plot(ax=axes[0], rot=0, title='Time Series', legend=False)
sns.histplot(returns, ax=axes[1], legend=False)
axes[1].set_title('Histogram')
sns.despine()
plt.tight_layout()
plt.suptitle('Daily S&P 500 Returns')
贡献指南¶
请使用Github Flow进行贡献。创建一个分支,添加提交,然后发起拉取请求。