量化交易--交易策略超参数优化-5-灵析社区

搜不鸟了

上一节我们经过简单优化后实现了第一个盈利的策略,但我们依然需要思考一下策略参数是不是最优的,是否还有优化的空间?

本节我们将基于 freqtrade 的Hyperopt模块,对我们的策略参数进行优化,Hyperopt本质上还是基于scikit-optimize进行开发的。

我们先简单介绍一下原理,超参数优化一般有三种方式:

1、网格搜索(Grid Search)

网格搜索是暴力搜索,在给定超参搜索空间内,尝试所有超参组合,最后搜索出最优的超参组合,主要缺点是耗时,不适应大量参数的穷举,如下图:

2、随机搜索(Randomized Search)

随机搜索是在搜索空间中采样出超参组合,然后选出采样组合中最优的超参组合。随机搜索的好处如下图所示:

                          网格搜索和随机搜索的对比[2]

网格搜索不会care这个参数是否为important parameter,对于所有参数一视同仁,穷举所有的情况,寻找最优参数组合;而随机搜索会有更多的参数值参与到important parameter中,减少搜索范围,提升搜索效率。

3、贝叶斯优化(Bayesian Optimization)

调优的目的是要找到一组最优的超参组合,能使目标函数f达到全局最小值。

举个例子,若学习率设置过大,模型可能会在代价函数的全局最优点附近不断来回震荡,甚至跳出全局最优点,而设置过小,又可能会陷入局部最优,因此调学习率这一参数,是为了让模型能收敛到代价函数的全局最小值。可是在机器学习中,目标函数f常是被称作expensive blackbox function,计算开销大且不一定为凸函数。为此,贝叶斯优化出现了,它特别适合针对expensive blackbox function找到全局最优。

                               随机采样10个点的目标函数f(x)[4]

贝叶斯优化使用了高斯过程(gasussian processes, GP)去构建代理模型,基于给定的输入和输出,GP会推断出一个模型(这里为代理模型)。假设我们从expensive step的f(x)采样了4个点,然后我们把这4个点交给GP,它会返回一个代理模型

notion image

绿色实线就是GP的代理模型,绿色条带是输出分布的标准差(即为Uncertainty)。我们有了代理模型,后续我们去找下一个合适的超参值,就能带入到计算开销相对较小的代理模型中,评估给定超参值的情况。

对上述原理感兴趣的小伙伴,还可以再深入了解一下。

Code

实现我们HyperOpt的超参数调优代码:(相对比较简单)

# Hyperoptable parameters
buy_rsi = IntParameter(low=1, high=50, default=30, space='buy', optimize=True, load=True)
sell_rsi = IntParameter(low=50, high=100, default=70, space='sell', optimize=True, load=True)
short_rsi = IntParameter(low=51, high=100, default=70, space='sell', optimize=True, load=True)
exit_short_rsi = IntParameter(low=1, high=50, default=30, space='buy', optimize=True, load=True)

将买入参数变量替换至买入策略中:

同理将卖出参数变量替换至卖出策略中:

启动参数调优,设置为500epoch:

docker-compose run --rm freqtrade hyperopt --config user_data/config.json --hyperopt-loss SharpeHyperOptLossDaily --strategy HyperIndexStrategy -e 500

参数调优结果

从截图中可以看到,500 epoch运行完成后,best结果是在第141个epoch中得到,最大收益率1.6%,最大回撤2.02%。给出最优参数(买入、卖出、ROI、止损)组合如下:

阅读量:2016

点赞量:0

收藏量:0