mhy的量化笔记 之 基于LSTM的股市趋势预测

思路

经过一段时间对LSTM的学习,大概了解了LSTM的运作规律。因此尝试运用LSTM预测股市走势。

参考:文章A  文章B

这篇文章是对于该方法的一种初步尝试,然而问题显而易见。

  1. 该算法将指数数据未经任何处理就丢到了LSTM里面,这是“不可能”学习出任何知识的。由于神经网络类机器学习算法是基于线性组合以及非线性函数,因此能够学习出“较大”,“正”,“上升”这一类描述,但无法学习出“区间最大值”,“日线高点出现”,“指数线交叉”。所以我们需要做的应该是将这类信息人工处理后丢入LSTM!

尝试1:上证指数K线4值

直接输入上证K线的open,close,high,low,预测1/5/10日收盘价涨跌.

正确率最后能够到达65%左右。

奇怪的是用GRU和LSTM效果没有显著的差别,感觉远期的信息并没有被学习进去……

全部都学成跌了,当然没有差别咯……算了一下,MCC相关系数仅有0.02,等于随机预测.

由于之前使用的是涨跌幅的log的平方和作为loss函数,可能确实在精度上也会有问题。

是不是将label设为涨跌幅log平方的符号函数会更好一些呢?

最后,模型准确率平均在51%左右,且在训练过程中有时候会跳到49%,相关性也会在有些时候呈现负相关,具体来说就是没有训练处结果。

尝试2:加入更多数据

测试数据

随机选择股票

000416 000996 600096 600291 600695 000416 000996 600096 600291 600695 000951 300143  600155 600354 600785

收集2010-2017的日线数据进行分为训练集与测试集。

指标选择

由最初的四个数据拓展到更多的指标

  • open 开盘价
  • close 收盘价
  • high 最高价
  • low 最低价
  • volume 成交量
  • sh 上证指数
  • sz  深证成指
  • hs300 沪深300
  • cyb 创业板指数
  • ma_5 5日均线
  • ma_10 10日均线
  • ma_20 20日均线
  • ma_60 60日均线
  • macd_dif macd短线
  • macd_ema macd长线
  • macd_macd macd柱状线
  • rsi rsi指数
  • adx adx指数
  • cci cci指数

将指数分组进行归一化,例如将ochl和均线值统一进行归一化,指数独自归一化。

分类函数

之前是将误差平方和作为loss函数,后来发现这在二分类问题中非常的不优美。

对于典型的二分类问题

loss =- (X * log(X’) + (1-X)*log(1-X’))

作为误差函数会更加容易收敛。

分组训练

之前的分组训练是直接取相邻区间,仔细想想确实bug非常严重,本身分batch就是为了防止出现边界数据,导致将梯度影响错误的方向。这里我们改成使用随机batch_size个数据使得训练表现好了一些

优化指标

之前指标发现实际上大盘数据对于一只股票并没有太大的用处,因为我不知道这个股票的类型,因此考虑增加:

  • is_sh 是否为沪市
  • is_sz 是否为深市
  • is_cyz 是否为创业板

至此,已经可以将模型准确率提高至53%

修改分类函数

将之前的二分类改为三分类,其中表示随机波动的分类0产生的所有结果不计入loss函数。准确率提高至55%,不过这个55%的含义与之前不同,这里计算的只是非零分类的准确率。

 

原创文章地址:【mhy的量化笔记 之 基于LSTM的股市趋势预测】,转载时请注明出处mhy12345.xyz

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.