[准确率:68%]基于日指标使用LSTM预测股价是否上涨(完善版)

发表于 干货, 机器学习, 神经网络及深度学习 2019-05-15 阅读数: 246

最近因为(财务自由需要)个人项目需要,在研究一些股票预测的算法,试过PEG的估值,也试过其他一些估值方法,但是效果都不是很好,今天我们来试一下用LSTM进行上涨预测。请注意,这只是一次具有学习性质的尝试,我也不会用这个模型进行实质性的操作。(以下的“天”指交易日)

如何提取上涨特征?

单纯使用开盘价、收盘价的上涨特征是毫无意义的,因为这样的特征不明显,和赌博没有区别。研究历史日线数据时,我们应该让模型学习到某一天之后的x天上涨y%的原因,这样才能使用当前交易日的数据预测未来x天是否会上涨。

然而这个原因是比较复杂的,当前行情、财务报告、市场情绪等各方面都对其有影响。在我们这次实验中,我们使用下方两个表格的指标进行训练,除了股票代码编号和该交易日日期,其余全部参与训练。为了简化问题,我们将是否上涨视为二分类问题。

选取标准:若自当前交易日起未来十天内,该股票平均上涨大于4%,则将当日以下指标数据(合并为一条,以空格区分开)纳入上涨训练集。否则纳入不上涨训练集。

每日行情:

  • open 开盘价
  • high 最高价
  • low 最低价
  • close 收盘价
  • pre_close 昨收价
  • pre2_close 2天前收盘价
  • pre3_close 3天前收盘价
  • pre4_close 4天前收盘价
  • pre5_close 5天前收盘价
  • change 涨跌额
  • pct_chg 涨跌幅
  • vol 成交量 (手)
  • amount
  • 成交额 (千元)

每日基本面指标:

  • turnover_rate 换手率(%)
  • turnover_rate_f 换手率(自由流通股)
  • volume_ratio 量比
  • pe 市盈率(总市值/净利润)
  • pe_ttm 市盈率(TTM)
  • pb 市净率(总市值/净资产)
  • ps 市销率
  • ps_ttm 市销率(TTM)
  • total_share 总股本 (万股)
  • float_share 流通股本 (万股)
  • free_share 自由流通股本 (万)
  • total_mv 总市值 (万元)
  • circ_mv 流通市值(万元)

随机提取25000条上涨训练集和35000条不上涨训练集进行训练,以空格隔开相关数据,如下:

格式

训练后各随机提取1000条上涨/不上涨测试集进行测试,结果如下:

测试结果

虽然召回率很低,但是预测上涨的准确率为0.684,这是可以接受的水平。也就是说,只要该模型预测要上涨的股票,其都有68%的可能性上涨。

检验测试结果:

603214.SH,2019-02-25,

X=[3.24700e+01 3.38900e+01 3.20500e+01 3.36900e+01 3.24700e+01 3.11800e+01

2.98400e+01 3.13900e+01 3.16500e+01 1.22000e+00 3.76000e+00 1.10053e+04

3.67124e+04 4.40210e+00 4.40210e+00 1.15000e+00 5.98774e+01 5.40339e+01

5.39450e+00 7.98970e+00 7.96910e+00 1.00000e+04 2.50000e+03 2.50000e+03

3.36900e+05 8.42250e+04], Predicted=1, real=1

2019-02-25十个交易日后是2019-03-11,未来平均收盘价相较2019-02-25的收盘价涨4%以上,确实预测成功。

K线图

类似的还有

601111.SH, 2019-03-28

603909.SH, 2016-11-01

600781.SH, 2018-10-17

等等,大家可以自行校验。

当然,模型的准确性还可以进一步提高,比如删除某些无效指标,或增加一些强指标(比如特朗普发送关于中文的推特时间离该交易日的距离等)。总之,这个模型还可以进一步进行研究。

即便如此,这些模型最多也只能作为投资的参考,最重要的还是投资人的经验。

Add comment