Backtrader 量化回测实践(6)——量化回测评价工具Quantstats
1.概述
Quantstats是用于量化金融分析和投资组合优化的Python库。该库提供了各种工具,可从不同来源获得金融数据,进行技术和基本分析,并创建和测试投资策略。还可以使用可视化工具来分析股票和投资组合。
Quantstats是一款简单易用的定量金融分析工具,因此它将是本研究的首选库。
用BT进行回测后,内置的Analysis分析指标,可以作为回测结果的考量指标,但是没有对于结合市场指标评价回测结果。例如策略年化收益率5%,但是大盘市场走势,大盘指数年化收益率6%,说明策略并不理想。
1964年,威廉·夏普在《金融学期刊》上发表的论文里,首次把金融资产的收益拆成两部分。和市场一起波动的部分叫贝塔收益,不和市场一起波动的部分就叫阿尔法收益。
阿尔法收益,指的是跑赢大盘的超额收益。战胜市场平均水平获得的收益。主要承担的是非系统性风险,也就是证券组合带来的风险。
贝塔收益,就是跟随整个市场波动获取的平均收益。风险主要来自于市场的系统性风险。
Quantstats可以实现市场参考,设定一个基准策略,对比量化策略,在A股通常把基准设定为沪深300指数的收益率。
安装简单,不做赘述。
2. QuantStats主要功能
在GitHub上介绍:
主要有三个功能:
QuantStats is comprised of 3 main modules:
quantstats.stats - for calculating various performance metrics, like Sharpe ratio, Win rate, Volatility, etc.
quantstats.plots - for visualizing performance, drawdowns, rolling statistics, monthly returns, etc.
quantstats.reports - for generating metrics reports, batch plotting, and creating tear sheets that can be saved as an HTML file.
- 1.统计功能,计算各类性能指标,夏普率,胜率,波动率等;
- 2.绘图功能,可视化性能指标,最大回撤,滚动统计,月度回报率等;
- 3.报告功能,生成度量报告,批量绘图,创建HTML报告;
(1)统计功能
统计指标很丰富。
str_stats = ''
for k in dir(qs.stats) :
if k[:1] != '_':
str_stats += k + ','
print(str_stats)
统计指标:
adjusted_sortino,autocorr_penalty,avg_loss,avg_return,avg_win,best,cagr,calmar,common_sense_ratio,comp,compare,compsum,conditional_value_at_risk,consecutive_losses,consecutive_wins,cpc_index,cvar,distribution,drawdown_details,expected_return,expected_shortfall,exposure,gain_to_pain_ratio,geometric_mean,ghpr,greeks,implied_volatility,information_ratio,kelly_criterion,kurtosis,max_drawdown,monthly_returns,omega,outlier_loss_ratio,outlier_win_ratio,outliers,payoff_ratio,pct_rank,probabilistic_adjusted_sortino_ratio,probabilistic_ratio,probabilistic_sharpe_ratio,probabilistic_sortino_ratio,profit_factor,profit_ratio,r2,r_squared,rar,recovery_factor,remove_outliers,risk_of_ruin,risk_return_ratio,rolling_greeks,rolling_sharpe,rolling_sortino,rolling_volatility,ror,serenity_index,sharpe,skew,smart_sharpe,smart_sortino,sortino,tail_ratio,to_drawdown_series,treynor_ratio,ulcer_index,ulcer_performance_index,upi,value_at_risk,var,volatility,warn,win_loss_ratio,win_rate,worst
可以逐一测试。
(2)报告功能
You can create 7 different report tearsheets:
qs.reports.metrics(mode='basic|full", ...) - shows basic/full metrics
qs.reports.plots(mode='basic|full", ...) - shows basic/full plots
qs.reports.basic(...) - shows basic metrics and plots
qs.reports.full(...) - shows full metrics and plots
qs.reports.html(...) - generates a complete report as html
Let's create an html tearsheet
主要报告功能说明:
qs.reports.metrics(mode='basic|full", …) - 展现基础/所有指标
qs.reports.plots(mode='basic|full", …) - 展现基础/所有绘图
qs.reports.basic(…) - 展现基础指标和绘图
qs.reports.full(…) - 展现所有指标和绘图
qs.reports.html(…) - 生成html完整报告
(3)绘图功能
str_stats = ''
for k in dir(qs.plots) :
if k[:1] != '_':
str_stats += k + ','
print(str_stats)
绘图功能:
daily_returns,distribution,drawdown,drawdowns_periods,earnings,histogram,log_returns,monthly_heatmap,monthly_returns,plotly,returns,rolling_beta,rolling_sharpe,rolling_sortino,rolling_volatility,snapshot,to_plotly,warnings,yearly_returns,
3.测试准备
(1)数据说明
- 收益率用收盘价,pandas的方法:pct_change计算。
- quantstats需要的策略数据格式为Series,值是收益率,索引是日期,必须为datetime格式。
- 基准数据用沪深300指标。
- 无风险收益率,假设按三年期存款利率3%。
(2)环境版本
后面有的功能会报错,所以列示出需要的环境版本。
QuantStats 0.0.62
pandas 2.0.3
m