基于深度学习的股票超短策略

首页 > 科技 > 大数据 > 正文 2021-09-05

发表自话题:尾盘选股策略

我花了点时间写了个利用神经网络模型的选股策略供大家学习参考使用。

股票的策略思路还是超短策略,具体就是当天尾盘买入,第二天尾盘卖出。我之前也曾用lgb做过类似的策略,具体可以看(送你一份年化100%+的策略)。对于机器学习任务的流程不熟悉的朋友可以网上找资料,也可以看(利用机器学习从0到1开发量化选股策略)。这篇文章中我把lgb换成了神经网络模型。

本篇文章分为5部分,分别是: 1. 数据准备;2. 特征构建,标签的制作;3. 特征标准化;4. 模型构造及训练;5. 回测。

1. 数据准备

使用的数据是tushare的日线数据。具体下载步骤见代码(DataDowload.py),这边不细讲。所使用的数据主要包括4种:前复权日线数据、未复权日线数据、股票涨停跌停价格数据、指数日线数据。

2. 特征构建,标签的制作

标签这边的处理和之前一样,如果第二天尾盘相较于第一天尾盘上涨则标签为1,否则为0。

特征这边我对前复权和未复权的数据都做了特征。

前复权数据特征(20日最高价、最低价;10日最高价、最低价),核心代码如下:

未复权数据特征(当日最高价、最低价、开盘价、收盘价;近几日最高价、最低价、开盘价、收盘价;平均成交价格;换手率等),核心代码如下:

指数特征(近几天的涨跌幅),核心代码如下:

3. 特征标准化

与树模型不同,神经网络对于异常值是极其敏感的(数据过大过小、数据NA等都属于异常情况),所以这里需要对异常值进行处理。除此之外我还对数据进行了标准化处理,核心代码如下:

4. 模型构造及训练

模型构造及训练我都是基于pytorch写的。

4.1 模型

模型这边我选择了LSTM模型,LSTM网络构造代码如下(非常简单,两层的BiLSTM,对于不了解LSTM的朋友可以自行百度):

4.2 模型训练

神经网络的模型训练的时候都是需要打乱数据顺序,且是以mini_batch的方式训练的。所谓的mini_batch训练就是每次将较少的样本(相对全数据集而言)送入模型中训练。

因为我使用的是LSTM模型,数据是具有前后的时间关系,如果打乱数据就容易丢失这个时间关系。这里我们只需要用一个数据记录所有样本的起始位置,然后打乱这个起始位置就可以,训练的时候根据这个起始位置去找数据即可。核心代码主要可以分为三块:

核心一(把不同股票分开放入list中,在取数据时,可以先找股票再找对应的时间):

核心2(把每一个训练样本的起始时间的索引记录下来,训练时根据起始时间的索引找数据):


如下图的dataframe,id列表示不同的股票,st表示其实时间对应的索引,训练时根据索引取数据即可。

核心3(pytorch的dataset类,先找股票位置,再找对应的起始时间点取数据):

5. 回测

训练集时间:20170101->20190101

回测时间:20190101->20200101

回测曲线:

总结

这篇文章模型较为简单,特征数量也较少,给大家入门参考学习使用。这个baseline套用其他模型也比较方便,大家可以自行探索。深度学习的使用上面还有很多细节需要考究,这些细节我自己也在研究中,比如是否可以和lgb一样,固定轮数训练。

代码Github:

https://github.com/wbbhcb/stock_market/tree/master/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%AE%9E%E6%88%98/LSTM

对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。

标签组:[股票] [复权] [深度学习

上一篇为什么创业板-1%就能触发抄底盘?另今天机构抽离重仓股必须mark!

下一篇一名资深老股民的选股铁律:梅开二度、青龙取水、涨停回马枪

相关阅读

相同话题文章

推荐内容

热门阅读