Empyrical 是一个知名的金融风险指标库。它能够用于计算年平均回报、最大回撤、Alpha值、Beta值、卡尔马率、Omega率、夏普率等。它还被用于zipline和pyfolio,是Quantopian开发的三件套之一。
下面就教你如何使用 Empyrical 这个风险指标计算神器。
1.准备
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。
(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.
(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南
Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:
pip install empyrical
2. Empyrical 计算风险指标
计算最大回撤,你只需要从 empyrical
库中引入 max_drawdown
,将数据作为参数传入计算,一行代码就能实现:
import numpy as np from empyrical import max_drawdown returns = np.array([.01, .02, .03, -.4, -.06, -.02]) # 计算最大回撤 max_drawdown(returns) # -0.4472800000000001
同样地,如果你需要计算alpha和beta指标:
import numpy as np from empyrical import alpha_beta returns = np.array([.01, .02, .03, -.4, -.06, -.02]) benchmark_returns = np.array([.02, .02, .03, -.35, -.05, -.01]) # 计算alpha和Beta值 alpha, beta = alpha_beta(returns, benchmark_returns) print(alpha, beta) # -0.7960672549836803 1.1243025418474892
如果你想要计算夏普率,同样也是一行代码就能解决,只不过你需要注意这几个参数的意义:
import numpy as np from empyrical import sharpe_ratio returns = np.array([.01, .02, .03, -.4, -.06, -.02]) # 计算夏普率 sr = sharpe_ratio(returns, risk_free=0, period='daily', annualization=None) print(sr) # -6.7377339531573535
各个参数的意义如下:
参数 | 数据类型 | 意义 |
returns | pandas.Series | 策略的日回报,非累积。 |
risk_free | int, float | 本周期内的无风险利率 |
period | str, optional | 确定回报数据的周期,默认为天。 |
annualization | int, optional | 交易日总数(用于计算年化)。如果是daily,则默认为252个交易日。 |
3.更多的指标
Empyrical 能提供使用的指标非常多,这里就不一一介绍了,基本上用法都和夏普率的计算方法差不多,这里介绍他们的方法和参数。
3.1 omega_ratio
empyrical.omega_ratio(returns, risk_free=0.0, required_return=0.0, annualization=252)
参数 | 数据类型 | 意义 |
returns | pandas.Series | 策略的日回报,非累积。 |
risk_free | int, float | 本周期内的无风险利率 |
required_return | float, optional | 投资者可接受的最低回报。考虑正收益与负收益的阈值。它会被转为适应本周期回报的值。例如,可接受的最低年回报100会被转为最低0.018 |
annualization | int, optional | 交易日总数(用于计算年化)。如果是daily,则默认为252个交易日。 |
3.2 calmar_ratio
empyrical.calmar_ratio(returns, period='daily', annualization=None)
参数 | 数据类型 | 意义 |
returns | pandas.Series | 策略的日回报,非累积。 |
period | str, optional | 确定回报数据的周期,默认为天。 |
annualization | int, optional | 交易日总数(用于计算年化)。如果是daily,则默认为252个交易日。 |
3.3 sortino_ratio
empyrical.sortino_ratio(returns, required_return=0, period='daily', annualization=None, _downside_risk=None)
参数 | 数据类型 | 意义 |
returns | pandas.Series | 策略的日回报,非累积。 |
required_return | float | 最小投资回报 |
period | str, optional | 确定回报数据的周期,默认为天。 |
annualization | int, optional | 交易日总数(用于计算年化)。如果是daily,则默认为252个交易日。 |
_downside_risk | float, optional | 给定输入的下跌风险。如果没有提供则自动计算 |
更多的指标及其说明,请查看empyrical源代码的stats.py文件,里面还包含了所有指标的计算逻辑,如果你想了解每个指标的计算方法,可以查看这个文件进行学习:
https://github.com/quantopian/empyrical/blob/master/empyrical/stats.py
我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。
有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。
原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!
Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典