如何预测股票分析--移动平均

近年来,随着全球经济与股市的快速发展,股票投资成为人们最常用的理财方式之一。本文研究的主要目标是利用机器学习技术,应用Python编程语言构建股票预测模型,对我国股票市场进行分析与预测。

今天主要来回顾的是 移动平均 参考机器之心的文章,对代码进行了中文的解释,同时加入了自己的见解

首先来处理一下数据,选用的是来自塔塔饮料的数据集,获取数据的方式可以查看 传送门

#import packages 导入pandas、numpy库

import pandas as pd

import numpy as np

#to plot within notebook 绘图的库,如果不是在jupytor里面运行的话第二行可以省略

import matplotlib.pyplot as plt

%matplotlib inline

#setting figure size设定画布大小

from matplotlib.pylab import rcParams

rcParams[‘figure.figsize‘] = 20,10

#for normalizing data 数据归一化

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler(feature_range=(0, 1))

#read the file 读取文件夹,注意这里的数据集要放在同一个文件夹下面

df = pd.read_csv(‘NSE-TATAGLOBAL(1).csv‘)

#print the head 打印数据前几行

df.head()

可以观察到数据集中有多个变量——日期(date)、开盘价(open)、最高价(high)、最低价(low)、最后交易价(last)、收盘价(close)、总交易额(total_trade_quantity)和营业额(turnover)。

  • 开盘价和收盘价代表股票在某一天交易的起始价和最终价。
  • 最高价、最低价和最后交易价表示当天股票的最高价、最低价和最后交易价格。
  • 交易总量是指当天买卖的股票数量,而营业额(Lacs)是指某一特定公司在某一特定日期的营业额。

要注意的另一点是,市场在周末和公共假期休市。注意上表缺失了一些日期值——2/10/2018、6/10/2018、7/10/2018。其中2号是国庆节,6号和7号是周末。

损益的计算通常由股票当日的收盘价决定,因此我们将收盘价作为目标变量。让我们画出目标变量来理解它在我们的数据集中的分布:

#setting index as date 把date这一列作为索引

df[‘Date‘] = pd.to_datetime(df.Date,format=‘%Y-%m-%d‘)

df.index = df[‘Date‘]

#plot 打印收盘价(按照上面的索引来)

plt.figure(figsize=(16,8))

plt.plot(df[‘Close‘], label=‘Close Price history‘)

接下来探索这些变量,并使用移动平均技术来预测股票的每日收盘价。

移动平均

利用一组先前观测值的平均值作为每天的预期收盘价,移动平均法使用最近的一组数据计算预测值。换句话说,对于后续的每个新的时间,在考虑预测值时,将从集合中删除最早的观测值,并加入上一个观测值。下面是一个简单的图,它将帮助您更清楚地理解这一点。

取黄色的部分的平均值作为黄色的下一个的预测,之后扔掉最开始的,把预测的上,继续预测再下一个区域,可以理解为一个固定的窗口的滑动,每次取窗口内的a v g,预测窗口后一个的值

第一步是创建一个只包含日期和收盘价列的数据框,然后将其拆分为训练集和验证集来验证我们的预测。

#creating dataframe with date and the target variable创建一个只包含日期和收盘价列的数据框

data = df.sort_index(ascending=True, axis=0)

new_data = pd.DataFrame(index=range(0,len(df)),columns=[‘Date‘, ‘Close‘])

# 将所有日期和收盘价列的数据放到一个list中来

for i in range(0,len(data)):

new_data[‘Date‘][i] = data[‘Date‘][i]

new_data[‘Close‘][i] = data[‘Close‘][i]

在将数据分割为训练和验证时,我们不能使用随机分割,因为这会破坏时间顺序。将去年的数据作为验证集,将之前4年的数据作为训练集。

#splitting into train and validation 数据分割为训练和验证集

train = new_data[:987]

valid = new_data[987:]

# 查看数据的情况(规模),和训练本身无关,可不执行

new_data.shape, train.shape, valid.shape

((1235, 2), (987, 2), (248, 2))

# 查看数据的情况(最大最小值),和训练本身无关,可不执行

train[‘Date‘].min(), train[‘Date‘].max(), valid[‘Date‘].min(), valid[‘Date‘].max()

(Timestamp(‘2013-10-08 00:00:00‘),

Timestamp(‘2017-10-06 00:00:00‘),

Timestamp(‘2017-10-09 00:00:00‘),

Timestamp(‘2018-10-08 00:00:00‘))

下一步是为验证集创建预测值,并使用真实值来检查RMSE误差。

#make predictions 为验证集创建预测值

preds = []

for i in range(0,248):

a = train[‘Close‘][len(train)-248+i:].sum() + sum(preds)

b = a/248

preds.append(b)

#calculate rmse 计算RMSE误差。

rms=np.sqrt(np.mean(np.power((np.array(valid[‘Close‘])-preds),2)))

rms

104.51415465984348

仅仅检查RMSE并不能帮助我们评估模型预测效果的。让我们通过做图得到更直观的理解。下面是预测值和实际值的曲线图。

#plot 画出训练的数据(绿线)、预测值(蓝线)与训练集的观测值(橙线)

#对于第一行的作用为什么是0不是很理解,如果有知道的大佬麻烦留言处指点迷津

valid[‘Predictions‘] = 0

valid[‘Predictions‘] = preds

plt.plot(train[‘Close‘])

plt.plot(valid[[‘Close‘, ‘Predictions‘]])

RMSE值接近105,但是结果不是很理想(从图中可以看出)。预测值与训练集的观测值的范围相同(开始有上升趋势,然后缓慢下降)。

参考:https://www.jiqizhixin.com/articles/2019-01-04-16

原文地址:https://www.cnblogs.com/xingnie/p/12232008.html

时间: 2024-10-11 04:10:43

如何预测股票分析--移动平均的相关文章

如何预测股票分析--线性回归

继续上一篇,接下来是股票分析中使用线性回归 在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系.由X可以部分地决定Y的值,但这种决定往往不很确切.常常用来说明这种依赖关系的最简单.直观的例子是体重与身高,用Y表示他的体重.众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y.又如,城市生活用电量Y与气温X有很大的关系.在夏天气温很高或冬天气温很低时,由于室内空调.冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少.但我们不能由气温X

如何预测股票分析--先知(Prophet)

在上一篇中,我们探讨了自动ARIMA,但是好像表现的还是不够完善,接下来看看先知的力量! 先知(Prophet) 有许多时间序列技术可以用在股票预测数据集上,但是大多数技术在拟合模型之前需要大量的数据预处理.Prophet(先知)由Facebook设计和开发,是一个时间序列预测库,不需要数据预处理,并且非常容易实现.先知的输入是一个带有两列的数据框:日期和目标(ds和y). 时间序列预测一直是预测问题中的难点,人们很难找到一个适用场景丰富的通用模型,这是因为现实中每个预测问题的背景知识,例如数据

如何预测股票分析--k-近邻

在上一篇中,我们学习了线性回归,这一次来看看k近邻的表现 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别. #importing libraries #导入相对应的库函数(第一个是用来使用k n n的,第二个是用来网格搜索,第三个用来归一化) from sklearn import neigh

如何预测股票分析--自动ARIMA

在上一篇中,我们发现knn和线性回归一样,表现的不是特别好,来看看时间序列的表现 时间序列预测法其实是一种回归预测方法,属于定量预测,其基本原理是;一方面承认事物发展的延续性,运用过去时间序列的数据进行统计分析,推测出事物的发展趋势:另一方面充分考虑到偶然因素影响而产生的随机性,为了消除随机波动的影响,利用历史数据进行统计分析,并对数据进行适当处理,进行趋势预测. 自动ARIMA ARIMA是一种非常流行的时间序列预测统计方法.ARIMA模型使用过去的值来预测未来的值.ARIMA中有三个重要参数

如何预测股票分析--长短期记忆网络(LSTM)

在上一篇中,我们回顾了先知的方法,但是在这个案例中表现也不是特别突出,今天介绍的是著名的l s t m算法,在时间序列中解决了传统r n n算法梯度消失问题的的它这一次还会有令人杰出的表现吗? 长短期记忆(Long Short-Term Memory) 是具有长期记忆能力的一种时间递归神经网络(Recurrent Neural Network). 其网络结构含有一个或多个具有可遗忘和记忆功能的单元组成.它在1997年被提出用于解决传统RNN(Recurrent Neural Network) 的

数据分析03 /基于pandas进行股票分析

数据分析03 /基于pandas的DateFrame进行股票分析 需求1:对茅台股票分析 使用tushare包获取某股票的历史行情数据. tushare:财经数据接口包 pip install tushare 输出该股票所有收盘比开盘上涨3%以上的日期. 输出该股票所有开盘比前日收盘跌幅超过2%的日期. 假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何? 代码实现: 1.使用tushare包获取某股票的历史行情数据 impor

用贝叶斯判别分析再次预测股票涨跌情况

可以转载,禁止修改.转载请注明作者以及原文链接 注:本文是从贝叶斯分类器的角度来讨论判别分析,有关贝叶斯分类器的概念可参考文末延伸阅读第1-2篇文章.至于Fisher判别分析,未来会连同PCA一同讨论. 判别分析也是一种分类器,与逻辑回归相比,它具有以下优势: 当类别的区分度高的时候,逻辑回归的参数估计不够稳定,它点在线性判别分析中是不存在的: 如果样本量n比较小,而且在每一类响应变量中预测变量X近似服从正态分布,那么线性判别分析比逻辑回归更稳定: 多于两类的分类问题时,线性判别分析更普遍. 贝

逻辑回归模型预测股票涨跌

http://www.cnblogs.com/lafengdatascientist/p/5567038.html 逻辑回归模型预测股票涨跌 逻辑回归是一个分类器,其基本思想可以概括为:对于一个二分类(0~1)问题,若P(Y=1/X)>0.5则归为1类,若P(Y=1/X)<0.5,则归为0类. 一.模型概述 1.Sigmoid函数 为了具象化前文的基本思想,这里介绍Sigmoid函数: 函数图像如下: 红色的线条,即x=0处将Sigmoid曲线分成了两部分:当 x < 0,y <

股票分析之沪深大盘资金分析

沪深的大盘主力资金是大盘指数上涨的动力,在工具中,大盘资金在 股票分析=>股票分析->MyForm中,如下图:     查看截止11月13日的大盘资金情况如下: