股票分析,利用线性回归实时预测股价,只需要提供股票代码即可爬取相应股票数据并建模

这里参考了别人的代码,并引用了tushare模块中定义的接口自动获取了依据 股票代码来获取数据
此篇文章提供了
1.一个简单通过接口爬取csv数据的方法
2.一个处理csv数据的简单方法
3.依据数据进行特征提取建立简单的股价预测模型

如下:
使用的话只需要修改对应的股票代码即可
我这里使用的是 300015 爱尔眼科的股票代码


import numpy as np
import pandas as pd  # 数据处理, 读取 CSV 文件
import matplotlib.pyplot as plt
import tushare as ts
from plotly.offline import init_notebook_mode, iplot, iplot_mpl
import plotly.graph_objs as go
from sklearn.linear_model import LinearRegression
from sklearn import preprocessing
import sklearn
# 000001 为平安银行
# 获取股票的数据
# 如果你还没有安装, 可以使用 pip install tushare 安装tushare python包Stock_Code = 300015  #爱尔眼科df = ts.get_hist_data(f'{Stock_Code}')df.to_csv(f'{Stock_Code}.csv')
df = pd.read_csv(f'./{Stock_Code}.csv')print(np.shape(df))
print(df[0:10])
df.head()'''股票数据的特征
*date:日期
*open:开盘价
*high:最高价
*close:收盘价
*low:最低价
*volume:成交量
*price_change:价格变动
*p_change:涨跌幅
*ma5:5
日均价
*ma10:10
日均价
*ma20: 20
日均价
*v_ma5: 5
日均量
*v_ma10: 10
日均量
*v_ma20: 20
日均量
'''
本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/document/2
(600, 15)date   open   high  close    low      volume  price_change  p_change  \
0  2022-03-25  30.51  31.22  29.66  29.50   556807.50         -0.85     -2.79   
1  2022-03-24  29.37  31.00  30.51  29.17   734351.69          0.78      2.62   
2  2022-03-23  28.28  29.95  29.73  28.04   712581.62          1.70      6.07   
3  2022-03-22  28.20  28.64  28.03  27.95   327752.81         -0.46     -1.61   
4  2022-03-21  28.83  28.90  28.49  28.11   400047.69         -0.12     -0.42   
5  2022-03-18  29.01  29.19  28.61  27.91   782520.00         -0.84     -2.85   
6  2022-03-17  28.00  30.44  29.45  28.00  1401702.38          2.18      7.99   
7  2022-03-16  26.84  27.38  27.27  25.28  1626294.12          0.33      1.23   
8  2022-03-15  30.00  30.70  26.94  25.02  1815843.62         -3.47    -11.41   
9  2022-03-14  31.87  32.20  30.41  30.10   518120.59         -2.09     -6.43   ma5    ma10    ma20       v_ma5     v_ma10     v_ma20  turnover  
0  29.284  28.910  31.459   546308.26  887602.20  633485.26      1.25  
1  29.074  29.194  31.745   591450.76  863570.32  639080.99      1.65  
2  28.862  29.347  31.892   724920.90  827310.41  621764.07      1.60  
3  28.370  29.530  32.132   907663.40  806734.83  599018.34      0.74  
4  28.152  30.028  32.434  1205281.56  814264.94  595898.22      0.90  
5  28.536  30.444  32.735  1228896.14  827720.85  589260.22      1.76  
6  29.314  31.081  33.057  1135689.89  774035.25  559168.78      3.14  
7  29.832  31.657  33.334   929699.92  656945.54  501548.91      3.65  
8  30.690  32.486  33.718   705806.27  518786.47  437122.81      4.07  
9  31.904  33.423  34.131   423248.32  367355.32  385054.37      1.16  '股票数据的特征\n*date:日期\n*open:开盘价\n*high:最高价\n*close:收盘价\n*low:最低价\n*volume:成交量\n*price_change:价格变动\n*p_change:涨跌幅\n*ma5:5\n日均价\n*ma10:10\n日均价\n*ma20: 20\n日均价\n*v_ma5: 5\n日均量\n*v_ma10: 10\n日均量\n*v_ma20: 20\n日均量\n'

将日期的键值的类型从字符串转为日期

df['date'] = pd.to_datetime(df['date'])
categories = {'volume','v_ma5','v_ma10','v_ma20'}
'''数值大小尽量统一化'''
for cate in categories:df[cate] = df[cate]/10000df = df.set_index('date')
# 按照时间升序排列
df.sort_values(by=['date'], inplace=True, ascending=True )
df.tail()
openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20turnover
date
2022-03-2128.8328.9028.4928.1140.004769-0.12-0.4228.15230.02832.434120.52815681.42649459.5898220.90
2022-03-2228.2028.6428.0327.9532.775281-0.46-1.6128.37029.53032.13290.76634080.67348359.9018340.74
2022-03-2328.2829.9529.7328.0471.2581621.706.0728.86229.34731.89272.49209082.73104162.1764071.60
2022-03-2429.3731.0030.5129.1773.4351690.782.6229.07429.19431.74559.14507686.35703263.9080991.65
2022-03-2530.5131.2229.6629.5055.680750-0.85-2.7929.28428.91031.45954.63082688.76022063.3485261.25

检测是否有缺失数据 NaNs

df.dropna(axis=0, inplace=True)#
df.isna().sum(),df.shape
(open            0high            0close           0low             0volume          0price_change    0p_change        0ma5             0ma10            0ma20            0v_ma5           0v_ma10          0v_ma20          0turnover        0dtype: int64,(600, 14))

K线图

Min_date = df.index.min()
Max_date = df.index.max()
print("First date is", Min_date)
print("Last date is", Max_date)
print(Max_date - Min_date)
# %%init_notebook_mode()trace = go.Ohlc(x=df.index, open=df['open'], high=df['high'], low=df['low'], close=df['close'])
data = [trace]iplot(data, filename='simple_ohlc')

运行出来的这个其实是个demo 并不是图片,可以点击查看具体数据
这里为了显示正常只是截图使用
在这里插入图片描述

线性回归


# 创建新的列, 包含预测值, 根据当前的数据预测5天以后的收盘价date = "2022-03-15'"
num = 30  # 预测date  num天后的情况df['label'] = df['close']# 预测值  每天的最终股票价格

丢弃 ‘label’, ‘price_change’, ‘p_change’, 不需要它们做预测

Data = df.drop(['label', 'price_change', 'p_change'], axis=1)
print(Data.tail() )
X = Data.values
X = preprocessing.scale(X)df.dropna(inplace=True)
Target = df.label
y = Target.valuesprint(np.shape(X), np.shape(y))
'''x 特征,y 股价'''
             open   high  close    low     volume     ma5    ma10    ma20  \
date                                                                        
2022-03-21  28.83  28.90  28.49  28.11  40.004769  28.152  30.028  32.434   
2022-03-22  28.20  28.64  28.03  27.95  32.775281  28.370  29.530  32.132   
2022-03-23  28.28  29.95  29.73  28.04  71.258162  28.862  29.347  31.892   
2022-03-24  29.37  31.00  30.51  29.17  73.435169  29.074  29.194  31.745   
2022-03-25  30.51  31.22  29.66  29.50  55.680750  29.284  28.910  31.459   v_ma5     v_ma10     v_ma20  turnover  
date                                                    
2022-03-21  120.528156  81.426494  59.589822      0.90  
2022-03-22   90.766340  80.673483  59.901834      0.74  
2022-03-23   72.492090  82.731041  62.176407      1.60  
2022-03-24   59.145076  86.357032  63.908099      1.65  
2022-03-25   54.630826  88.760220  63.348526      1.25  
(600, 12) (600,)'x 特征,y 股价'
# 将数据分为训练数据和测试数据
X_train, X_test,  y_train ,y_test= sklearn.model_selection.train_test_split(X,y,test_size=0.1,random_state=42)
# %%
lr = LinearRegression()
lr.fit(X_train, y_train)lr.score(X_train,y_train),lr.score(X_test, y_test) # 使用绝对系数 R^2 评估模型
(1.0, 1.0)

做预测

此处使用的特征是最近num天的特征,而目前使用的数据是之前的特征量,由于归一化,
实际上若真要预测,首先要预测这些特征的值随时间变化的概率

X_Predict = X[-num:]
Forecast = lr.predict(X_Predict)
print(Forecast.shape)
print(y[-num:].shape)
print(X_Predict.shape)
(30,)
(30,)
(30, 12)
### 画预测结果# 预测
trange = pd.date_range(f'{date}', periods=num, freq='d')
print(trange)# 产生预测值dataframe
Predict_df = pd.DataFrame(Forecast, index=trange)
Predict_df.columns = ['forecast']
Predict_df# 将预测值添加到原始dataframe
df = pd.read_csv(f'./{Stock_Code}.csv')
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')# 按照时间升序排列
df.sort_values(by=['date'], inplace=True, ascending=True)
df_concat = pd.concat([df, Predict_df], axis=1)df_concat = df_concat[df_concat.index.isin(Predict_df.index)]
df_concat.shape
DatetimeIndex(['2022-03-15', '2022-03-16', '2022-03-17', '2022-03-18','2022-03-19', '2022-03-20', '2022-03-21', '2022-03-22','2022-03-23', '2022-03-24', '2022-03-25', '2022-03-26','2022-03-27', '2022-03-28', '2022-03-29', '2022-03-30','2022-03-31', '2022-04-01', '2022-04-02', '2022-04-03','2022-04-04', '2022-04-05', '2022-04-06', '2022-04-07','2022-04-08', '2022-04-09', '2022-04-10', '2022-04-11','2022-04-12', '2022-04-13'],dtype='datetime64[ns]', freq='D')(30, 15)

画预测值和实际值

df_concat['close'].plot(color='green', linewidth=1)
df_concat['forecast'].plot(color='orange', linewidth=3)
plt.xlabel('Time')
plt.ylabel('Price')
plt.legend()
plt.show()
这个图片之所以不连续,,因为周六,周日,股市不开业

在这里插入图片描述

问题:
预测的特征是按照最近几天的特征来写的
未深入分析会影响到股价的特征

可能的改进措施:
建立13个特征随时间变化的回归模型
再依据由13个模型预测的数值统筹为特征量再预测。
引入股票分析,金融分析的其他方法到机器学习特征中来。
未深入研究了,点到为止。。。

其他文章
Glcm 灰度共生矩阵,保姆级别教程,带源码
SVM支持向量机自动调优,带源码
HOG特征+SVM 进行行人检测,带源码,异常处理
Sober算子边缘检测与Harris角点检测1

参考文献
线性回归-股票预测

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

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

相关文章

大幅提升预测性能,将NSTransformer用于股价预测

写在前面 NSTransformer模型来自NIPS 2022的一篇paper《Non-stationary Transformers: Exploring the Stationarity in Time Series Forecasting》。NSTransformer的目的主要是为了解决其他方法出现过平稳化处理的问题。其通过提出序列平稳化以及去平稳化注意力机制可以使得模型…

利用神经网络实现股票预测 | 附Pyhon代码

神经网络(NeuralNetworks)是一种用训练数据拟合目标函数的黑箱模型,只要数据量足够大,它可以拟合出输入到输出之间的任意函数关系。 本篇教程我们将使用神经网络进行股市的预测,利用数据样本学习,得到相关因…

基于LSTM进行股票趋势预测(tushare)

注: 本文章仅用于算法&工具学习与使用,不具有任何投资建议。 前言: 笔者最近在研究时序趋势预测,而股票天然具有时序性,故使用某一股票数据进行学习。下面将使用代码预测一只股票的每日最高价,当然也可…

Python预测股票走势

最新代码:股票预测配套代码(jupyter版)-机器学习文档类资源-CSDN下载 视频:基于python进行股票趋势预测_哔哩哔哩_bilibili Python的功能可谓相当强大,在很多行业具有相当的优势,这种优势很大程度上来源于各种第三方库。本文介绍…

使用python对股票数据分析预测

安装quandl 安装Pandas_Datareader 1、获取数据 import Pandas_Datareader.data as web import datetime startdatetime.datetime(2018,1,1) enddatetime.datetime.now() SZ000001web.DataReader(000001.SZ,yahoo,start,end) 可以获取最高价,最低价&#xf…

使用新闻预测股票走势-----Kaggle经典ph.D操作分析

General information Two Sigma金融新闻竞赛是一项独特的竞赛:不仅仅是内核竞争,而且我们不应该下载数据,在第二阶段,我们的解决方案将用于预测未来的真实数据。 我将尝试为本次比赛进行广泛的EDA,并尝试找到一些有关…

tushare单个股票过去五年的数据整理与预测

文章目录 前言:1. 导入相关包2. 数据预处理3. 构建模型3. 模型训练4. 检查数据6. 工作中其他常用包记录 前言: %md 在量化投资中,计算收益率是更常见的做法,而不是仅计算股价。计算收益率可以更好地反映投资的回报情况&#xff0c…

使用chatSonic代替chatGPT实现代码智能编写与应答

WriteSonic地址 WriteSonic—其中,提供chatSonic功能app. 注册 使用google账户登录即可. 界面 登录后的界面](https://img-blog.csdnimg.cn/bff0283f8b5f43dd8483caef62784b37.png) 使用 点击上图中的chatSonic链接. 问答窗口 测试智能编码 在文本框中输入…

有了ChatGPT 微软对元宇宙不香了?

押注ChatGPT是微软最近的主要发力点,另一边,它开始向元宇宙业务挥出裁员“大刀”。海外消息称,微软解散了成立仅四个月的工业元宇宙团队,约100名员工被全被解雇。 这只是微软放缓元宇宙战略的长尾动作,此前&#xff0…

ChatGPT 之父推出加密货币钱包;Intel 被曝预算砍掉 10%、裁员 20%;Firefox 113 发布|极客头条...

「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) 一分钟速览新闻点&#…

阿里版ChatGPT突然上线邀测!大模型热战正剧开始,这是第一手体验实录

阿里正式加入ChatGPT战局! 就在刚刚,阿里版类ChatGPT突然官宣正式对外开放企业邀测。 它叫通义千问,由达摩院开发。 嗯,是大模型版十万个为什么那个味儿了。 事实上,早在这个月初,就传出过不少阿里要推出…

python 调试大法

说在前面 我觉得没有什么错误是调试器无法解决的,如果没有,那我再说一遍,如果有,那当我没说 一、抛出异常 可以通过 raise 语句抛出异常,使程序在我们已经知道的缺陷处停下,并进入到 except 语句 raise…

获得北大新材料学院夏令营offer的艰险历程(附面试答辩PPT)

知乎原文获得北大新材料学院夏令营offer的艰难历程(附面试答辩PPT) - 知乎 视频版 05:27 获得北大新材料学院夏令营offer的艰险历程 科大云炬 的视频 698 播放 文字版 相继6月15日以来北大、清华、浙大、西交、复旦、大连理工等10几个夏令营被拒后,我被打击得渐…

概率图模型 - 学习笔记

文章目录 教材与公开课视频概率图模型例子如何理解BP算法?概率图模型相比有监督学习的优势 教材与公开课视频 国外经典教材 英文版:Probabilistic Graphical Models: Principles and Techniques中文版:《概率图模型:原理与技术》…

从文本创建艺术,AI图像生成器的数据集是如何构建的

AIGC系列分享是整数智能推出的一个全新分享系列,在这个系列中,我们将介绍与AIGC概念相关的有趣内容。AIGC系列主要分为以下几篇文章: 被称为下一代风口的AIGC到底是什么? AIGC的数据集构建方案分享系列 从文本创建艺术&#xff0c…

【軟體架構師如何煉成?硬功夫軟技能點滿技能樹】

軟體架構師如何煉成?硬功夫軟技能點滿技能樹 協助企業資訊系統轉型,架構師擔任關鍵角色如何成為軟體架構師技術領域硬技能職場領域軟技能結語 協助企業資訊系統轉型,架構師擔任關鍵角色 「人無遠慮,必有近憂」,套用到…

巧用提示语,说说话就能做个聊天机器人

你好,我是徐文浩。 这一讲,我们来看看Open AI提供的Completion这个API接口。相信已经有不少人试过和ChatGPT聊天了,也有过非常惊艳的体验,特别是让ChatGPT帮我们写各种材料。那么,我们不妨也从这样一个需求开始吧。 …

量化选股——基于动量因子的行业风格轮动策略(第1部分—因子测算)

文章目录 动量因子与行业轮动概述动量因子的理解投资视角下的行业轮动现象投资者视角与奈特不确定性 动量因子在行业风格上的效果测算动量因子效果测算流程概述1. 行业选择:申万一级行业2. 动量因子选择:阿隆指标(Aroon)3. 测算方…

苹果微软等科技巨头紧急叫停,chatgpt翻车了?(文末附联名信)

一、千名大佬集体叫停GPT研发 3月29日,一封联名信刷爆了各大媒体热榜,上面有一千多位大佬签名,其中包括埃隆马斯克、约书亚本吉奥(Yoshua Bengio,2018年图灵奖获得者)和史蒂夫沃兹尼亚克(Steve…

免费!终极ChatGPT提示+Midjourney宝藏神图,1200+图片,震撼人心

新智元报道 编辑:Aeneas 【新智元导读】一位网友花费一周,用从ChatGPT生成的prompt,在Midjourney中生成了一千多张精彩的作品。 Midjourney虽然功能神奇,但在prompt能力平平的人手里,它并不能绽放自己的魔力。 国外的…