赞
踩
❖目录
❖摘要 3
一、问题描述 3
┊
1.1 绪论 3
┊
❖1.2 当前股票预测的方法概述 4
❖1.3 本文所使用的模型 5
❖二、数据集说明 5
❖2.1 tushare 库和 Talib 库概要 5
❖2.2 获取历史行情数据 6
装 2.3 实现代码: 7
❖2.4 数据预处理 9
❖2.5 设计代码 10
┊
2.6股票预测使用数据说明 11
┊
2.7特征工程处理 14
┊
订 2.8 输出数据说明 16
❖三、LSTM 模型 16
❖3.1 LSTM 模型概要 16
❖3.2 股票预测模型特征分析 17
❖3.3 本文所使用的 LSTM 结构 18
❖3.4 本次实验所采用的结构图 19
线 四、实验流程和结果 19
❖4.1 数据获取 19
❖4.2 Pytorch 工具集概要 19
❖4.3 Pytorch 指令解析 19
┊
4.4搭建 LSTM 预测模型 21
┊
4.5拟合结果评估方法概要 21
┊
❖4.6 项目附件说明 24
❖4.7 项目使用说明书 24
❖摘要
┊
❖为对股票价格的涨跌幅度进行预测,本文使用了基于长短期记忆网络(LSTM)的方法。根
❖据股票涨跌幅问题, 通过对股票信息作多值量化分类,将股票预测转化成一个多维函数拟
❖合问题。将股票的历史基本交易信息作为特征输入,利用神经网络对其训练,最后对股票的
❖涨跌幅度做分类预测。数据集为代号 510050 的上证股票,实验结果表明该模型在单纯预测
❖涨跌的情况下有比较好的预测效果。
┊
❖一、问题描述
装
┊
1.1 绪论
┊
❖随着我国经济的快速发展,政府、投资机构以及投资者们对股票预测的需求也越来越多。
❖因此, 对股票价格走势的分析成为越来越多研究者关注的课题。但股票价格高度的波动性
❖与不确定性,使其成 为计算机领域和金融领域的一大难题。
订 由于股票本身的波动性和不确定性,其价格是否可以被预测这一议题一直存在着不少争
┊
议。在 1956 年,Fama 提出了“有效市场假说”,指出股票的价格可以立即充分地反映市场
┊
上所有的已知信息,以及那些尚未发生但市场预期会发生的事件对股票价格的影响。这一假
┊
❖说为之后的股票预测工作提供了依据。
❖股票投资通常会选择某一类或某一只股票来作为投资对象,对这一类或一只股票进行预线 测,既可以将整体的股票交易信息作为训练数据,也可以只选择该类或该只股票的交易信息
❖作为训练数据。模型有决策树、LR、支持向量机等传统机器学习的方法,也有深度学习的方
❖法。一种最常见的股票预测方法是自回归模型,然而此类模型通常用于处理线性的稳定数据,
┊
用于处理股价存在着一定的局限性。因此也有人使用非线性模型如支持向量机、马尔可夫模
┊
型等,用以处理股票的非线性特征。
┊
❖考虑到股票数据的时序性,本文选择用对时序序列有较好性能的 LSTM 网络分别对其训
❖练,将训练好的模型用于预测次日收盘价的涨跌幅, 并对结果做对比分析。
┊
from torch.autograd import Variable import torch.nn as nn import torch from LSTMModel import lstm from parser_my import args from dataset import getData def train(): model = lstm(input_size=args.input_size, hidden_size=args.hidden_size, num_layers=args.layers , output_size=1, dropout=args.dropout, batch_first=args.batch_first ) model.to(args.device) criterion = nn.MSELoss() # 定义损失函数 optimizer = torch.optim.Adam(model.parameters(), lr=args.lr) # Adam梯度下降 学习率=0.001 close_max, close_min, train_loader, test_loader = getData(args.corpusFile,args.sequence_length,args.batch_size ) for i in range(args.epochs): total_loss = 0 for idx, (data, label) in enumerate(train_loader): if args.useGPU: data1 = data.squeeze(1).cuda() pred = model(Variable(data1).cuda()) # print(pred.shape) pred = pred[1,:,:] label = label.unsqueeze(1).cuda() # print(label.shape) else: data1 = data.squeeze(1) pred = model(Variable(data1)) pred = pred[1, :, :] label = label.unsqueeze(1) loss = criterion(pred, label) optimizer.zero_grad() loss.backward() optimizer.step() total_loss += loss.item() print(total_loss) if i % 10 == 0: # torch.save(model, args.save_file) torch.save({'state_dict': model.state_dict()}, args.save_file) print('第%d epoch,保存模型' % i) # torch.save(model, args.save_file) torch.save({'state_dict': model.state_dict()}, args.save_file) train()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。