PLUS会员

市场风格变化时策略如何自动切换

由small_q创建,最终由qxiao 被浏览 411 用户

旧版声明

本文为旧版实现,仅供学习参考。

https://bigquant.com/wiki/doc/demos-ecdRvuM1TU


预计算因子表[数据平台] https://bigquant.com/data/datasources/cn_stock_prefactors

https://bigquant.com/wiki/doc/dai-PLSbc1SbZX

https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS

\

策略简介

市场行情总是在变化,而一个模型一般只能适应一种市场,如果市场在多种行情中急剧切换,如何将多个选股模型融入到一个策略,并且根据当前行情自动切换模型进行量化选股?

本次以两种行情举例:

  • 指数下跌向上反转时
  • 指数小幅度调整时

行情风格多样,本次以此 2 种风格分别构建2个不同的模型,并且将这2个模型融合,形成一个策略。

策略思路

  1. 构建2个不同市场行情下的量化模型。
  2. 因选股模型中加入了市场环境特征,只有当前市场环境符合选股模型中的市场环境时,才会选出该模型对应的股票。
  3. 当前市场环境如果匹配到多个适应它的选股模型,采用按选股模型的历史回测 效果进行排序,更好的模型选出来的票优先购买。

因子举例

量化因子:
#当天是否涨停

isZhangtToday=where((return_0>1.09)&(close_0==high_0),1,0)

#横盘判断因子
ts_max(close_0,10)/ts_min(close_0,10) 

#近期是否出现过高收益

where(ts_max(return_3,120)>0.2,1,0)
#当天 A 股涨停数
zt_num=group_sum(date, isZhangtToday) 

#涨停票第二天收盘平均收益

zt_shouyi=where(shift(isZhangtToday,1)==1,return_0,0) mean_ztShouyi=group_sum(date, zt_shouyi)/shift(zt_num,1) 

......

指数下跌向上反转

指数下跌向上反转时,选择低位强势启动个股进行交易。

{w:100}{w:100}{w:100}{w:100}指数小幅度调整

涨停后跟随市场情绪小幅调整,再度布局拉升

{w:100}{w:100}{w:100}{w:100}从回测结果可以看出,2种模型单独使用时适应的市场行情不多,所以大部分时间模型处于空仓状态。而市场不是一成不变的,如果把这两种模型融合成一个策略,那么策略是否能更灵活地适应多个市场行情,并且尽量多地增加收益?

融合策略

低位启动模型+涨停后调整追击模型融合策略,融合两种不同风格的策略后,可以发现:空仓时间减少、收益增加。

{w:100}{w:100}{w:100}{w:100}本次主要分享多个选股模型融合的方法,只例举2个选股模型。融合后,还是会存在较多的空仓时间,需要后续去构建自己的选股模型进行补充, 关于如何构建及调优选股模型的思路及方法,作者在下期内容进行分享。

讲解视频

https://www.bilibili.com/video/BV1uL411A7cC?spm%5Fid%5Ffrom=333.999.0.0

\

策略源码

标签

量化选股
评论
  • 请问这个有源码可以提供学习参考吗?
  • 本文分享的两个模型,从逻辑思路上是值得研究的,因本文重点只是介绍多种模型融合到一个策略的方法,这两个模型未经过真正意义的调优,大家可以在此基础上进行调优,调优的重点:分析收益差的个股,有逻辑性的调整(不要一味的为了过滤它而过滤它),调优完成后,要用其它年份排除过拟合情况测验;调优后选出股票数据过少后,也要相应放宽一些条件增加数量。后续有机会再分享,选股逻辑的思路灵感来源方法、逻辑构建、回测调优、排除过拟后验证,收纳真正可以实操的逻辑。 当前这个策略大家可以自己继续调优下,就当前的这个源码,可以调整下持仓时间,把主函数的初始化参数设置成: context.options\['hold_days'\] = 0,回测18年-21年,效果如下: ![{w:100}](/wiki/api/attachments.redirect?id=dabf72af-42a2-4ba1-ada7-c9fae9da5012)
  • ![{w:100}](/wiki/api/attachments.redirect?id=dd5ae925-4768-4e76-b1a9-6deb7b94918d)这个卖出的条件,是用来后边配合增加其他策略再用的么?貌似没法触发my==3的条件
  • 是的,本策略没有用到卖出条件,是根据持仓时间自动卖出,只是没有改模板,针对需要设定卖出条件,根据条件触发卖出的,就可以用卖出条件,再结合主函数去做卖出控制
  • 老师的分享很接地气,我根据思路,悟道了不少的思路,开发出了不少的好策略,太赞了
{link}