博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
股票涨跌预测方法之三:建立模型并训练
阅读量:5043 次
发布时间:2019-06-12

本文共 2530 字,大约阅读时间需要 8 分钟。

前一阵子在同学的鼓动下,花了一个多月研究了股票行情的预测方法,熟悉了常见的炒股术语及技术指标,现总结如下,纯属兴趣,如果想依照本文的方法来短线操作获利,请绕道。

         研究的第三步就是建立神经网络预测模型了,还是使用keras来搭建,使用简单的3层全连接层做实验,输出就是根据第二天的涨跌幅分为5类:涨(范围[0.01,])、微涨(范围[0.003,0.01])、平(范围[-0.003,0.003])、微跌(范围[-0.01,-0.003])、跌(范围[, -0.01]),测试了下这么分,5类概率几乎均等。

         输入选择什么呢?如果直接将最近N天的开盘价、收盘价、交易量等原始值输进去,应该是很难训练的,毕竟不同股票的价格差异较大,同一个股票几年前的价格、交易量跟现在也类似,很难收敛,如果输入上篇文章中的股票技术指标,这些指标又太简单,主要用于绘图让人观察,我们采用了不同天数的收盘价格滑动平均(类似于MACD中的ema计算)、不同天数的收盘意愿滑动平均(类似于CR指标的计算)、不同天数的股票振幅滑动平均、不同天数的交易量滑动平均,注意所有的平均值计算完后还要除以一个基准值,使得每个值都在1.0附近。

 

def GetPara(m, allDate):    if 1:   #简单处理下输入SVM,效果较好          data = []        tmp = avg1(m.close, 32)        data.append(m.close/tmp)        data.append(avg1(m.close, 2)/tmp)        data.append(avg1(m.close, 4)/tmp)        data.append(avg1(m.close, 8)/tmp)        data.append(avg1(m.close, 16)/tmp)                tmp = m.close.copy()        tmp[0] = (m.high[0]+m.low[0])/2        tmp[1:] = (2*m.close[:-1] + m.high[:-1] +m.low[:-1]).values /4        a = m.high - tmp        b = tmp - m.low        data.append(avg1(a, 2)/avg1(b, 2))        data.append(avg1(a, 4)/avg1(b, 2))        data.append(avg1(a, 8)/avg1(b, 2))        data.append(avg1(a, 16)/avg1(b, 2))        data.append(avg1(a, 32)/avg1(b, 2))                tmp = (m.high- m.low)/ ((m.high+ m.low+0.00001)/2)        data.append(tmp)        data.append(avg1(tmp, 2))        data.append(avg1(tmp, 4))        data.append(avg1(tmp, 8))        data.append(avg1(tmp, 16))        data.append(avg1(tmp, 32))            tmp = avg1(m.volume, 32)        data.append(m.volume/tmp)        data.append(avg1(m.volume, 2)/tmp)        data.append(avg1(m.volume, 4)/tmp)        data.append(avg1(m.volume, 8)/tmp)        data.append(avg1(m.volume, 16)/tmp)                data = np.array(data).T        X_train = []        Y_train = []        n2 = 28        for k in range(30, len(tmp)-1):            if allDate[m.date[k-1]] - allDate[m.date[k-n2]] != n2-1:                continue            X_train.append(data[k, :].ravel())                        #v = (m.close[k]-m.close[k-1])/m.close[k-1]                        v = (m.close[k+1]-m.close[k])/m.close[k]            if v>=0.01: tmp=0            elif v>=0.003: tmp=1            elif v>=-0.003: tmp=2            elif v>=-0.01:tmp = 3            else: tmp = 4            Y_train.append(tmp)        return X_train, Y_train

 

 

然后就是建立模型并训练,loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy'],  class_mode='categorical',随机采用10%的数据做验证,经过长时间的等待,结果如下:

     准确率35%左右,嗯,比扔银币的20%好多了。

转载于:https://www.cnblogs.com/zmshy2128/p/7118727.html

你可能感兴趣的文章
Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
wepy的使用
查看>>
Maven中的SnapShot版本和Release版本
查看>>
淘宝技术发展
查看>>
am335x ar8031 双网口配置记录
查看>>
nodejs之入门
查看>>
数值函数ROUND(四舍五入),TRUNC(不四舍五入),MOD
查看>>
Android端百度地图API使用详解
查看>>
NavigationBar设置
查看>>
IO端口和IO内存的区别及分别使用的函数接口
查看>>
夺命雷公狗---node.js---10之POST的接收
查看>>
自定义的JavaScript定时器
查看>>
smarty对数组进行json_encode
查看>>
Django model 字段类型及选项解析(二)
查看>>
《Linux命令行与shell脚本编程大全》第十四章 处理用户输入
查看>>
189. Rotate Array 从右边开始翻转数组
查看>>
用wget命令下载jdk
查看>>
python之路 Javascript的学习
查看>>