我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【数据挖掘】使用移动平均预测道琼斯、纳斯达克、标准普尔指数——Python中的基本数据操作和可视化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【数据挖掘】使用移动平均预测道琼斯、纳斯达克、标准普尔指数——Python中的基本数据操作和可视化

目录

一、介绍

移动平均(Moving Average,MA),⼜称移动平均线,简称均线。作为技术分析中⼀种分析时间序列的常⽤⼯具,常被应⽤于股票价格序列。移动平均可过滤⾼频噪声,反映出中⻓期低频趋势,辅助投资者做出投资判断。

流⾏的移动平均包括简单移动平均、加权移动平均、指数移动平均,更⾼阶的移动平均算法则有分形⾃适应移动平均、赫尔移动平均等。
而本文将使用简单移动平均预测道琼斯、纳斯达克、标准普尔指数

二、下载数据

下载S&P、Dow、Nasdaq数据并将其保存至文件夹内,数据已经打包好了:CSDN下载:琼斯、纳斯达克、标准普尔指数-数据挖掘数据集包
下载后的csv数据如下所示:
在这里插入图片描述

三、获取数据

获取数据我们使用pandas的read_csv函数,如:data = pd.read_csv('S&P.csv',header=0)
pd.read_csv函数用法:pd.read_csv(filepath_or_buffer,header,parse_dates,index_co)l

参数名用法
filepath_or_buffer字符串,或者任何对象的read()方法。这个字符串可以是URL,有效的URL方案包括http、ftp、s3和文件。可以直接写入"文件名.csv"
header将行号用作列名,且是数据的开头

获取数据之后,我们可以打印一下数据:print(data),可以看到已经成功读取到csv数据:
在这里插入图片描述

四、分析数据

在这里插入图片描述

如上图所示,数据格式为csv,其中Date表示开盘的日期,Open表示开盘价,High表示当日最高值,Low表示当日最低值,Close表示收盘价格,Adj Close表示调整后的收盘价格,Volume表示当日成交量。我们需要预测的则是Adj Close这一列
我们可以使用pandas读取csv文件,并打印出Adj Close这一列:

import pandas as pddata = pd.read_csv('DOW.csv',header=0)data = data.applymap(str)print(data['Adj Close'])

结果如下,可以看到在道琼斯数据集中,我们需要预测的Adj Close有798行,type为object,我们要做的就是根据数据,使用移动平均算法,预测后面的指数。
在这里插入图片描述

五、移动平均预测

移动平均值,就是指定时间段,对时间序列数据进行移动计算平均值。移动平均值常常用在计算股票的移动平均线、存货成本等方面。移动平均的本质是⼀种低通滤波。它的⽬的是过滤掉时间序列中的⾼频扰动,保留有⽤的低频趋势。计算公式 S M At = P 1 + P 2 + … + P n n S M A_{t}=\frac{P_{1}+P_{2}+\ldots+P_{n}}{n} SMAt=nP1+P2++Pn
比如若依次得到测定值 x1 、 x2 、 x3 、 x4 、 x5 、 x6 、 x7 . . . x_1、x_2、x_3、x_4、x_5、x_6、x_7... x1x2x3x4x5x6x7...,按顺序取一定个数所做的全部算术平均值就是移动平均值,如 y1 = ( x1 + x2 + x3 ) / 3 、 y2 = ( x2 + x3 + x4 ) / 3.... y_1=(x_1+x_2+x_3)/3、y_2=(x_2+x_3+x_4)/3.... y1=(x1+x2+x3)/3y2=(x2+x3+x4)/3....

panda提供了rolling函数可以用来计算移动平均,使用简单,速度较快:
DataFrame.rolling(window, min_periods=None, freq=None, center=False, win_type=None, on=None, axis=0, closed=None)

参数用法
window表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。
min_periods最少需要有值的观测点的数量,对于int类型,默认与window相等。对于offset类型,默认为1。
freq不用管,从0.18版本中已经被舍弃。
win_type窗口类型,不用管,默认为None一般不特殊指定
on对于DataFrame如果不使用index(索引)作为rolling的列,那么用on来指定使用哪列。
closed定义区间的开闭,不用管,新版本中已经被舍弃
axis方向(轴),一般都是0。
center是否使用window的中间值作为label,默认为false。只能在window是int时使用。

那么我们使用的简单移动平均直接使用:data['ma5'] = data['Adj Close'].rolling(5).mean(),其表示窗口大小为5的移动平均。计算后,使用matplotlib.pyplot进行画图,横轴为时间,竖轴为预测价格,将其在pyplot 图中打印:

import matplotlib.pyplot as pltfig = plt.figure(figsize=(16,9))ax1 = fig.add_subplot(111, ylabel='Price')data.ma5.plot(ax=ax1, color='plum', lw=2., legend=True)

效果如下:
在这里插入图片描述
我们以同样方法画出多个均线并且和原数据real对比:

data['real'] = data['Adj Close'].rolling(1).mean()data['ma5'] = data['Adj Close'].rolling(5).mean()data['ma10'] = data['Adj Close'].rolling(10).mean()data['ma20'] = data['Adj Close'].rolling(20).mean()data['ma30'] = data['Adj Close'].rolling(30).mean()data['ma50'] = data['Adj Close'].rolling(50).mean()data['ma100'] = data['Adj Close'].rolling(100).mean()data['ma200'] = data['Adj Close'].rolling(200).mean()data['ma250'] = data['Adj Close'].rolling(250).mean()data.tail()fig = plt.figure(figsize=(16,9))ax1 = fig.add_subplot(111, ylabel='Price')data.real.plot(ax=ax1, color='black', lw=2., legend=True)data.ma5.plot(ax=ax1, color='plum', lw=2., legend=True)data.ma10.plot(ax=ax1, color='grey', lw=2., legend=True)data.ma20.plot(ax=ax1, color='salmon', lw=2., legend=True)data.ma30.plot(ax=ax1, color='goldenrod', lw=2., legend=True)data.ma50.plot(ax=ax1, color='hotpink', lw=2., legend=True)data.ma100.plot(ax=ax1, color='khaki', lw=2., legend=True)data.ma200.plot(ax=ax1, color='bisque', lw=2., legend=True)data.ma250.plot(ax=ax1, color='skyblue', lw=2., legend=True)plt.grid()plt.show()

在这里插入图片描述

可以发现,移动平均存在一定的滞后性,移动平均以滞后性的代价换来了平滑性,滞后性说明由简单移动平均计算得到的低频趋势对近期的最新数据不够敏感。没有未来数据便是滞后的根本原因。当股价不是随着趋势的变化方向,发生突发的方向趋势,移动平均线行动往往过于迟缓,改变方向速度落后于大趋势。这是一个极大弱点
在股价原有趋势发生反转时,由于MA的追踪趋势的特性,MA的行动往往过于迟缓,掉头速度落后于大趋势。这是MA的一个极大的弱点。等MA发出反转信号时,股价调头的深度已经很大了。

附录DOW在不同MA值下的滑动平均值:
在这里插入图片描述
Nasdaq在不同MA值下的滑动平均值:
在这里插入图片描述
S&P在不同MA值下的滑动平均值:
在这里插入图片描述

六、封装函数

我们将其进行封装如下,代码整体如下:

import matplotlib.pyplot as pltimport pandas as pdimport osdef cal_ma(name,data, day):    data = pd.read_csv(data, header=0)    data = data.applymap(str)    # print(data['Date'])    # print(data['Adj Close'])    day = int(day)    data['ma'+str(day)] = data['Adj Close'].rolling(day).mean()    data.tail()    fig = plt.figure(figsize=(16, 9))    ax1 = fig.add_subplot(111, ylabel='Price')    data['ma'+str(day)].plot(ax=ax1, color='red', lw=2., legend=True)    plt.rcParams['font.sans-serif'] = ['FangSong']    plt.title("MA"+str(day)+" about "+name+" data", fontsize=10, loc='center', color='black')    plt.grid()    plt.show()if __name__ == "__main__":    dataname = input("请输入数据名:")    day = input("请输入MA的天数:")    cal_ma(dataname,dataname+'.csv', day)

完整项目已经打包,免费下载:数据挖掘项目——移动平均预测道琼斯、纳斯达克、标准普尔指数

最后

💖 个人简介:人工智能领域研究生,目前主攻文本生成图像(text to image)方向

📝 关注我:中杯可乐多加冰

🔥 限时免费订阅:文本生成图像T2I专栏

🎉 支持我:点赞👍+收藏⭐️+留言📝

如果这篇文章帮助到你很多,希望能点击下方打赏我一杯可乐!多加冰哦

来源地址:https://blog.csdn.net/air__Heaven/article/details/126359020

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【数据挖掘】使用移动平均预测道琼斯、纳斯达克、标准普尔指数——Python中的基本数据操作和可视化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录