教你利用机器学习从0到1打造量化选股策略

这是一篇对前面部分内容的一个总结,利用机器学习从0到1开发量化选股策略。本篇文章没有代码,只是从文字角度叙述策略开发的流程。

目前有很多量化回测的平台可以供大家开发策略,但使用这些回测平台有个弊端。其弊端在于若需要构造一些复杂的策略,那些平台就无法满足我们的要求,因为1)当我们训练的策略模型比较复杂时,比如训练深度学习模型,可能需要好一点的机器,而这些机器平台可能无法提供或代价昂贵;2)平台很多东西都是封装好的,你无法添加自己想要的操作。

因此本篇文章将从0到1利用机器学习构造自己的中期股票选取的量化策略。利用机器学习构建策略的流程图如下:


在这里插入图片描述

Step 1:获取数据存入本地。
Step 2:对原始数据进行预处理及标签制作。
Step 3:特征工程:提取特征。
Step 4:选择机器学习模型并进行模型训练。
Step 5:利用训练好的模型进行回测。
Step 6:模型超参调整,重复step 4、step 5、及step 6。选择较优的超参组合。

对于模型的超参调整后文不作介绍,基本方法就是单独调整某一超参观察效果的改变情况再决定超参的设置。

1 数据获取

数据获取是进行一个机器学习项目研究中的第一个步骤。tushare提供了一个很好的数据获取接口。如下图我们可以通过tushare获取一些股票数据。
[图片上传失败...(image-25f808-1583048696087)]
这里我们获取的数据主要有:
1) 股票基础信息,包括股票代码、名称、上市日期、退市日期等。
2) 每支股票日线信息,包括股票的开盘价、收盘价、最高价、最低价、换手率、成交量等。
3) 每日涨停跌停的统计。
4) 个股资金流向(大中小单流量)
详细的数据获取步骤可以见下面链接或直接看代码,代码在文章末尾。
数据获取教程:https://blog.csdn.net/qq_31611005/article/details/103788527

2 数据处理及标签制作

1)数据处理
股市中经常会有一些利好利空,而这些利好利空都会造成股价突然大幅上涨或下跌。所以经常会剔除一些这种异常数据。但因为剔除数据比较耗费时间,在这里我并未剔除数据。但在模型训练之前我仅剔除了特征中存在nan值的数据。
2)标签制作
机器学习可以分为有监督学习、无监督学习以及强化学习三个类别。在这里我们将其转化为有监督学习。而有监督学习也可以分为回归问题与分类问题。下文我们将选股问题转化为分类问题。
那如何给数据标标签呢?首先我认为仅仅使用K线数据很难选取一些短线股,短线股还要考虑一些消息面啥的。所以在标标签的时候我也是从中线股的选取角度进行标标签的。假设未来时间最高收益在12%以上,最高损失在7%以上,则label为1,否则为0。(注意一下,如果先达到最高12%的收益,即使最后损失在7%以上我们仍标记label为1,因为此时我们已经止盈卖出了,我的止盈点设置为12%。)

3 特征工程

在机器学习领域有一句话叫,特征决定模型的上限,而模型的选择或优化只是去逼近这个上限。由此可见,特征的挖掘是非常重要的。
本文一共构造了29个特征,所有构造的特征如下:
1) 所在星期及月份信息,通常而言股票的涨跌都有是有周期性的,总会在业绩好的那个月份上涨。
2) 每日涨跌停统计,如果某天涨停数远远多于跌停数,则说明市场赚钱效应显著
3) 经处理后的当日的开盘价、收盘价、最低价、最高价。不同股票的价格肯定都不一样,如果直接把开盘价等当做特征输入显然是不合适的,需要将这些价格进行一定处理。这里我们的处理方式为: (价格-10日线股价)/10日线股价。价格表示开盘价、收盘价等,而10日线价格也是随每天变动的。
4) 处理后的历史前5天的收盘价,处理方式与3)相同。
5) 处理后的成交量特征,处理方式与3)相同。
6) 大盘近5日处理后的收盘指数,处理方式与3)类似。
7) 换手率特征。

4 模型训练

1) 模型选择
对于模型的选择,我这边选择了lightGBM模型,下面简称为lgb模型。Lgb模型是一种优秀的集成树模型。在传统的特征挖掘的数据竞赛中,LGB、xgboost、catboost号称三大杀器。对于一个数据量巨大的任务中,我个人认为lgb不仅在运行速度上而且在效果上也会好于另外两种模型。因此在模型上我选择了lgb模型。

2) 数据集划分
训练集时间跨度:20160101->20181231
回测时间:20190101->20191218

3) 模型超参设置
以下参数设置为个人多次数据竞赛的经验参数。
num_leaves:31
min_data_in_leaf:20
objective:binary
boosting:gbdt

4) 特征重要性分析
Lgb有自带的特征重要性查看借口,以下为特征的重要性排序(截取了部分重要特征)。

在这里插入图片描述

特征解释:
turnover_rate:换手率
pre_close_index_000001_shift_:指数历史收盘价,最后的数字表示历史前多少天(与当前偏移的天数)。
Pre_close_shift_:个股收盘价,后面的数字与前面相同。
amount_index_000001_shift_:大盘成交量,后面的数字意思与前面相同
amount shift:个股成交量,后面的数字意思与前面相同
U-D:涨停数-跌停数
High_transform:转换后的当日最高价。Low_transform类似。
Vol:转换后的成交量
Month: 月份

从排序中可以发现,换手率、近几天上证指数及涨跌停情况是比较重要的特征。看上证指数和涨跌停情况说明还是需要看大盘的,大盘好赚钱效应才高。除此之外月份也是比较重要的特征,说明还是有一定周期性的。

5 回测

在模型训练完成之后,输入个股的特征,模型会根据特征计算符合我们选股要求的概率(未来20天收益率在12%以上)。设置阈值为0.5,如果大于0.5则表示满足我们的选股要求,否则不满足。
我们的投资策略为:每天根据计算得到概率依概率大小依次买入(这个概率必须大于0.5),每支股票买入当前总市值的20%,也就是1/5仓位。股票的买入价格为当天收盘价,个股的最大持股周期为20天。个股的止盈点为12%,个股的止损点为7%。(对于买入的股票已经剔除了涨停票)
对于回测函数的编写这里不作介绍,可见源代码或链接。(源代码在末尾的github链接中,回测系统教程链接为:https://blog.csdn.net/qq_31611005/article/details/103834578

5.1 回测结果
回测初始资金为10w。
部分股票交易情况:

在这里插入图片描述

表中各个参数指标都比较好理解,这里不作说明。

一些指标统计:

在这里插入图片描述

账户盈利远远超过上证指数,交易胜率也较高。

账户市值变动曲线:

在这里插入图片描述

从市值变化曲线看,虽然前期还稍微落后大盘,但到后面则遥遥领先大盘。

5.2 模型合理性分析
对于模型设计的是否合理,仅仅看收益率等指标是不合理的,还需要看模型具体挑了什么买点。这点非常重要!!!通过观察模型选出来的买点,如果买点匪夷所思则可能是代码写错或是其他原因。
当模型的回测数据良好并且买点合适,才可以上模拟盘再实验一段时间。等模拟盘表现良好时才可以上实盘。

总结

本篇文章介绍了从0到1搭建一个中期选股策略。模型仍有许多不足之处,如风险控制扔不合理,仅用止损点是不合适的,除此之外特征也需要进一步挖掘。

本文的所有代码均已上传至github:
https://github.com/wbbhcb/stock_market

代码运行顺序为:
DataDownload.py->CountLimit.py->MakeLabel.py->中线股选股策略1.ipynb

有关代码的一些说明介绍:
DataDownload.py: https://mp.weixin.qq.com/s/SjTHqyxjsi7izP5XG_lUkg

回测类: https://mp.weixin.qq.com/s/0QyljyQRcB9PRTSu_XUoGw

中线股选股策略1.ipynb: https://mp.weixin.qq.com/s/L0p2Z71vorV39qSucQIlFg

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容