我们可以看到网上有很多的用LSTM预测股价的模型,这个模型的真的是像极了财神爷!那么它是真的能够达到一定的准确率吗?或者说它真的能给我们带来收益吗?
我们先来看看LSTM,它的英文全称是Long-Short Term Memory,中文叫长短期记忆。它是基于人的记忆特性来的,我们都知道,我们会忘掉低频发生的事情,而记住高频发生的事情。也就是说,你如果经常干一件事,你肯定记得特别清楚,反之如果一个活,你干的少,你肯定就不熟练,不熟练的意思就是你忘了。从逻辑上讲,它比较适合一些比如写文章啦,对话啦这样的任务。由于它本身的特性,很多人将它用来预测股价,它其实也是一个模式识别,也就是说当它发现股价这样这样这样之后,接下来的股价是这样的。一般大家做的都是Seq-to-Price,也就是用多天的股价来预测接下来一天的股价。那么LSTM到底是怎么样的一个原理呢?其实,说白了就是有一个遗忘机制,不常用的它就忘记了。
那么用LSTM模型的预测我们说到底靠谱不靠谱呢?我先用Keras来给出这个模型。
model = Sequential()
model.add(LSTM(32, input_shape=(30, 5), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(32, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1))
model.add(Activation("relu"))
opt = optimizers.adam(lr=1e-5)
model.compile(loss="mse", optimizer=opt)
这个模型里我们用了2个LSTM层加一个dense层,每个LSTM层均有32个核心。我们用30天的OHLCV数据来预测下一天的Close Price。我们加了dropout来避免过拟合。我们的dense层输出下一天的股价。看到这里大家可能觉得,这么简单的模型,一定不能工作。好的模型和大小关系不大,那么这个模型工作吗?我们接下来一起来看。它的训练也非常简单,2G 显存的显卡足以搞定它的训练。
这里我们就直接来放出它的预测结果,这个结果看起来是不是非常的激动人心,当然这个结果还是在我对数据没有进行归一化处理之前的结果,进行归一化处理之后的预测更加能让你小鹿乱撞,不,是心潮澎湃,感觉人生到达了高潮。看起来预测的曲线和实际的股价拟合的非常好,在这里再告诉大家一个铁律,一旦你发现你的股价和你的预测吻合的非常好,一定是因为你的图太小,时间周期太长,放大了看看就明白了,另外一个好办法就是用回测来验证你收益率有多少。基本上亏损和盈利都是随机的,并且同样的模型放在一支股票上挺好使,另外一只股票上一坨屎。这就是说明模型的泛化能力不行。
那么是否说明LSTM不行呢?非也,是股价预测不行!你仔细思考一下,你的股价如果在28块,你的股价预测基本都在它左右,最后的曲线拟合很好也很正常。但是股价预测用LSTM为什么不工作呢?很简单,LSTM适合来做文本预测,我们汉字常用字才多少个?股价到分的话一块钱都有100个,这是原因之一,其二,“我”,“在”这两个字是有明确的意义和上下文的,它的搭配是固定的那么多个。那么股价10块和10块1毛之间有固定的联系吗?没有!有180-200个股价和10块的组合是有可能的,对应涨停与跌停!但这不是等于猜吗?所以如果我们要去预测股价,我们至少需要对数据进行一些特殊的离散化处理!这部分我们以后再来讨论。
最后,我们的结论很明确了,用文中的LSTM模型结合OHLCV来预测股价是不靠谱的,尽管看起来很美!了解更多深度学习和量化知识,请移步我的星球:AI量化(https://t.zsxq.com/RvfY37y) 星球限时免费,如需加入,请私信我获得免费邀请码!微信公众号:QTechAI