设为首页 加入收藏 用户登录

您目前的位置:主页 > 股票kdj交易系统 >   正文

深度学习LSTM-RNN建立股票预测模型

来源:本站原创发表时间:2019-10-06访问次数:

  硕士结业之前一经对基于LSTM轮回神经汇集的股价预测技巧实行过幼幼的钻研,趁着迩来事业不忙,把个中的一局限实质写下来做以记载。

  此次股票价钱预测模子仅凭据股票的史乘数据来开发,不探求音信面临个股的影响。曾有日本学者应用深度研习的技巧来对当天的信息实质实行理会,以决断其对股价正面性/负面性影响,并将其与股票的史乘数据相勾结,各自给与必然的权重来对今天的股价实行预测[1]。该预测技巧赢得了必然的成绩。

  2.音信的切确性难以保障:互联网上消息传达速率极速,媒体之间时时会展现彼此模仿信息的环境,而这种抄来的信息(非原创信息)往往没有颠末苛肃的审核,存正在着实质乌有,夸张传布的或者性。一朝理会模子错用了某条谣言或确凿性不高的信息,很有或者得出差池的预测结果。

  3.讲话的歧义性:一条信息,其正面性/负面性往往存正在着多种解读。比方“习主席发表中国将裁军30万”——新华逐日电讯2015.09.04。这条信息普通意旨上可能解读为:中间当局深切促进厘革,精兵简政,鼎力进展国防军工事迹。这是一种正面性的解读。而正在应用呆板研习模子时,如古板的巧妙值分化算法(SVD),很有或者会讯断其与“昨年五大行裁人近3万”这种信息拥有较高的一样度,因此将其划分为负面信息。

  4.手艺告竣较为繁杂:这本来是一个特殊要紧的理由啦~,获取精确的消息并实行NLP操作,往往需求颠末以卑劣程:人为浏览网页确定安定牢靠的消息源→计划爬虫告竣有用消息的获取→计划信息裁剪(填充)计划以应对区别长度的信息→人为标注信息的正/负性(也可能用当日股价涨跌来标注)→计划汇集模子→操练及验证模子。个中的每一步都特殊繁难耗时,并且对待个股来说,并不是每天城市有信息展现。

  上面说了这么多,还没有发端对我这个预测模子实行先容,下面发端进入正题。正在决心拂拭音信面的考量之后,我发端思量股价涨跌的本色,我以为股价便是资金博弈结果的显示。此次开发的预测模子,节约的念法是通过深度研习模子来洞悉农家的操作纪律,对拉升、砸盘的环境实行预测。为了到达以下方针,我决心选用以下七个特性来修筑汇集模子,即:

  应用这七个特性来对股票的涨跌环境以及资金的滚动环境开发妥当的模子。别的,其他的目标犹如MACD、均线等也是通过少许根本数据的运算得出,正在修筑模子时并没有将其纳入考量限造。

  通过某股票买卖软件,我取得的源数据约有20来个特性,征求:涨幅、现价、涨跌、买入、卖价、成交量等等。为了取得上面所述的七种特性,挑选出涨跌幅、大单净流入、中单净流入、幼单净流入、换手率这5个特性,并估计设计最上升幅、最高跌幅两个特性。通过下列公式估计设计取得。

  图中的特性递次为:日期,大单净流入,中单净流入,幼单净流入,涨跌幅,最上升幅,最高跌幅,换手率,股价。股价正在这里的用途是拼接操练样本输出时,估计设计多日的总涨跌幅。

  注:正在对源数据实行解决的时间,时时会碰到空值题目:即,有些特性值为0的时间,体系给出的源数据为”-”或”“。需求实行额表解决。(时时碰见新股第一天的涨跌幅为空,或某买卖日大单净流入为空。)

  最先设立一个滑动窗口,本次尝试中将滑动窗口设立为50个买卖日。每一个操练样本由50个持续的买卖日构成,每个买卖日的数据包罗上述的七个特性,即一个50*7的矩阵,而一个样本的输出则是三个买卖日之后的收盘价比较今日(即样本的输入中末了一个买卖日)收盘价的涨跌幅,设立其上限为0.3,下限为-0.3(当然,持续三个涨停板的涨幅会赶上0.3,这里将其团结视作0.3)。之因此采用三个买卖日之后的涨跌幅行为操练样本的输出,是由于我国股市是T+1操作轨则,当日买入不行卖出,预测的稍微靠后少许可留有操作空间;再有便是一天的拉升/砸盘偶尔性太大,不易预测,对稍微恒久一点的情景实行预测有着更高的安定性。

  归一化干系事业:由于神经汇集激活函数的局部,需求正在操练前将数据映照到0~1区间。本次试验中,对近两年的数据,获取其各项特性的最大值与最幼值。设立归一化与函数,正在样本拼接的同时将数据实行归一化。

  设立滑动窗口sample_window = [],每次遍历一行特性数据,归一化后插入窗口末尾,当窗口巨细满50时,估计设计3天后涨跌幅,拼接出一个操练样本,并将sample_window中第一个买卖日的值弹出。

  遍历完所罕见据行后,取得数百个操练样本。并将操练样本转存为numpy.array花式以便利操练。

  注:跳点题目,完全分为除权(涨跌幅赶上10%)与停盘(相邻买卖日间隔赶上10天)。对待跳点题目,咱们决断其是否发作,一朝发作跳点,就清空sample_window,从下一个买卖日从头发端估计设计样本输入,以杜绝样本输入中有跳点数据。

  这里应用keras深度研习框架对模子实行敏捷搭筑。开发Sequential模子,向个中增加LSTM层,设定Dropout为0.2,参加Dense层将其维度纠合为1,激活函数应用relu,牺牲函数定为交叉熵函数。之前也应用过古板的sigmoid行为激活函数,但经尝试感受成绩不如relu。

  最初的时间,我对完全的股票的操练样本堆叠到一块,操练出一个大模子(貌似当时有9万多个操练样本,整整操练了一天=,=),之后对每个股票都实行预测,希图寻找越日涨幅最高的前5支股票。其后浮现根基做不到……每支股票的操作纪律都不相通,应用单个模子无法有用的驾驭个股的涨跌趋向。

  之后,我零丁选了中国软件这个股票(这个票看起来像农家主导的那种),对它零丁实行理会。应用了一年半的买卖数据行为操练集,共有293个操练样本,操练140个epoch。末了操练出模子对测试纠集的60个测试样本实行验证。预测差错如下图。

  个中前40个是操练纠集的样本,咱们应用其输入局限实行预测,浮现预测结果贴合异常严紧;后60个是咱们测试集的样本,我对其预测成绩照样较量合意的,大跌、大涨基础都有预测到,除了第67到第75个点那一波大跌预测的欠好。随后我应用模子实行模仿买卖,设定初始资金两万元,正在预测三天后会上涨时买入,预测三天后会下跌时卖出,均以收盘价为买卖价钱,买入时扣除万分之2.5的佣金。收益弧线如下,蓝色线条代表按模子实行买卖的收益,绿色线条代表平昔持有股票的收益。

  可能看出,模子的预测成绩照样不错的。特别是发端的20多个点,或许较为切确的避开一波回调下跌。

  但我也真切,对模子实行验证的样本数目照样太少,又过了一个月,正在卓殊搜聚了20个买卖日的数据之后,我又对该样本实行了测试。

  从上图可能看出,正在紫色方框圈出来的地方,模子多次预测会有一波涨幅,但紧随着又立马预测股价要跌,对股票实行了扔售,错过了这两次大涨的时机;正在黄色方框圈出的地方,模子两次正在极点做出了切确的预测,精准扔售,躲过两次大跌。

  颠末股票数据的验证,应用LSTM-RNN来对股票实行预测拥有必然的可行性,但成绩不佳(若是成绩好的话我推测也不会分享到网上,本身闷声发大财啦,哈哈~~~)。


Copyright 2017-2023 http://www.aiiiiqi.cn All Rights Reserved.