Pyfolio

PyFolio #

注意,截至(至少)2017-07-25,pyfolio 的 API 已更改,create_full_tear_sheet 不再有 gross_lev 作为命名参数。因此,集成示例无法正常工作。

引用 pyfolio 主页面 http://quantopian.github.io/pyfolio/ 的内容: pyfolio 是一个由 Quantopian Inc. 开发的用于金融投资组合的表现和风险分析的 Python 库。它与开源回测库 Zipline 配合良好,现在它也可以很好地与 backtrader 配合。所需的内容包括:

  • 显然需要 pyfolio
  • 以及它的依赖项(如 pandas、seaborn 等)

注意,在与 0.5.1 版本集成期间,需要更新依赖项的最新版本,例如将之前安装的 seaborn 从 0.7.0-dev 更新到 0.7.1,显然是由于缺少方法 swarmplot

用法 #

将 PyFolio 分析器添加到 cerebro 中:

cerebro.addanalyzer(bt.analyzers.PyFolio)

运行并检索第一个策略:

strats = cerebro.run()
strat0 = strats[0]

使用你给分析器命名的名称或默认名称(pyfolio)来检索分析器。例如:

pyfolio = strats.analyzers.getbyname('pyfolio')

使用分析器方法 get_pf_items 检索 pyfolio 后续需要的四个组件:

returns, positions, transactions, gross_lev = pyfolio.get_pf_items()

注意

集成是通过查看 pyfolio 的测试样本并复制相同的标题(或缺少的部分)来完成的。

与 pyfolio 一起工作(这已经超出了 backtrader 生态系统的范围)

一些与 backtrader 无关的使用注意事项:

  • pyfolio 自动绘图在 Jupyter Notebook 之外也能工作,但在 Notebook 内部效果最好。
  • pyfolio 数据表的输出在 Jupyter Notebook 之外几乎不起作用,但在 Notebook 内部可以正常工作。

结论很简单,如果希望使用 pyfolio:在 Jupyter Notebook 内工作。

示例代码 代码看起来像这样:

...
cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')
...
results = cerebro.run()
strat = results[0]
pyfoliozer = strat.analyzers.getbyname('pyfolio')
returns, positions, transactions, gross_lev = pyfoliozer.get_pf_items()
...
...
# pyfolio showtime
import pyfolio as pf
pf.create_full_tear_sheet(
    returns,
    positions=positions,
    transactions=transactions,
    gross_lev=gross_lev,
    live_start_date='2005-05-01',  # 此日期是样本特定的
    round_trips=True)

# 此时表格和图表将显示

参考 #

查看分析器参考以了解 PyFolio 分析器及其内部使用的分析器。