- 市场的动量效应
- 动量策略的核心盈利因子
- Hello World: 广为人知的动量策略
- Hello World: 代码编写和调试
- Hello World: 研究与优化
- 骗术大揭秘与第一部分结语
上一篇主要展示了代码实现的框架和说明了目视检查的方法。但在程序化中,目视检验存在很大的局限性,最大的问题就是过拟合。因为人眼所见的数据范围很小,很难有全局的视野(十里坡剑神除外)。目视检查一般仅在代码的调试阶段进行,核心目的是验证程序正确实现了设计的逻辑。甚至可以说不可能存在真实可靠的脱离了量化的回测工作(again: 十里坡剑神除外)。这就像单元测试的目的是为了检验是否程序按照需求进行实现。
除了过拟合,作为基于大量数据的数据分析类型的程序,很重要的另一个工作是炼丹般的调参。就如同Python的机器学习中的超参数可以选择第三方包帮助自动化调参一样(后续文章会做的);通常我们调参一些程序化策略时,会借助量化软件来协助调参。
作为第一部分内容,本篇文章详尽地逐步演示如何使用TBQ3来进行参数优化,并且在文中展开一些思索和讨论;同时也顺便展示一下这个Hello World性质策略的绩效。
本篇截图比较多,文章较长,列一下目录:

优化参数的步骤
上一篇的代码中使用了三个输入参数:

并且隐含了两个固定止盈止损的参数,在代码中隐式的被使用:

细化来看,参数优化的目标应该是通过不断的进行参数优化将这些参数匹配到具体的合约,最好能够固定下来。至少也是能够根据波动率得到一个参数匹配列表:高波动率时,使用一组参数;低波动率时,使用另一组参数。这过于复杂了,后面其他部分找机会再详细聊。
1)多品种选择
多品种选择是一个比较复杂的工作。这涉及到根据近期波动率、品种保证金、品种相关性进行筛选,特别是波动率的筛选,可能还会涉及到一些时序预测,这些工作通常需要独立的Python程序来计算,仅靠TBQ3的免费功能做起来有些过于复杂。后面单独文章讨论。
2)优化步骤
下面详细分步骤列举出参数调优的操作过程,可以把这部分视为一个手把手的Step by Step的TBQ3使用教程了。如何通过TBQ3优化一个多品种的portfolio步骤如下:
- 首先点击上方的“研究”按钮,打开研究界面:

- 打开研究界面后,右键菜单选择:策略单元 -> 新建

- 批量添加品种之后,设定周期和时间范围,以及其他数据参数,并且添加要优化的策略:

- 点击确定之后,可以看到所有研究单元已经添加完成,此时还需要指定优化参数。任选一个研究单元,点击优化参数设置:

- 点击优化设置,调整每个参数的范围:

- 作为简化演示,将刚才的参数复制给每个研究单元:

- 选择全部研究单元点击并行,就可以多线程执行优化了,因为我们的Hello World策略参数很少,所以速度也很快:

3) 组合分析
除了单品种参数优化,还需要做一个组合分析。前面提到过,单一品种的量化几乎不可能稳定盈利,一旦单品种遇到巨幅回撤后会承担非常大的风险。所以无论从盈利稳定性还是风控角度都需要考虑组合分析的结果。如下是最好和最差的两个单研究单元和所有单元的组合盈亏曲线对比:

图片字比较小,简单说明一下,对于单个研究单元都是用了最优化的参数查看盈亏曲线。其中:
- 夏普率最优的研究单元的年化为82.84%;
- 夏普率最差的单研究单元年化:3.31%;
- 最优化参数组合年化:23.91%。
看起来也不错?嗯,这点我们下一篇详细聊。但是仅从当前的结果就可以明显看到组合年化明显分摊了风险,虽然代价是净利润大幅降低。
但是,降低风险、稳定收益,这不就是量化的意义吗?
在本部分前面文章曾经提过,一般认为双均线是一个适合于日线的策略。实际一个策略的量化研究也包括周期的适合性研究。因为我们不能道听途说,必须去做具体的定量分析。所以在每个策略完成代码实现之后也需要做一个周期适合性的分析。操作方式很简单,只需要和上面的步骤类似,除了将研究单元修改为其他周期即可。以15分钟为目标研究对象为例,操作步骤如下:
- 全选所有研究对象,右键选择策略单元设置:

- 勾选周期设置,调整为15分。注意,为了保证对比的有意义,需要确保不同周期的起始结束时间相同。另外,TBQ3免费用户的Bar数有限制,也需要关注一下有效Bar数。

- 调整完成,检查列表中的周期为15分,确认后,重新执行并行优化:

- 完成后再次使用同参数组合进行分析:

额……确定双均线更适合日线吗? 算了,不过是个Hello World,不深究了。反正也不会有人真的蠢到仅用双均线做实盘策略的。特别要是看了下一篇文章,会更确定这点的。(别跟我扯某某某就是两根均线赚了几百个W,说出这种话的人,可能不适合做量化)
参数优化
当我们进行优化过程中,软件会为每个研究单元或者组合整体计算出一套最优参数(最优的评判标准可以自行设置,一般为夏普率)。
最后的最优参数可以在策略参数中看到:

参数的优化配置可以分别考虑按照品种细化或者按照组合统一设置两种思路:
- 如果需要细化处理每个品种的参数,则可以针对每个品种分开选择最优化参数。此时使用TBQ3提供的合约属性方法SymbolType获得合约代码,并为每个商品类型设定不同的参数:

- 如果需要简化处理,也可以使用同参数组合的优化参数结果进行统一的参数设置。显然,如果使用更细化的参数更容易针对特定时间段的数据造成过拟合。使用同参数组合优化结果的参数则更具有普适性,稳定性更强,避免过拟合。
上述描述并不意味着选择同参数组合优化结果一定是正确的。如果对于品种本身的特性足够了解,并且策略的参数和逻辑足够清晰和明确,那么精确细化到具体每个品种使用不同的参数则可能是一个更好的选择。
固定止盈止损
当整个策略得到优化后,我们也得到了策略运行的业绩。此时就可以回过头来重新调整固定止盈止损数值了。Hard TPSL对于不同心理承受能力的交易者也不尽相同。但是参考回测结果中最好与最坏业绩分别的最大盈利和最大亏损是一个比较直接的设定方式。注意这种TPSL并非是策略的一部分,而是一种固定配置。所以不需要作为参数来使用,而历史回测中的最大盈利和亏损对于设定止盈止损会有很大帮助。
如果使用Python等更加底层的量化实现方式,则可以更加灵活的设置止盈止损。这里暂不讨论对于更复杂的如:移动止损、保本止损、ATR止损等等。这些后面的其他部分文章会额外详细讨论。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/774062
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!