0%

量化投资分析工具quantstats使用

简介

quantstats – 衡量策略绩效指标的python lib库,用于投资组合分析。主要由3部分组成:

  • quantstats.stats:用于计算多种性能指标,如夏普比率、胜率等
  • quantstats.plots:用于性能、下降趋势、月度回报等绩效指标的可视化
  • quantstats.reports:用于生成度量报告,可保存为html文件

安装&使用

  • 安装:pip install quantstats
  • 使用方法:
  1. 使用quantstats.stats计算多种性能指标,如夏普比率、胜率等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import quantstats as qs
qs.extend_pandas()
stock = qs.utils.download_returns('TSLA')
stock
Date
2010-06-29 NaN
2010-06-30 -0.002512
2010-07-01 -0.078472
2010-07-02 -0.125683
2010-07-06 -0.160938
...
2022-04-18 0.019584
2022-04-19 0.023758
2022-04-20 -0.049555
2022-04-21 0.032317
2022-04-22 -0.003698
Name: Close, Length: 2976, dtype: float64
qs.stats.sharpe(stock)
1.0828146689088534
stock.sharpe()
1.0828146689088534

支持的完整指标:

1
[f for f in dir(qs.stats) if f[0] != '_']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
['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',
'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',
'ulcer_index',
'ulcer_performance_index',
'upi',
'value_at_risk',
'var',
'volatility',
'warn',
'win_loss_ratio',
'win_rate',
'worst']
  1. 使用quantstats.plots以图形的形式输出绩效指标
1
qs.plots.snapshot(stock, title="TSLA Performance')

支持的全部绘图函数:

1
[f for f in dir(qs.plots) if f[0] != '_']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
['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']
  1. 使用quantstats.reports生成综合报表,可保存为html文件

qs.reports.html(stock, "SPY")

支持输出7种不同的报告:

  1. qs.reports.metrics(mode='basic|full", ...) - 展现基础/所有指标
  2. qs.reports.plots(mode='basic|full", ...) - 展现基础/所有绘图
  3. qs.reports.basic(...) - 展现基础指标和绘图
  4. qs.reports.full(...) - 展现所有指标和绘图
  5. qs.reports.html(...) - 生成html完整报告
1
[f for f in dir(qs.reports) if f[0] != '_']

['basic', 'full', 'html', 'iDisplay', 'iHTML', 'metrics', 'plots']

quantstats输出的html报表如下,可以看到左边是可视化绩效指标,右边是文字绩效指标。


在backtrader中使用quantstats

策略绩效评价是量化交易很重要的一环,backtrader提供多种分析者对象analyzer,可以输出各项策略绩效指标,但输出结果是字典方式的数据,没有可视化的绩效报表,而且还缺少一些重要指标,比如索提诺比率(sortino ratio),使用起来不友好。quantstats可以输出html报表,包括各项绩效指标和图表,且可以非常方便地与backtrader集成。

backtrader使用quantstats示例代码如下:

1
2
3
4
5
6
7
8
9
10
cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')
strats = cerebro.run()
strat0 = strats[0]
pyfolio = strats.analyzers.getbyname('pyfolio')
returns, positions, transactions, gross_lev = pyfoliozer.get_pf_items()
print(returns)
returns.index = returns.index.tz_convert(None)
import pandas as pd
import quantstats
quantstats.reports.html(returns, output='stats.html', title='Stock Sentiment')

交流

欢迎大家留言,关注微信公众号多多交流,最新的文章会优先发布在微信公众号上。

参考

坚持原创分享,您的支持将鼓励我继续创作更多优质内容!