pytorch_LSTM预测股票行情

7.8 用LSTM预测股票行情

7.8.1 导入数据

# Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程
import tushare as ts  
cons = ts.get_apis()
#获取沪深指数(000300)的信息,包括交易日期(datetime)、开盘价(open)、收盘价(close),
#最高价(high)、最低价(low)、成交量(vol)、成交金额(amount)、涨跌幅(p_change)
df = ts.bar('000300', conn=cons, asset='INDEX', start_date='2010-01-01', end_date='')
## 由于接口更新了,需要进行注册才能使用,在官网https://tushare.pro/中进行注册,具体如下,之后使用进行调用,等工作不忙后我会重新修改代码
#token='你的token'
#cons = ts.pro_api(token)
#df = cons.daily(ts_code='000001.SZ', start_date='20220301', end_date='20220317')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本接口即将停止更新,请尽快使用Pro版接口:https://waditu.com/document/2
df = df.dropna()
df.to_csv('sh300.csv')
df.columns
Index(['code', 'open', 'close', 'high', 'low', 'vol', 'amount', 'p_change'], dtype='object')

7.8.2 数据概览

df.describe()
openclosehighlowvolamountp_change
count2751.0000002751.0000002751.0000002751.0000002.751000e+032.751000e+032751.000000
mean3312.7088593315.5001743341.2186803284.8662521.142116e+061.474558e+110.024391
std782.131796782.340288788.871807773.0299558.836562e+051.300980e+111.454752
min2079.8700002086.9700002118.7900002023.1700002.190120e+052.120044e+10-8.750000
25%2611.7600002613.5200002632.3550002591.3750006.063705e+056.562710e+10-0.640000
50%3273.8900003276.6700003304.2600003247.6900008.833630e+051.065559e+110.040000
75%3822.7350003827.8700003847.8550003790.3250001.329321e+061.751813e+110.720000
max5922.0700005807.7200005930.9100005747.6600006.864391e+069.494980e+116.710000

7.8.3 预处理数据

import pandas as pd
import matplotlib.pyplot as plt
import datetime
import torch
import torch.nn as nn
import numpy as np
from torch.utils.data import Dataset, DataLoader
import torchvision
import torchvision.transforms as transforms%matplotlib inline
n = 30
LR = 0.001
EPOCH = 200
batch_size=20
train_end =-600device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
#通过一个序列来生成一个31*(count(*)-train_end)矩阵(用于处理时序的数据)
#其中最后一列维标签数据。就是把当天的前n天作为参数,当天的数据作为label
def generate_data_by_n_days(series, n, index=False):if len(series) <= n:raise Exception("The Length of series is %d, while affect by (n=%d)." % (len(series), n))df = pd.DataFrame()for i in range(n):df['c%d' % i] = series.tolist()[i:-(n - i)]        df['y'] = series.tolist()[n:]if index:df.index = series.index[n:]return df#参数n与上相同。train_end表示的是后面多少个数据作为测试集。
def readData(column='high', n=30, all_too=True, index=False, train_end=-500):df = pd.read_csv("sh300.csv", index_col=0)#以日期为索引df.index = list(map(lambda x: datetime.datetime.strptime(x, "%Y-%m-%d"), df.index))#获取每天的最高价df_column = df[column].copy()#拆分为训练集和测试集df_column_train, df_column_test = df_column[:train_end], df_column[train_end - n:]#生成训练数据df_generate_train = generate_data_by_n_days(df_column_train, n, index=index)if all_too:return df_generate_train, df_column, df.index.tolist()return df_generate_train

7.8.4 定义模型

class RNN(nn.Module):def __init__(self, input_size):super(RNN, self).__init__()self.rnn = nn.LSTM(input_size=input_size,hidden_size=64,num_layers=1,batch_first=True)self.out = nn.Sequential(nn.Linear(64, 1))def forward(self, x):r_out, (h_n, h_c) = self.rnn(x, None)  #None即隐层状态用0初始化out = self.out(r_out)return outclass mytrainset(Dataset):def __init__(self, data):        self.data, self.label = data[:, :-1].float(), data[:, -1].float()def __getitem__(self, index):return self.data[index], self.label[index]def __len__(self):return len(self.data)

7.8.5 训练模型

from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
# 获取训练数据、原始数据、索引等信息
df, df_all, df_index = readData('high', n=n, train_end=train_end)#可视化原高价数据
df_all = np.array(df_all.tolist())
plt.plot(df_index, df_all, label='real-data')
plt.legend(loc='upper right')  #对数据进行预处理,规范化及转换为Tensor
df_numpy = np.array(df)df_numpy_mean = np.mean(df_numpy)
df_numpy_std = np.std(df_numpy)df_numpy = (df_numpy - df_numpy_mean) / df_numpy_std
df_tensor = torch.Tensor(df_numpy)trainset = mytrainset(df_tensor)
trainloader = DataLoader(trainset, batch_size=batch_size, shuffle=False)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WC61e7BN-1619706519879)(output_16_0.png)]

#记录损失值,并用tensorboardx在web上展示
from tensorboardX import SummaryWriter
writer = SummaryWriter(log_dir='logs')rnn = RNN(n).to(device)
optimizer = torch.optim.Adam(rnn.parameters(), lr=LR)  
loss_func = nn.MSELoss()for step in range(EPOCH):for tx, ty in trainloader:tx=tx.to(device)ty=ty.to(device)#在第1个维度上添加一个维度为1的维度,形状变为[batch,seq_len,input_size]output = rnn(torch.unsqueeze(tx, dim=1)).to(device)loss = loss_func(torch.squeeze(output), ty)optimizer.zero_grad()  loss.backward()  optimizer.step()writer.add_scalar('sh300_loss', loss, step)  
D:\sofewore\anaconda\lib\site-packages\torch\nn\modules\loss.py:432: UserWarning: Using a target size (torch.Size([1])) that is different to the input size (torch.Size([])). This will likely lead to incorrect results due to broadcasting. Please ensure they have the same size.return F.mse_loss(input, target, reduction=self.reduction)

7.8.6 测试模型

generate_data_train = []
generate_data_test = []test_index = len(df_all) + train_enddf_all_normal = (df_all - df_numpy_mean) / df_numpy_std
df_all_normal_tensor = torch.Tensor(df_all_normal)
for i in range(n, len(df_all)):x = df_all_normal_tensor[i - n:i].to(device)#rnn的输入必须是3维,故需添加两个1维的维度,最后成为[1,1,input_size]x = torch.unsqueeze(torch.unsqueeze(x, dim=0), dim=0)y = rnn(x).to(device)if i < test_index:generate_data_train.append(torch.squeeze(y).detach().cpu().numpy() * df_numpy_std + df_numpy_mean)else:generate_data_test.append(torch.squeeze(y).detach().cpu().numpy() * df_numpy_std + df_numpy_mean)
plt.plot(df_index[n:train_end], generate_data_train, label='generate_train')
plt.plot(df_index[train_end:], generate_data_test, label='generate_test')
plt.plot(df_index[train_end:], df_all[train_end:], label='real-data')
plt.legend()
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ib6LvlGA-1619706519885)(output_19_0.png)]

plt.clf()
plt.plot(df_index[train_end:-500], df_all[train_end:-500], label='real-data')
plt.plot(df_index[train_end:-500], generate_data_test[-600:-500], label='generate_test')
plt.legend()
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-No24KTtM-1619706519889)(output_20_0.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/63478.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何评估券商分析师预测股票涨跌的准确性?

上篇我们已经讲过如何从新浪财经上获取券商分析师的评级数据&#xff0c; 那么我们接下来就可以来分析哪些分析师推的股票比较靠谱哪些分析推荐的股票比较拉跨&#xff1f;&#xff08;注&#xff1a;后来有对分析师收益率排名&#xff0c;如有同名分析师看到&#xff0c;纯属…

python应用(3)svm模型预测股票涨跌

最近接了一个私活&#xff0c;指导学妹完成毕业设计。核心思想就是利用SVM模型来预测股票涨跌&#xff0c;并完成策略构建&#xff0c;自动化选择最优秀的股票进行资产配置。 在做这个项目的过程中&#xff0c;我体会到想成为一个合格的数据分析或者数据挖掘工程师不仅技术要过…

利用随机森林预测股票大盘涨跌

本文仅从实战角度去观察&#xff0c;利用机器学习算法中&#xff0c;随机森林模型预测股票市场指数涨跌的准确率。 适合入门玩家 首先&#xff0c;我们导入所需要的模块 import numpy as np import pandas as pd import talib as ta #金融数据计算 import datetime,pickle …

随机森林——股票涨跌预测模型搭建

多因子模型搭建 1.引入之后需要用到的库 import tushare as ts # 股票基本数据相关库 import numpy as np # 科学计算相关库 import pandas as pd # 科学计算相关库 import talib # 股票衍生变量数据相关库 import matplotlib.pyplot as plt # 引入绘图相关库 from sk…

案例分析:股票涨跌预测

目标和背景 采用逻辑回归方法&#xff0c;使用过去 5 天的收益率 X 来预测未来一天的涨跌 Y&#xff0c; 并依据涨跌概率大小来构建多空投资组合。 解决方案和程序 拟合模型&#xff1a;将其中 450 天数据作为训练样本&#xff0c;拟合一个逻辑回归模型&#xff0c;得 到参数估…

股票预测pythonlstm_LSTM预测股票涨跌--结合技术分析视角(一)

LSTM处理股票数据的一般流程: image.png 2.在先工作的基本思路: (1).为利用沪深300前100天的收盘价预测下一天的收盘价。从结果来看,LSTM对未来20天的预测基本上是对过去100天收盘价变化的趋势的总括,因此最终的预测结果以及回测结果都不是很理想。 之后尝试增加了feature…

基于长短期记忆网络(LSTM)对股票价格的涨跌幅度进行预测

完整代码&#xff1a;https://download.csdn.net/download/qq_38735017/87536579 为对股票价格的涨跌幅度进行预测&#xff0c;本文使用了基于长短期记忆网络(LSTM)的方法。根据股票涨跌幅问题&#xff0c; 通过对股票信息作多值量化分类&#xff0c;将股票预测转化成一个多维函…

R语言逻辑回归Logistic回归分析预测股票涨跌

最近我们被客户要求撰写关于逻辑回归的研究报告&#xff0c;包括一些图形和统计输出。 视频&#xff1a;R语言逻辑回归&#xff08;Logistic回归&#xff09;模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠心病风险实例 &#xff0c;时长06:48 本文回…

预测股票涨跌看什么指标,如何预测明天股票走势

通达信精准预测股价主图指标公式 是不是可以去了未来 如何用公式将当日股票上涨幅度在M-N之间的股票当天及前几天的行情统计出来。 70 如何知道或者预测一个股票次日的开盘价&#xff1f; 。 在短线操作中&#xff0c;对目标个股次日的买入卖出价的测算是很重要的&#xff…

基于支持向量机SVM的沪深300股票预测股票涨跌方向

结果参考:https://www.bilibili.com/video/BV1nY411z7Kk/?spm_id_from=333.999.0.0 附完整代码+数据

以预测股票涨跌案例入门基于SVM的机器学习

SVM是Support Vector Machine的缩写&#xff0c;中文叫支持向量机&#xff0c;通过它可以对样本数据进行分类。以股票为例&#xff0c;SVM能根据若干特征样本数据&#xff0c;把待预测的目标结果划分成“涨”和”跌”两种&#xff0c;从而实现预测股票涨跌的效果。 1 通过简单…

GPT2中文新闻标题生成

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447; 机器学习AI算法工程 公众号&#xff1a;datayx 项目描述 本项目是一个带有超级详细中文注释的基于GPT2模型的新闻标题生成项目。本项目参考了GPT2-Chinese、GPT2-chitchat、CDial-GPT、GPT2等多个GPT…

中文新闻文本标题分类(基于飞桨、Text CNN)

目录 一、设计方案概述 二、具体实现 三、结果及分析 四、总结 一、设计方案概述 主要网络模型设计&#xff1a; 设计所使用网络模型为TextCNN,由于其本身就适用于短中句子&#xff0c;在标题分类这一方面应该能发挥其优势。 TextCNN是Yoon Kim在2014年提出的模型&#xff…

“无法登陆到你的账户”的问题解决方案

电脑打开后&#xff0c;winR打开命令窗口 输入&#xff1a;netplwiz 点击添加 ​​​​​​​点击添加方框内 点击本地账户 输入你要创建的账号那些&#xff1a; 我当时已经创建好了&#xff0c;就是user. 然后需要将该用户设置为管理员权限即可。 重回回到&#xff0c;此时你…

聚观早报 | 美国又一家银行要暴雷;腾讯T13技术黄希彤被曝遭裁员

今日要闻&#xff1a;暴跌 62%&#xff01;美国又一家银行要暴雷&#xff1b;三星上半年量产第三代 4nm 工艺&#xff1b;腾讯T13技术大佬黄希彤被曝遭裁员&#xff1b;华为 P60 系列将于 3 月 23 日发布&#xff1b;苹果公司CEO库克减薪40% 暴跌 62%&#xff01;美国又一家银…

蓝筹股连环爆雷!这些蓝筹股哪些最容易爆雷?(最全名单)

幸福的股民总是相似的&#xff0c;不幸的股民去而各有各的不幸。天雷滚滚的2019年报季尚不去不远&#xff0c;不少股民们尚未从那场暗雷中疗伤正骨&#xff0c;2020年中报的雷声又开始拉响。 7月14日&#xff0c;有着“药中茅台”之称的东阿阿胶半年度业绩公布&#xff0c;作为…

我问自己代言,甄嬛篇

你只看到本宫的寿康宫 却没看到本宫的凌云峰 你有你的气度 本宫有本宫的本事 你嘲笑本宫菀菀类卿 本宫可怜你留得住人留不住心 你可以轻视本宫的存在 本宫会让你见识糙米薏仁汤的口感 回宫 注定是一段孤独的旅程 路上少不了三姑六婆 但 那又怎样&#xff1f;即使是滑胎 也要滑的…

淘宝618每日一猜6月6日答案-甄嬛在横店哪里参加的选秀?

淘宝6月6日每日一猜答案是什么&#xff1f;&#xff0c;接下来也会给大家来介绍一下6月6日淘宝大赢家每日一猜的答案。 淘宝每日一猜6月6日答案分享 活动问题&#xff1a;甄嬛在横店哪里参加的选秀 活动答案&#xff1a;【交泰殿】 还有打开手机淘宝&#xff0c;搜索“能省就…

吴忠军 - 《甄嬛传》宜修到死都不知道,这个和甄嬛无关的人帮了甄嬛一个大忙...

《甄嬛传》在甄嬛把华妃扳倒后&#xff0c;皇后便甩开手开始对付甄嬛了&#xff0c;比起华妃和甄嬛的眼里皇后是最好对付的&#xff0c;因为皇后手中掌握扳倒甄嬛的法宝&#xff0c;这便是皇后的亲姐姐纯元&#xff0c;皇后设计甄嬛穿错纯元故衣后&#xff0c;不仅是皇上大发雷…