如何用Python进行股票预测,数据分析带你从小白开始

2023-11-04

在这里插入图片描述

在开始这个话题之前请先记住一句友情提醒:股市有风险,投资需谨慎

我们写这个文章并不是鼓励大家去入市,小编本人也不买股票。我们只是在探索Python在股票分析和预测上面能发挥什么样的作用!

对于和数据打交道的数据科学家来说,预测证券市场走势远比炒股本身来得更有趣。他们这样做的目的很大程度上不是为了获取物质回报,而是挑战自己!那么在这个起起伏伏,众多因素叠加的证券市场是否存在一种模型可以学习既定的模式至少让我们可以比那些商科毕业的操盘手厉害呢。

言归正传,做数据分析的流程都差不多:数据集的获取和加工、模型的选择和调参、算法编写。

图片

说起数据分析自然离不开“三件套”:Numpy Pandas Matplotlib。我们这就开始我们的股票分析操作吧

环境配置:

图片

代码部分:

图片

导入相关的库并设置参数,这里我们选择特斯拉这支股票

加载数据:

图片

我们获取从2001年开始到现在的股票历史数据

数据分析:

图片

从生成的图中我们可以看到:从图一我们可以看到特斯拉股票在2020年以前变化不大,大概在2020年下半年开始突然暴涨。这个让我们很容易联想到新能源有兴趣或者关注的可以查看当年的新闻报道,也是在这一年特斯拉股票暴涨了743%,同时也让CEO马斯克身价飙涨了1000亿美元。图3的价格变动趋势图也证实了这一点。至于交易量和交易量变动表也是同样如此。这几个图在股票交易软件里面应该都能看得到,但是使用Python的好处是你可以把多只股票放在一起比较来看!

长期投资利润:

图片

时间机器产生利润:

图片

我们直接看结果

图片

我们可以看到在不同的年份买入和卖出所获取利润情况(请注意这一假设的前提是我们有一台机器并且使用它 在我们确切知道股票价格什么时候会涨什么时候会跌的情况下 我们投资了所有的买入和卖出所产生的总利润)

图片

基于模型预测的利润:

我们的思路是这样,我们设计一个模型它会比“长期投资的利润和最大程度设置时间机器的利润”给我们带来更好的结果。我们这样做的原因是因为我们希望确定股票最佳的买入和卖出点。我们绝对不是为了打败长期投资者,我们只是想尽可能的控制交易风险。

图片

图片

从这张图我们可以看到股票价格波动最剧烈的范围,这对于那些长期持有的人来说如果股票一直在上涨那自然无所谓,但是对于那些投资短线的人来说意味着这支股票有更大的操作空间,当然风险也更大!

图片

通过调用我们所编写的类,我们可以看到股票实际变动、模型预测、置信区间之间的关系。这个可以方便我们更好的调整我们的模型进行预测。

股票评估预测:

通过上面的分析我们可以看到我们所采用的测试数据的绝对误差还是挺高的,让我们试着调整下参数以获得更好的测试数据结果图片

从结果上看我们可以看到,采用测试数据平均误差是$228.87而采用我们训练的模型所预测的数据平均误差是$52.24这意味着我们的训练的模型所产生的误差已经得到了很大的优化。此外我们也可以看到在预测股票价格上涨上面准确率为47.95%而在预测股票价格下跌上面的准确率为38.27%

在调整了参数得到的预测结果:

图片

图片

可以看到我们的模型预测的结果大部分都越来越准确,我们通过表格来直观的感受下。

预测类型 模型一 模型二
预测和实际价格差 $907.55 $179.79
平均错误 $17.87 $451.56 $108.10 $301.74
上涨概率 47.95% 45.86%
下跌概率 38.27% 40.34%
实际值/置信区间80% 0.00% 2.37%

在我们不断的优化模型参数并经过一定量的训练之后我们的模型在涨跌趋势的预测上准确率可以进一步提升(有兴趣的可以联系小编获取代码研究几支股票试一试)

在实际测试中我们可以发现如果我们使用我们的模型推荐来买入/卖出 我们在去年可以获得大概23%的利润,实际上这个也是我们从长期投资中获得的回报。但是这个模型的意义在于减少持仓时间来最小化风险。而且股票的分析只是其中一块,最终我们要么通过人去实现买卖要么通过算法自动化帮我们去处理繁琐的买卖,而这正是编程所擅长的,至少在时间上有绝对的优势!

诚然我们用Python来对股票进行数据分析,实现预测和评估的目的主要是展示这种应用能力。就像在疫苗研发、芯片研发、机械制造等领域所能做的一样。都是为了更好的完成工作。

Python经验分享

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。(文末领读者福利
在这里插入图片描述
在这里插入图片描述

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利
在这里插入图片描述

五、Python练习题

检查学习结果。
在这里插入图片描述

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 (文末领取哦
在这里插入图片描述
在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用Python进行股票预测,数据分析带你从小白开始 的相关文章

  • Python 类型提示 Dict 语法错误 可变默认值是不允许的。使用“默认工厂”

    我不知道为什么解释器会抱怨这个类型的字典 对于这两个实例 我得到一个 不允许可变默认值 使用默认工厂 语法错误 我使用的是 python 3 7 3 from dataclasses import dataclass from typing
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 Matplotlib 饼图周围绘制箭头以将每个标签指向圆圈中各自的部分?

    我一直在用 Matplotlib 绘制一些图表 我有一个饼图 想要在图表周围绘制箭头 使每个标签都指向图表 我有一个例子 这是我当前的代码 import matplotlib pyplot as plt plt rcParams font
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐

  • 矿场无盘服务器,七号矿场引领传输新时代

    随着时代的高速发展 Web3 0时代也即将到来 海量数据的产生是必然的 如何确保数据有足够的存储空间 保证数据的安全 这就是未来需要攻克的难点 那么 IPFS网络去中心化存储 信息加密保护 信息不能篡改等技术是现阶段发展所需的技术 With
  • javascript 的筛选方法(多种方法细解)

    filter 是一个数组方法 于创建一个新的数组 其中包含原始数组中满足指定条件的所有元素 返回满足条件的所有内容 放在新的数组里 const numbers 1 2 3 4 5 6 const evenNumbers numbers fi
  • FreeBSD下开启SSH

    ee etc inetd conf 将sshd前边的注释去掉 ee etc ssh sshd config 将PermitRootLogin yes的注释去掉 允许root登陆
  • Stm32学习(七)外部中断

    1 外部中断 1 stm32的每一个IO都可以作为外部中断输入 2 stm32的中断控制器支持19个外部中断 事件请求 线0 15 对应外部IO口的输入中断 线16 连接到PVD输出 线17 连接到RTC闹钟事件 线18 连接到USB唤醒事
  • 操作系统真相还原第0章笔记

    什么是陷入内核 应用程序处于特权级别3 操作系统内核处于特权级0 当用户程序访问系统资源时 无论是硬件 还是内核数据结构 它都需要进行系统调用 这样CPU便进入了内核态 也称为管态 内存访问为什么要分段 编译器在编译程序时 肯定要根据CPU
  • can‘t open file ‘create‘: [Errno 2] No such file or directory问题解决

    这里我提供一个思路吧 我在csdn跟哔哩哔哩都去查来着 因为完全是个小白 真的不会解决 但是他们的答案不能解决我的问题 这个是建立项目时候出的问题 这里创建的不成功 我一共修改了以下几点 有点瞎改 因为不会 1 我使用的是anaconda3
  • antd 验证cron表达式

    项目中使用了quartz 前端需要输入cron表达式并做验证 后端验证很方便 直接用CronExpression isValidExpression cronStr 验证即可 现有网上的资料 要么求大虾做cron的超强正则 要么写了一大堆j
  • pytorch中分析时间开销

    在需要计算代码前使用profiler进行声明 即可输出运行开销 from torch autograd import Variable import torch x Variable torch randn 1 1 requires gra
  • dataframe动态命名(读取不同文件并规律命名)

    读取不同的10个文件到dataframe 并需要分别命名为df 10 df 10 20 以此类推 arr 10 10 20 20 30 30 50 50 70 70 90 90 100 csv paths存储文件位置 定义一个字典d 具体如
  • Vue——vue3报错 <Suspense> slots expect a single root node.

    解决 如果有多组件嵌入时需要给每个组件一个 div 标签
  • springboot最新稳定版本、springcloud对应版本的选择

    1 登录springboot官网 查看当前最稳定版本 https spring io projects spring boot learn 可以看到目前为止最稳定的最新版本是2 4 0 2 登录springcloud官网 查看当前最新的稳定
  • 鸿蒙系统应用开发入门HelloWord(DevEco Studio怎么启动项目以及程序的运行过程)

    使用DevEco Studio新建项目之后 会自带HelloWorld 其他语言需要我们自己写 由于项目使用的模拟器不是在我们本地 而是部署在华为的服务器中 所以我们需要登录华为账号并实名认证才可以使用 登录并启动项目 DevEco Stu
  • JAX-RS (REST Web Services) 2.0 requires Java 1.6 or newer.

    maven 项目出现JAX RS REST Web Services 2 0 requires Java 1 6 or newer 错误 解决办法 这个是eclipse的bug 可见这个链接 https bugs eclipse org b
  • Eclipse中使用SVN

    我的个人博客地址 opiece me 欢迎大家的访问 1 在Eclipse里下载Subclipse插件 方法一 从Eclipse Marketplace里面下载 具体操作 打开Eclipse gt Help gt Eclipse Marke
  • 从0实现基于Linux socket聊天室-增加数据库功能-5

    之前更新过从0实现聊天室的4篇文章 很多粉丝朋友还是觉得内容相对简单 本文一口君会在原有代码基础上增加数据库操作功能 后续文章还会增加文件传输功能 前面文章链接 从0实现基于Linux socket聊天室 多线程服务器模型 1 从0实现基于
  • 卷积的利用

    视频 https www bilibili com video BV1vE411h7W2 from search seid 14520040502419023311 卷积 https www bilibili com video BV1A4
  • Java 8 lambda 函数式编程

    目录 简介 Lambda 表达式 解析1 解析2 自定义 lambda 表达式 例子1 一行输出多个值 例子2 数值计算 例子3 函数中使用自定义lambda表达式 简介 函数式编程就是类似于这样的东西 class MyTest publi
  • 运维攻城狮面试题汇总

    面试题汇总 什么是运维 什么是游戏运维 1 运维是指大型组织已经建立好的网络软硬件的维护 就是要保证业务的上线与运作的正常 在他运转的过程中 对他进行维护 他集合了网络 系统 数据库 开发 安全 监控于一身的技术 运维又包括很多种 有DBA
  • Qt响应按键按下

    1 Qt的键盘事件 void keyReleaseEvent QKeyEvent 按键释放事件 void keyPressEvent QKeyEvent 按键按下事件 2 Qt可以响应的按键事件 单个按键 组合键 例如 crtl c 注意
  • 如何用Python进行股票预测,数据分析带你从小白开始

    在开始这个话题之前请先记住一句友情提醒 股市有风险 投资需谨慎 我们写这个文章并不是鼓励大家去入市 小编本人也不买股票 我们只是在探索Python在股票分析和预测上面能发挥什么样的作用 对于和数据打交道的数据科学家来说 预测证券市场走势远比