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 分析器及其内部使用的分析器。