用 pyfolio 进行量化交易回测
Pyfolio 使用一组丰富的指标和可视化来促进对样本内外的投资组合绩效的分析。它使用多种内置场景生成涵盖回报、头寸和交易以及市场压力期间事件风险分析的报告,其中还包含贝叶斯样本性能分析。
Pyfolio 依赖于投资组合回报和头寸数据,还可以考虑交易活动的交易成本和滑点损失。它使用 empyrical
库,该库也可以独立使用来计算性能指标。
创建回报和基准输入
Pyfolio 库是 Quantopian 生态系统的一部分,与 Zipline 和 Alphalens 兼容。我们将首先演示如何从 Alphalens 生成必要的输入,然后展示如何从 Zipline 回测性能数据帧中提取它们。
从 Alphalens 获取 pyfolio 输入
Pyfolio 还直接与 Alphalens 集成,并允许使用 create_pyfolio_input
创建 pyfolio 输入数据:
from alphalens.performance import create_pyfolio_input
qmin, qmax = factor_data.factor_quantile.min(),factor_data.factor_quantile.max()
input_data = create_pyfolio_input(alphalens_data,period='1D',capital=100000,long_short=False,equal_weight=False,quantiles=[1, 5],benchmark_period='1D')
returns, positions, benchmark = input_data
有两个选项可以指定如何生成投资组合权重:
long_short
:如果为 False
,权重将对应于因子值除以其绝对值,以便负因子值生成空头头寸。如果为 True
,则首先贬低因子值,以便多头和空头头寸相互抵消,并且投资组合是市场中性的。
equal_weight
:如果它和 long_short
为 True,资产将被分成两个大小相等的组,上半部分/下半部分构成多头/空头头寸。
如果 factor_data
包括每个资产信息,也可以为组创建多空投资组合。
从 Zipline 回测中获取 pyfolio 输入
Zipline 回测的结果也可以使用 extract_rets_pos_txn_from_zipline
转换为所需的 pyfolio 输入:
returns, positions, transactions =extract_rets_pos_txn_from_zipline(backtest)
前向测试 – 样本外回报
测试交易策略涉及回测和前向测试。前者涉及历史数据,通常是指用于微调 alpha 因子参数的采样周期。前向测试在新的市场数据上模拟该策略,以验证它在样本外的表现良好性,并且不会过于紧密地适应特定的历史情况。
Pyfolio 允许指定样本外时段来模拟前向测试。在测试策略以获得统计上可靠的结果时,需要考虑许多方面。
plot_rolling_returns
函数根据用户定义的基准(我们使用标准普尔 500 指数)显示样本内和样本外的累积回报。Pyfolio 将累积回报计算为简单回报的乘积,在每个回报上加 1:
from pyfolio.plotting import plot_rolling_returns
plot_rolling_returns(returns=returns,factor_returns=benchmark_rets,live_start_date='2016-01-01',cone_std=(1.0, 1.5, 2.0))
下图中包括一个锥体,它显示了扩大的置信区间,以表明在给定随机游走假设的情况下,样本外回报出现的可能性不大。在这里,在模拟的 2016 年样本外期间,我们的策略相对于标准普尔 500 指数表现不佳:
性能统计汇总
Pyfolio 提供了几个分析函数和图。 perf_stats
摘要显示年度和累积回报、波动性、偏斜和回报的峰度以及 SR。以下附加指标(也可以单独计算)是最重要的:
•最大回撤:自前一个峰值的最高百分比损失•卡尔马比率:相对于最大回撤的年度投资组合回报•Omega 比率:回报目标的收益与损失的概率加权比率•索提诺比率:相对于下行标准差的超额回报•尾部比率:右尾部的大小(增益,第 95 个百分位数的绝对值)相对于左尾的大小(损失,第 5 个百分位数的绝对值)•每日风险价值 (VaR):与低于每日平均值两个标准差的回报相对应的损失•Alpha:基准回报无法解释的投资组合回报•Beta:暴露于基准
plot_perf_stats
函数引导估计参数可变性并将结果显示为箱线图:
show_perf_stats
函数计算整个时间段的大量指标,也分别计算样本内和样本外时间段的多个指标:
from pyfolio.timeseries import show_perf_stats
show_perf_stats(returns=returns,factor_returns=benchmark_rets,positions=positions,transactions=transactions,live_start_date=oos_date)
对于从 MeanReversion
因子导出的模拟多空投资组合,我们获得以下性能统计数据:
回撤期和因子敞口
plot_drawdown_periods(returns)
函数绘制投资组合的主要回撤期,其他几个绘制函数显示滚动 SR
和滚动因子对市场 beta 或 Fama-French
规模、增长和动量因子的敞口:
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(16, 10))
axes = ax.flatten()
plot_drawdown_periods(returns=returns, ax=axes[0])
plot_rolling_beta(returns=returns, factor_returns=benchmark_rets,ax=axes[1])
plot_drawdown_underwater(returns=returns, ax=axes[2])
plot_rolling_sharpe(returns=returns)
下图突出显示了各种可视化子集,说明了 pyfolio 如何让我们深入了解性能特征并让我们了解风险和回报的基本驱动因素:
事件风险建模
Pyfolio 还包括各种事件的时间表,您可以使用这些时间表将投资组合在此期间的表现与基准进行比较。Pyfolio 默认使用标准普尔 500 指数,但您也可以提供您选择的基准回报。以下示例将英国退欧公投后 2015 年秋季抛售期间的表现与标准普尔 500 指数进行了比较:
interesting_times = extract_interesting_date_ranges(returns=returns)
interesting_times['Fall2015'].to_frame('pf') \.join(benchmark_rets) \.add(1).cumprod().sub(1) \.plot(lw=2, figsize=(14, 6), title='Post-Brexit Turmoil')
总结
在本文中,我们讨论了投资组合管理的重要主题,它涉及以管理风险回报权衡为目标的投资头寸组合。我们引入了 pyfolio 来计算和可视化关键风险和回报指标,以及比较各种算法的性能。
E N D
扫描本文最下方二维码获取全部完整源码和Jupyter Notebook 文件打包下载。
↓↓长按扫码获取完整源码↓↓
用 pyfolio 进行量化交易回测相关推荐
- Pyalgotrade量化交易回测框架
现在就开始干活了.先要测试一下pyalgotrade回测数据对不对.我找了个参照标准:在聚宽上开通了个账号,按入门教程写了个策略:2016-2018年每个交易日买入100股平安银行(000001),回 ...
- python外汇交易回测系统_StarQuant - 综合量化交易回测系统/平台
Welcome to StarQuant StarQuant(中文名:易数交易系统)是一个轻量的.面向个人( 普通)用户的综合量化交易回测系统,目前主要用于期货期权程序化交易(CTP接口,在实盘测试中 ...
- python量化回测框架_股票量化交易回测框架pyalgotrade源码阅读(一)
PyAlgoTrade是什么呢? 一个股票量化交易的策略回测框架. 而作者的说明如下. To make it easy to backtest stock trading strategies. 简单 ...
- 量化交易-回测调参-神龙摆尾
系列文章目录 第一章 神龙摆尾 文章目录 目录 系列文章目录 文章目录 前言 一.所涉结构模型简介 二.策略实现 1.策略源代码 2.初步参数调优-选股参数 3.进一步参数调优-卖出参数 总结 前言 ...
- 【思考14】量化交易回测中,关于涨跌停的处理方式
这篇文章免费,可以在知乎看到 有好多人在量化交易的回测过程中,对股票.期货之类的涨跌停比较在意,害怕涨跌停了之后交易不了,本文就尝试梳理下我对涨跌停的看法以及我在回测中的应对方式. 在开始本文对涨跌停 ...
- 6款优秀的量化交易回测框架!VNPY位居第一
一个策略从想法,到测试,在到实盘,然后改进,进入另一个循环,需要很多的时间和精力.这时候选择一款高效.灵活的测试系统就是当务之急了.即使最后你可能需要写自己的系统,但是这些框架的软工架构还是很值得借鉴 ...
- 基于强化学习的期权量化交易回测系统1
概述 量化交易平台很重要的一个环节就是回测系统,可以通过对历史行情的回放,验证量化交易策略的性能表现.量化交易强化学习环境,则是向Agent提供一个交互的环境,Agent(即量化策略)根据市场环境(强 ...
- python股票回测_Python量化交易-回测简单的交易策略
这篇文章主要介绍如何使用Python对一些简单的交易策略进行回测,对这块比较感兴趣的朋友可以看一看. 1.获取证券数据 本文以A股市场为例,先获取A股近10年的数据并保存到数据库. 1.1.安装数据库 ...
- 基于强化学习的期权量化交易回测系统5
我们现在已经可以在主循环中获取行情数据,并且传给了Agent类.接下来Agent类会调用策略类,由于决定采取的行动.在策略类做决策时,需要参考用户仓位Position信息,还有就是权利金.保证金.手续 ...
最新文章
- MariaDB/MySQL从数据库中选择随机的行
- sharepoint 2013 使用outlook 打开sharepoint 任务失败
- windows中以管理员身份运行cmd
- Hadoop Streaming
- SpringBoot快速集成Apollo配置中心
- 国产美瞳频获融资背后:“小”美瞳的“大”生意经?
- 〖前端开发〗HTML/CSS基础知识学习笔记
- Apache Kafka消费者再平衡
- 当前目录未找到系统,请尝试选择更深层的目录再次搜索解决方法
- scrapy Pipline保存到数据库
- 超牛无损图片放大神器PhotoZoom
- 高级口译 WordList1
- ETL: Extraction Transformation Loading
- 初学01-夜神模拟器连接Android Studio
- ipad协议720版本
- 《Docker系列》Docker安装Hadoop
- 直播视频app源码,自定义可点击可滑动的通用RatingBar
- 1.12Java-集合
- 二氧化碳传感器SCD30采集的真实物理量
- Julien Nioche谈Apache Nutch 2的特性及产品路线图
热门文章
- 北京软件开发公司哪家好些
- vue与java连接的url_Vue路由器链接在URL中添加对象
- 西门子1200 总线控制V90伺服模板 新能源自动排列机,真实项目 基于111报文自己编写的PN通讯控制V90伺服程序
- oracle sysdate毫秒,Oracle sysdate常用
- 国仁网络资讯:快手短视频运营中常见的10大疑难杂症;【建议收藏】
- go-cqhttp系列教程-go-cqhttp安装-1
- Flutter 沉浸式状态栏
- matlab中 feof(fp),feof和ferror函数,C语言feof和ferror函数详解
- 奈奎斯特定理和香农第二定理
- 信息安全关键领域国产替代提速 概念股价值解析