分类
联系方式
  1. 新浪微博
  2. E-mail

BackTrader PyFolio 分析器

介绍

PyFolio 是一个由 Quantopian 开发的 Python 库,用于金融投资组合的性能和风险分析。它最早应用于 Zipline 开源回测框架,后续 BackTrader 也加入了对它的支持。

集成方式

网上有许多文章讲解如何引入 PyFolio 库,因为 PYPI 上的 PyFolio 版本过久,需要通过 GitHub 进行源码依赖。但是我又看到 BackTrader 中直接包含了 bt.analyzers.PyFolio,并不需要再手动安装 PyFolio 库,这是怎么回事呢?

要使用 PyFolio 库,需要 3 个步骤:

  1. 数据准备
  2. 性能、风险分析计算
  3. 可视化展示

PyFolio 库的任务是 2、3 步,但是它需要外界按照约定的格式将原始数据输入。bt.analyzers.PyFolio 的任务只是提供原始数据。

如果基于 BackTrader 进行 2、3 步,除了使用 bt.analyzers.PyFolio 外,还要再引入 PyFolio 库进行计算和可视化。

单独使用

也可以只使用 bt.analyzers.PyFolio,它给出的原始输入也是有意义的。

基于这些原始输入,也可以选择其它更加易于安装使用的分析库。

使用方式

向 cerebro 添加 bt.analyzers.PyFolio:

cerebro.addanalyzer(bt.analyzers.PyFolio)

在 cerebro 运行之后,会返回一个策略的数组,选取第一个策略:

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

取出 PyFolio:

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

PyFolio 会给出四组数据:

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

返回值

本文围绕 BackTrader bt.analyzers.PyFolio,不涉及 PyFolio 库。本节梳理返回的四组数据,都包含哪些内容。

pyfolio.get_pf_items 返回值
变量名 说明 对应 Analyzer
TimeReturn returns 回报序列 TimeReturn
PositionsValue positions 仓位序列 PositionsValue
Transactions transactions 每笔交易,按照 (size, price, value) 格式记录 Transactions
GrossLeverage gross_lev 追踪总杠杆率(策略的投资额度)。 GrossLeverage

从中可以看出,bt.analyzers.PyFolio 的四组数据,在内部分别由对应的子 Analyzer 负责实现。每组数据的功能,可参见对应的子 Analyzer 介绍文章。

结合 quantstats

由于 PyFolio 库在引入上比较麻烦,并且对非 Jupyter 环境下效果有折损,因此可以考虑使用 quantstats 库进行金融投资组合的性能和风险分析。

这部分内容可参见本站对 quantstats 的介绍文章。

网络资源

Analyzers - PyFolio - Backtrader