PyPI Conda (channel only) PyPI Wheels Conda packages CI Tests

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使用yfinanceYahoo! 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')

文档

查看文档了解API详情。

支持

如需支持,请提交问题

贡献指南

请使用Github Flow进行贡献。创建一个分支,添加提交,然后发起拉取请求

测试

  • 安装依赖项

    • “nose>=1.3.7”,

    • "parameterized>=0.6.1"

nosetests empyrical.tests