摘要

股票市场的发展对于市场经济具有重要的意义,许多研究者也对股票市场的走势进行预测研究。通过一些技术来预测股票未来的发展趋势,预测其后面涨跌。股票指数是预判经济的一个重要指标,股票指数表示的就是股票市场中总体的发展水平和走向。但由于影响股票指数波动的因素较多。随着金融市场的建立,股票价格的分析和预测问题越来越困难

一、实验数据准备

股票数据数据准备,通过网易api接口获取历史股票数据,核心代码如下:

# 从网易接口获取数据api_adr = 'http://quotes.money.163.com/service/chddata.html'fields = "TOPEN;TCLOSE;HIGH;LOW;VOTURNOVER"# 注意:获取上海证券与深圳证券股票的数据,需要构造不同的URLtag = "0"       # 上海证券if sticker_code in ['000063','000066','000768','000651']:tag = "1"   # 深圳证券params = {'code': tag + sticker_code, 'start': start_date, 'end': end_date, 'fields': fields}r = requests.get(api_adr, params=params)print(r.url)# txt_list = r.text.split('\n')   # r.content二进制数据    r.text 文本数据txt_list = r.content.decode('gbk').split('\n')  # r.content二进制数据    r.text 文本数据txt_list.reverse()txt_list[0] = txt_list[-1]  # 列名替换开头的空字符col_name = "Date,Code,Name,Open,Close,High,Low,Volume\n"txt_list[0] = col_nametxt_list.pop(-1)root = os.path.dirname(os.path.dirname(__file__))dir_path = os.path.join(root,"data")filename = sticker_code + ".csv"print(os.path.join(dir_path,filename))with open(os.path.join(dir_path,filename), "w+",encoding='gbk') as f:for line in txt_list:if line.split(',')[3] != '0.0':     # 去除无效数据f.write(line)def get_all_last_data(start_date): # 得到从start_date至今日 所有最新数据root = os.path.dirname(os.path.dirname(__file__))config_path = os.path.join(root,"config.json")configs = json.load(open(config_path, 'r'))companies = configs['companies']# start_date = '2010-06-21'  # 只能按整年获取至今日数据cur = datetime.now()year = timedelta(days=365)cur = cur + year    # 在当前日期上加一年end_date = cur.strftime("%Y-%m-%d")  # 获取今年最新数据for code, company_name in companies.items():get_domestic_stock(code, start_date, end_date)

在config设置要下载的最新股票数据集:

"companies":{"600718":"drjt","000651":"gldq","600839":"scch","600519":"zhzg","601988":"zgyh","000066": "zgcc","601766":"zgzc","601390":"zgzt","000768":"zhfj","000063":"zxtx"}

单独运行股票文件,就可以获取了:

二、数据预处理

数据预处理就是把数据归一化,方便模型训练收敛,核心代码如下:

    def normalise_windows(self, window_data, single_window=False):# 归一化窗口,基值为0normalised_data = []window_data = [window_data] if single_window else window_datafor window in window_data:normalised_window = []for col_i in range(window.shape[1]):normalised_col = [((float(p) / float(window[0, col_i])) - 1) for p in window[:, col_i]]normalised_window.append(normalised_col)normalised_window = np.array(normalised_window).Tnormalised_data.append(normalised_window)return np.array(normalised_data)

三、构建模型

3.1构建网络模型

构建3维数组,核心代码如下:

# 定义模型结构
class DataLoader():def __init__(self, filename, split, cols,isTest=False):dataframe = pd.read_csv(filename,encoding='gbk')i_split = int(len(dataframe) * split)self.data_train = dataframe.get(cols).values[:i_split]if isTest:self.data_test = dataframe.get(cols).values[0:]else:self.data_test = dataframe.get(cols).values[i_split:]self.len_train = len(self.data_train)self.len_test = len(self.data_test)print(self.len_train,self.len_test)self.len_train_windows = None

3.2定义LSTM模型

"layers": [{"type": "lstm","neurons": 100,"input_timesteps": 49,"input_dim": 1,"return_seq": true},{"type": "dropout","rate": 0.2},{"type": "lstm","neurons": 100,"return_seq": true},{"type": "lstm","neurons": 100,"return_seq": false},{"type": "dropout","rate": 0.2},{"type": "dense","neurons": 1,"activation": "linear"}]

四、输出和预测

#训练模型def train(self, x, y, epochs, batch_size, save_dir):timer = Timer()timer.start()print('[Model] Training Started')print('[Model] %s epochs, %s batch size' % (epochs, batch_size))save_fname = os.path.join(save_dir, '%s-e%s.h5' % (dt.datetime.now().strftime('%d%m%Y-%H%M%S'), str(epochs)))callbacks = [EarlyStopping(monitor='val_loss', patience=2),ModelCheckpoint(filepath=save_fname, monitor='val_loss', save_best_only=True)]self.model.fit(x,y,epochs=epochs,batch_size=batch_size,callbacks=callbacks)history = self.model.fit(x,y,epochs=epochs)plt.plot(history.history['loss'])plt.xlabel('epochs')plt.ylabel('loss')plt.show()#模型保存self.model.save(save_fname)print('[Model] Training Completed. Model saved as %s' % save_fname)timer.stop()

五、系统测试

逐点预测,通过前面50个值,预测第51个值,比较简单,拟合比较好

全序列预测:通过拿前面50个值,预测后面第51-100个值,可以分析出大致的走势

总结

在股市的预测当中,通过技术指标和股票的交易数据来进行股市的预测,本文利用了LSTM神经网络来构建股票的预测模型。该模型可以有效的应对时间序列的预测,解决了传统RNN梯度消失的问题,但本文提出的方法容易出现过离合的现象,如果结合基本面的股票信息,可能会改善本文模型的预测效果,将政策因素和市场环境作为股票的预测模型输入变量,可以优化本文预测模型的预测准确性,投资者可以根据本文的股票预测模型来结合自己的经验进行合理的投资。

可以进来一起学习python,欢迎进来。

基于深度学习股票预测系统相关推荐

  1. 大数据毕设选题 - 深度学习股票预测系统(python Django)

    文章目录 0 前言 1 课题背景 2 实现效果 3 Django框架 4 数据整理 5 模型准备和训练 6 最后 0 前言

  2. “交通·未来”第10期:基于深度学习的动态系统复杂数据建模方法:以铁路列车晚点预测为例...

    前一阵公众号正式推出了"交通·未来"系列线上公益学术活动等你来~, 9月21日晚19:00,我们将迎来活动的第10期. 1.讲座主题 基于深度学习的动态系统复杂数据建模方法:以铁路 ...

  3. 手把手教你:基于LSTM的股票预测系统

    系列文章 第七章.手把手教你:基于深度残差网络(ResNet)的水果分类识别系统 第六章.手把手教你:人脸识别的视频打码 第五章.手把手教你:基于深度学习的滚动轴承故障诊断 目录 系列文章 一.项目简 ...

  4. 论题:基于深度学习的图像识别系统

    本文为论题:基于深度学习的图像识别系统 的编写思路. 目录 摘要: 引言 2.深度学习技术及卷积神经网络原理 3.图像识别系统设计 4.实验评估与改进策略 5.改进策略及未来发展趋势 6.结论 摘要: ...

  5. 基于深度学习的手势识别系统(Python代码,UI界面版)

    摘要:本文详细介绍基于深度学习的手势识别系统,在介绍手势识别算法原理的同时,给出了_P__y__t__h__o__n_的实现代码以及_P__y__Q__t_的UI界面.手势识别采用了基于MediaPi ...

  6. 基于循环神经网络股票预测系统

    循环神经网络-Simple RNN RNN神经网络模型是一种常用的深度神经网络模型,已成功应用于语言识别.文本分类等多个研究领域.相比其他网络模型,RNN最大的优势在于引入了时序与定向循环的概念,能够 ...

  7. 基于深度学习的车辆检测系统(MATLAB代码,含GUI界面)

    摘要:当前深度学习在目标检测领域的影响日益显著,本文主要基于深度学习的目标检测算法实现车辆检测,为大家介绍如何利用MATLAB\color{#4285f4}{M}\color{#ea4335}{A}\ ...

  8. 毕业设计-基于深度学习的图像检索系统

    目录 前言 课题背景和意义 实现技术思路 一.图像检索技术发展 二.图像检索关键技术 三.图像检索系统的特点 四.基于哈希的图像检索技术框架结构 五.总结 实现效果图样例 最后 前言

  9. 基于原始影像数据的深度学习模型预测脑龄可获得可靠的遗传生物标志物

    基于机器学习对神经影像数据进行分析可以准确预测健康人的年龄.预测年龄与健康大脑的年龄的偏差被证明与认知障碍和疾病有关.在这里,我们基于深度学习的预测建模方法,特别是卷积神经网络(CNN),进一步测试了 ...

  10. BERT6mA:使用基于深度学习的方法预测DNA N6甲基腺嘌呤位点

    <BERT6mA: prediction of DNA N6-methyladenine site using deep learning-based approaches> Sho Ts ...

最新文章

  1. 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
  2. 优化自定义函数_玩转reacthooks,自定义hooks设计模式及其实战
  3. 初学者自学python要看什么书-学习Python可以看书籍学习吗?老男孩Python入门课程...
  4. scrapy proxy and user_agent
  5. 更改软件typera的编辑页面背景色
  6. sql注入语句示例大全_SQL Order By语句:示例语法
  7. Java讲课笔记23:Map接口及其实现类
  8. android升级异常,升级AndroidX遇到的问题
  9. 简单maxPooling单层网络句子分类框架和数学理论
  10. python输出结果换行_如果Python中有很多换行,可以选择使用...表示多行内容...
  11. 计算机固态硬盘安装,台式计算机的固态硬盘安装方法和步骤教程
  12. matlab mode函数,matlab常用函数
  13. java 苹果支付(内购)
  14. 机顶盒安装APK方法
  15. 机器人——人类的终极进化
  16. 为什么从此电脑访问不了ftp_ftp无法访问此文件夹怎么解决_ftp文件夹错误无法访问此文件夹如何处理-win7之家...
  17. Reverse-2 - PE文件
  18. threejs 使用陀螺仪实现手机端全景
  19. 张艾迪:全面开放“A计划
  20. 一个优酷会员账号可以登录几台设备

热门文章

  1. 有限状态机代码生成器 FsmCrater
  2. swap分区,lvm的管理及计划任务
  3. 《吐血整理》一篇文章教你学废Git版本管理
  4. 【历史上的今天】10 月 10 日:谷歌推出 Dart 预览版;俄罗斯最大的社交网站上线;上海大众汽车公司诞生
  5. 阿里淘咖啡火了 全球九大无人便利店物联网技术方案详解
  6. NAS存储忘记密码如何解决?
  7. 4.1-4.30推荐文章汇总
  8. 实现Unity2D游戏中跳跃功能和相关问题解决
  9. Python OpenCv 实现实时人脸识别及面部距离测量
  10. ips细胞治疗糖尿病研究进展综述