10.6 回测交易策略
回测在评估交易策略绩效方面至关重要,自动化的回测工具因减少人为错误的风险而备受青睐。通常我们使用Quantopian的pyfolio包进行回测,该工具易于使用,提供了各种独立图表,全面展示了交易策略的绩效情况。
10.6.1 回测统计
在量化金融领域,回测统计通常是指通过回测得到的统计数据,用于评估和比较交易策略的性能。这些统计数据可能包括年化收益率、累积收益、年化波动率、夏普比率、卡玛比率等,提供了对策略在历史数据上表现的全面评估。
(1)使用库Pyfolio中的timeseries模块,将由DRL策略生成的每日收益转换为Pyfolio时间序列对象。接着,通过perf_stats函数计算了该策略的各项绩效指标,包括年化收益率、波动率、夏普比率等。最终,将这些绩效指标存储在perf_stats_all变量中。这有助于对策略的整体表现进行全面的量化评估。
from pyfolio import timeseries
DRL_strat = convert_daily_return_to_pyfolio_ts(df_daily_return)
perf_func = timeseries.perf_stats
perf_stats_all = perf_func( returns=DRL_strat,
factor_returns=DRL_strat,
positions=None, transactions=None, turnover_denom="AGB")
(2)打印输出DRL策略的绩效统计信息,包括年化收益率、波动率、夏普比率等指标。通过查看这些统计数据,可以更全面地了解和评估策略的表现。
print("==============DRL Strategy Stats===========")
perf_stats_all
执行后会输出:
==============DRL Strategy Stats===========
Annual return 0.261142
Cumulative returns 0.363804
Annual volatility 0.133302
Sharpe ratio 1.807816
Calmar ratio 3.317809
Stability 0.906206
Max drawdown -0.078709
Omega ratio 1.350606
Sortino ratio 2.736355
Skew -0.183264
Kurtosis 1.132931
Tail ratio 1.065654
Daily value at risk -0.015838
Alpha 0.000000
Beta 1.000000
dtype: float64
上面输出的是DRL策略的绩效统计信息,包括年化收益率(Annual return)、累积收益率(Cumulative returns)、年化波动率(Annual volatility)、夏普比率(Sharpe ratio)等指标。这些统计数据提供了对策略表现的全面了解。在这里,年化收益率为0.2611,夏普比率为1.8078,最大回撤为-0.0787等。这些指标有助于评估策略的风险和收益特性。
(3)下面的代码用于获取基准(baseline)的绩效统计信息。基准使用了道琼斯工业平均指数(^DJI),并计算了相应的绩效指标,包括年化收益率、累积收益率、年化波动率、夏普比率等。这些基准统计信息可用于与DRL策略的表现进行比较,帮助评估策略的相对优劣。
print("==============Get Baseline Stats===========")
baseline_df = get_baseline(
ticker="^DJI",
start = df_daily_return.loc[0,'date'],
end = df_daily_return.loc[len(df_daily_return)-1,'date'])
stats = backtest_stats(baseline_df, value_col_name = 'close')
执行后会输出:
==============Get Baseline Stats===========
[*********************100%***********************] 1 of 1 completed
Shape of DataFrame: (336, 8)
Annual return 0.279047
Cumulative returns 0.388402
Annual volatility 0.139129
Sharpe ratio 1.844560
Calmar ratio 3.124551
Stability 0.918675
Max drawdown -0.089308
Omega ratio 1.358960
Sortino ratio 2.734872
Skew NaN
Kurtosis NaN
Tail ratio 1.052781
Daily value at risk -0.016510
dtype: float64
上面的输出结果展示了基准(道琼斯工业平均指数)的绩效统计信息,基准的绩效指标包括年化收益率、累积收益率、年化波动率、夏普比率等。通过与DRL策略的统计信息比较,可以更全面地评估策略相对于基准的优劣表现。
10.6.2 回测结果可视化
通过绘制回测结果的可视化图来分析交易策略的性能,这些可视化图通常包括策略资产价值随时间的变化、策略每日收益率、基准(如道琼斯工业平均指数)的表现等,有助于更直观地理解策略的优势和劣势。
在下面的代码中,使用库Pyfolio生成完整的策略分析图表(tear sheet)。首先,通过 get_baseline 函数获取道琼斯指数作为基准的日线数据,然后计算基准的每日收益率。接着,使用 Pyfolio中的函数create_full_tear_sheet生成策略分析图表,其中参数returns传入了 DRL 策略的每日收益率,而参数benchmark_rets传入了基准的每日收益率。
import pyfolio
%matplotlib inline
baseline_df = get_baseline(
ticker='^DJI', start=df_daily_return.loc[0,'date'], end='2021-10-01'
)
baseline_returns = get_daily_return(baseline_df, value_col_name="close")
with pyfolio.plotting.plotting_context(font_scale=1.1):
pyfolio.create_full_tear_sheet(returns = DRL_strat,
benchmark_rets=baseline_returns, set_context=False)
执行后会输出提供了策略回测的多个性能指标,其中包括:
- Annual return(年化收益):26.114%
- Cumulative returns(累积收益):36.38%
- Annual volatility(年化波动率):13.33%
- Sharpe ratio(夏普比率):1.81
- Calmar ratio(卡玛比率):3.32
- Stability(稳定性):0.91
- Max drawdown(最大回撤):-7.871%
- Omega ratio(欧米茄比率):1.35
- Sortino ratio(索提诺比率):2.74
- Skew(偏度):-0.18
- Kurtosis(峰度):1.13
- Tail ratio(尾部比率):1.07
- Daily value at risk(每日风险值):-1.584%
- Alpha(阿尔法):0.00
- Beta(贝塔):0.94
并绘制对应的一系列可视化图,如图1-8所示。
图1-8 回测结果的可视化图
这些指标反映了当前策略在回测期间的收益、波动性、风险调整后的绩效等多个方面信息,其中夏普比率、卡玛比率、索提诺比率等是衡量策略风险调整后收益的重要指标,而最大回撤则是衡量策略可能面临的最大损失。
另外还输出了有关最差回撤期间和压力测试的详细信息:
Worst drawdown periods Net drawdown in % Peak date Valley date Recovery date Duration
0 7.87 2020-09-02 2020-10-28 2020-10-09 49
1 5.17 2021-08-16 2021-09-30 NaT NaN
2 4.06 2021-05-10 2021-06-18 2021-010-02 40
3 3.52 2021-02-24 2021-03-04 2021-03-10 11
4 3.40 2021-01-20 2021-01-29 2021-02-05 13
Stress Events mean min max
New Normal 0.10% -3.32% 3.32%
在上面的输出中,对最差回撤期间信息的具体说明如下所示。
- 第一个最差回撤期间:7.87%,起始于2020年9月2日,峰值日期为2020年10月28日,谷底日期为2020年11月9日,恢复日期为2020年11月9日,时长为49天。
- 第二个最差回撤期间:5.17%,起始于2021年8月16日,峰值日期为2021年9月30日,无法确定恢复日期,时长未知。
- 第三个最差回撤期间:4.06%,起始于2021年5月10日,峰值日期为2021年6月18日,恢复日期为2021年7月2日,时长为40天。
- 第四个最差回撤期间:3.52%,起始于2021年2月24日,峰值日期为2021年3月4日,恢复日期为2021年3月10日,时长为11天。
- 第五个最差回撤期间:3.40%,起始于2021年1月20日,峰值日期为2021年1月29日,恢复日期为2021年2月5日,时长为13天。
在上面的输出中,对压力测试(Stress Events)的具体说明如下所示。
- New Normal:压力测试的平均值为0.10%,最小值为-3.32%,最大值为3.32%。这些值反映了在“新常态”下的策略性能,涵盖了不同市场情况下的表现。