11.会员专属(499)

提升信号精准度:预测信号分组过滤的方法 (副本)

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

作者:徐耀杰(woshisilvio)

导语

为何要对模型预测score得分进行分组统计?

很多时候,我们会发现StockRanker每天按照score得分排序推送的股票,未必是最好的结果。尤其是一些风格不是很稳定的模型,StockRanker每天出的信号也不是很稳定。今天排名NO.1的股票可能是赚钱的,但是到了第二天变成了排名NO.2的股票赚钱,第一名反而变成了亏钱。甚至有时候第1名的股票赚钱,有时候是最后一名的股票赚钱。在实盘过程中,这种轮动现象还会交替出现。

问题思考

基于这个现象,笔者产生了以下问题:StockRanker根据score得分排序选出来的股票,在长期的回测中,他的赚钱效应到底是属于偶然的结果, 还是有一定的赚钱规律?

策略思路

  1. 输入特征列表,加入未来五日股票的收益因子,计算模型的score得分 IC值,验证模型选股的未来收益。
  2. 在m10自定义python模块中,调整分组对象,对模型的score得分信号进行分段划分。
  3. 求出几个分段区间的并集∪,对股票进行过滤

相关因子

#未来五日股票的收益
return_5_day=(shift(close_0, -5)-shift(open_0, -1))/shift(open_0, -1)
#未来10日股票的收益
#return_10_day=(shift(close_0, -10)-shift(open_0, -1))/shift(open_0, -1)

策略回测

{w:100}{w:100}{w:100}{w:100}{w:100}量化技巧

接下来,在m10自定义python模块中,可以很方便的调整我们的分组对象, 对模型的score得分信号进行分段划分。

分组 = 输入整数 区间1 = 输入整数 区间2 = 输入整数 区间3 = 输入整数

例如:分组82组

区间1=82 [区间分组 第82组(score值最大的那一端)]

区间2=81 [区间分组 第81组(score值最大的那一端)]

区间3=80 [区间分组 第80组(score值最大的那一端)]

最终结果我们选的就是头部的几组股票传入引擎的 第20组股票,第19组股票和第18组股票的这三个得分区间

实验结论:

基准:模板策略-stockranker多因子选股 夏普比率 -0.93

分组后: 提升 211% 夏普比率 1.04

研究发现,大部分模型,只要取到分组头部的那一段score得分区间进行过滤,基本上可以对原有模型有一定的提升。 强中选强,矮个子里拔将军就是这样的道理。

策略视频

https://www.bilibili.com/video/BV1VB4y1H7Uj?share_source=copy_web

策略源码

https://bigquant.com/experimentshare/22e7d449a25f4b3db256650550410172

\

{link}