empyrical、pyfolio工具介绍及在backtrader量化框架中使用

简介

  • empyrical -- Quantopian开源的常见金融风险指标lib库,会调用pandas_datareader从yahoo或google获取股票数据

  • pyfolio -- Quantopian开源的用图形表示的金融投资组合性能和风险分析的Python库,基于empyrical获取数据和计算基础指标,由各种各样的独立图组成,这些图提供了交易策略表现的综合图像。图形示例可以参考full_tear_sheet_example.ipynb

empyrical安装&使用

  • 安装:pip install empyrical

  • 使用方法: 以计算最大回撤和alpha、beta为例,代码如下。

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])
max_drawdown(returns) # 计算最大回撤
alpha, beta = alpha_beta(returns, benchmark_returns) # 计算alpha和beta
returns = pd.Series([.01, .02, .03, -.4, -.06, -.02]) #支持pd.Series()
max_drawdown(returns)

查看empyrical支持的api列表,如下。

import empyrical
print(dir(empyrical))

结果是:

['DAILY', 'MONTHLY', 'QUARTERLY', 'WEEKLY', 'YEARLY', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_version', 'aggregate_returns', 'alpha', 'alpha_aligned', 'alpha_beta', 'alpha_beta_aligned', 'annual_return', 'annual_volatility', 'beta', 'beta_aligned', 'beta_fragility_heuristic', 'beta_fragility_heuristic_aligned', 'cagr', 'calmar_ratio', 'capture', 'compute_exposures', 'conditional_value_at_risk', 'cum_returns', 'cum_returns_final', 'deprecate', 'down_alpha_beta', 'down_capture', 'downside_risk', 'excess_sharpe', 'gpd_risk_estimates', 'gpd_risk_estimates_aligned', 'max_drawdown', 'omega_ratio', 'perf_attrib', 'periods', 'roll_alpha', 'roll_alpha_aligned', 'roll_alpha_beta', 'roll_alpha_beta_aligned', 'roll_annual_volatility', 'roll_beta', 'roll_beta_aligned', 'roll_down_capture', 'roll_max_drawdown', 'roll_sharpe_ratio', 'roll_sortino_ratio', 'roll_up_capture', 'roll_up_down_capture', 'sharpe_ratio', 'simple_returns', 'sortino_ratio', 'stability_of_timeseries', 'stats', 'tail_ratio', 'up_alpha_beta', 'up_capture', 'up_down_capture', 'utils', 'value_at_risk']

顺便说明下,empyrical官方api手册不全,看api文档使用help来看比较方便,如help(empyrical.excess_sharpe)

pyfolio安装&使用

pyfolio只能在jupyter notebook环境下完整绘图,在命令行环境或py文件下可以单独画图,但不能显示表格数据。

通常的误区是:pyfolio只能在jupyter下使用。正确的说法是pyfolio对jupyter环境下支持的最好。

  • 安装:

pip install git+https://github.com/quantopian/pyfolio

使用pip install pyfolio,在使用的时候会报错,下面会说明。

  • 使用方法:

  1. 构造数据 产出如下数据,格式为pd.series。

data.head()
Date
2017-04-25 00:00:00+00:00    0.018699
2017-04-26 00:00:00+00:00   -0.011536
2017-04-27 00:00:00+00:00   -0.004965
2017-04-28 00:00:00+00:00    0.017626
2017-05-01 00:00:00+00:00    0.027892
dtype: float64
  1. 使用pyfolio

import pyfolio as pf
pf.create_returns_tear_sheet(data)
pf.plot_drawdown_periods(data)

在jupyter中运行,结果如下:

在ipython运行,结果如下:

In [8]: pf.create_returns_tear_sheet(data)
<IPython.core.display.HTML object>
<IPython.core.display.HTML object>

In [9]: ret = pf.create_returns_tear_sheet(data)
<IPython.core.display.HTML object>
<IPython.core.display.HTML object>

pf.plot_drawdown_periods(data)

import matplotlib.pyplot as plt

plt.show()

  • 查看支持的函数:

print(dir(pf))

['APPROX_BDAYS_PER_MONTH', 'FACTOR_PARTITIONS', 'FigureCanvasAgg', 'FuncFormatter', 'MM_DISPLAY_UNIT', 'Markdown', 'OrderedDict', 'STAT_FUNCS_PCT', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_seaborn', '_version', 'axes_style', 'capacity', 'create_capacity_tear_sheet', 'create_full_tear_sheet', 'create_interesting_times_tear_sheet', 'create_perf_attrib_tear_sheet', 'create_position_tear_sheet', 'create_returns_tear_sheet', 'create_round_trip_tear_sheet', 'create_simple_tear_sheet', 'create_txn_tear_sheet', 'customize', 'datetime', 'deprecate', 'display', 'division', 'ep', 'figure', 'gridspec', 'interesting_periods', 'matplotlib', 'np', 'patches', 'pd', 'perf_attrib', 'plot_annual_returns', 'plot_capacity_sweep', 'plot_cones', 'plot_daily_turnover_hist', 'plot_daily_volume', 'plot_drawdown_periods', 'plot_drawdown_underwater', 'plot_exposures', 'plot_gross_leverage', 'plot_holdings', 'plot_long_short_holdings', 'plot_max_median_position_concentration', 'plot_monthly_returns_dist', 'plot_monthly_returns_heatmap', 'plot_monthly_returns_timeseries', 'plot_perf_stats', 'plot_prob_profit_trade', 'plot_return_quantiles', 'plot_returns', 'plot_rolling_beta', 'plot_rolling_returns', 'plot_rolling_sharpe', 'plot_rolling_volatility', 'plot_round_trip_lifetimes', 'plot_sector_allocations', 'plot_slippage_sensitivity', 'plot_slippage_sweep', 'plot_turnover', 'plot_txn_time_hist', 'plotting', 'plotting_context', 'plt', 'pos', 'pytz', 'round_trips', 'show_and_plot_top_positions', 'show_perf_stats', 'show_profit_attribution', 'show_worst_drawdown_periods', 'sns', 'sp', 'tears', 'time', 'timer', 'timeseries', 'txn', 'utils', 'warnings', 'wraps']

在backtrader中使用PyFolio

pyfolio改变过api接口,create_full_tear_sheet()函数后面没有了gross_lev参数,使用backtrade网站的示例代码会报错。 

backtrader使用pyfolio示例代码见交流部分。

交流

欢迎大家留言,关注微信公众号多多交流,最新的文章会优先发布在微信公众号上。微信公众号:诸葛说talk

参考

猜你喜欢

转载自blog.csdn.net/richardzhutalk/article/details/124514784
今日推荐