Python 实现指定股票三日趋势分析脚本及原理详解

news2024/11/18 6:33:48

以下是一个基于Python的股票三日趋势分析脚本,它能够分析指定股票在三天内的趋势变化情况。脚本主要依赖pandasnumpymatplotlibyfinance等库。分析内容包括收盘价的涨跌趋势、成交量变化,并生成可视化图表来帮助用户更好地理解短期趋势。

在这里插入图片描述

脚本的分析原理

在这里插入图片描述

三日趋势分析主要是基于以下几个原则:

  1. 三日趋势的定义

    • 通过比较三天内的收盘价,判断趋势是上涨、下跌还是横盘:
      • 上涨趋势:若当前日收盘价高于前两日,则为上涨趋势。
      • 下跌趋势:若当前日收盘价低于前两日,则为下跌趋势。
      • 横盘趋势:若当前日收盘价与前两日变化不大,则为横盘趋势。
  2. 成交量的影响

    • 分析成交量在三天内的变化,如果某一天成交量显著放大,则可能暗示趋势可能发生变化,或者该趋势有较强的动量。
  3. 结合技术指标分析

    • 可引入一些短期技术指标,如三日均线或三日相对强弱指数(RSI),来辅助判断当前的三日趋势。

代码实现

在这里插入图片描述

以下是一个基于上述原理的三日趋势分析脚本。该脚本通过yfinance库下载指定股票的历史数据,并通过比较三天内的价格和成交量变化来分析短期趋势,并绘制相应的趋势图表。

# 导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf

# 设定 matplotlib 的风格和字体
plt.style.use('seaborn')
plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 显示负号

# 定义股票三日趋势分析类
class ThreeDayTrendAnalysis:
    def __init__(self, ticker, start_date, end_date):
        """
        初始化股票分析类
        :param ticker: 股票代码,例如 "AAPL"(苹果公司)
        :param start_date: 数据开始日期
        :param end_date: 数据结束日期
        """
        self.ticker = ticker
        self.start_date = start_date
        self.end_date = end_date
        self.data = self.download_data()

    def download_data(self):
        """
        下载指定股票的历史数据
        """
        print(f"正在下载 {self.ticker} 的历史数据...")
        data = yf.download(self.ticker, start=self.start_date, end=self.end_date)
        data.dropna(inplace=True)  # 删除缺失数据
        return data

    def calculate_trend(self):
        """
        计算三日内的涨跌趋势
        """
        # 创建趋势列,用于存储三日趋势
        self.data['Three_Day_Trend'] = np.nan

        # 计算三日趋势:与前两日比较
        for i in range(2, len(self.data)):
            # 当前日收盘价、前一日收盘价、前两日收盘价
            today_close = self.data['Close'].iloc[i]
            day_before_close = self.data['Close'].iloc[i - 1]
            two_days_before_close = self.data['Close'].iloc[i - 2]

            # 判断三日内的价格趋势
            if today_close > day_before_close > two_days_before_close:
                self.data['Three_Day_Trend'].iloc[i] = 1  # 上涨趋势
            elif today_close < day_before_close < two_days_before_close:
                self.data['Three_Day_Trend'].iloc[i] = -1  # 下跌趋势
            else:
                self.data['Three_Day_Trend'].iloc[i] = 0  # 横盘趋势

    def plot_trend(self):
        """
        绘制收盘价及三日趋势图表
        """
        plt.figure(figsize=(14, 8))

        # 绘制收盘价
        plt.plot(self.data.index, self.data['Close'], label='收盘价', color='blue')
        
        # 标记趋势:1为上涨,-1为下跌,0为横盘
        plt.scatter(self.data.index, self.data['Close'], c=self.data['Three_Day_Trend'], 
                    cmap='coolwarm', marker='o', s=50, label='三日趋势')
        
        # 标注趋势文字
        for i in range(len(self.data)):
            if not np.isnan(self.data['Three_Day_Trend'].iloc[i]):
                trend_label = '上涨' if self.data['Three_Day_Trend'].iloc[i] == 1 else (
                    '下跌' if self.data['Three_Day_Trend'].iloc[i] == -1 else '横盘')
                plt.text(self.data.index[i], self.data['Close'].iloc[i], trend_label, fontsize=9, ha='center')

        plt.title(f'{self.ticker} 三日趋势分析')
        plt.xlabel('日期')
        plt.ylabel('收盘价')
        plt.legend()
        plt.grid()
        plt.show()

    def run_analysis(self):
        """
        运行完整的趋势分析,包括下载数据、计算指标和绘图
        """
        print(f"开始分析股票 {self.ticker}{self.start_date}{self.end_date} 的三日趋势。")
        self.calculate_trend()
        self.plot_trend()
        print("分析完成!")

# 使用示例
if __name__ == "__main__":
    # 定义股票代码(例如“MSFT”代表微软)和分析区间
    stock = ThreeDayTrendAnalysis(ticker="AAPL", start_date="2023-01-01", end_date="2023-10-01")
    stock.run_analysis()

代码详解

  1. 类的初始化 (__init__)

    • 初始化类时,传入股票代码、开始和结束日期,并调用download_data()方法下载指定股票的历史数据。
      在这里插入图片描述
  2. 数据下载 (download_data)

    • 使用yfinance库获取指定股票的历史数据,并删除缺失数据。返回的data是一个包含OpenHighLowCloseVolume等字段的DataFrame
  3. 计算三日趋势 (calculate_trend)

    • 使用循环遍历数据,计算三日内的涨跌趋势。通过比较三天内的收盘价,判断是否为上涨、下跌或横盘趋势,并将结果存储在Three_Day_Trend列中。
  4. 绘制趋势图表 (plot_trend)

    • 绘制收盘价和三日趋势图表,并使用不同颜色标记三日趋势(红色表示下跌,蓝色表示上涨)。在趋势点上添加趋势标签,以便更直观地查看。
  5. 运行完整分析 (run_analysis)

    • 调用run_analysis()方法,运行整个分析过程,包括数据下载、趋势计算和图表绘制。

进一步扩展

该三日趋势分析脚本还可以进一步扩展,如:

  • 引入成交量变化分析,判断成交量的放大或缩小是否对趋势有影响。
  • 添加其他短期技术指标,如短期均线、三日RSI、三日布林带等,以辅助分析短期趋势。
  • 结合机器学习模型,预测短期趋势的变化概率。
    在这里插入图片描述

通过这些扩展,可以使分析更加全面和准确,为投资决策提供更多的依据。

//python 因为爱,所以学
print("Hello, Python!")

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇总binder相关一些常见面试题-安卓系统常见面试题

背景&#xff1a; 国庆前有几个学员朋友在群里讨论了几个binder相关的面试题&#xff0c;讨论较为激烈&#xff0c;这里马哥统一整理一下列出来了&#xff0c;并且也补充了几个&#xff0c;大家有兴趣的可以尝试做一下&#xff0c;后续方便每个学员进行查缺补漏。后续会进行整…

三维地图场景学习总结 20241002

1. 学习内容 1.1 cesium 学习 基础教程&#xff1a;提供了cesium的配置方式及简单案例 dvgis&#xff1a;该网址提供了关系cesium的使用案例 1.2 OpenStreetMap 学习 List_of_OSM-based_services&#xff1a;提供了openstreetmap所有相关工具及相关使用案例 1.3 三维场景渲…

生信初学者教程(十一):数据校正

文章目录 介绍加载R包导入数据准备数据ComBatremoveBatchEffectVoom SNM批次效应校正结果比较校正后的结果输出校正后的结果总结介绍 批次效应在生物学数据分析中是一个普遍存在的问题,它指的是由于实验过程中非生物学因素(如样本处理时间、实验条件、测序平台等)的差异,导…

如何使用ssm实现基于HTML的中国传统面食介绍网站的搭建+vue

TOC ssm758基于HTML的中国传统面食介绍网站的搭建vue 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔…

前端框架对比和选择指南

前端框架对比和选择指南 随着 Web 开发技术的快速发展&#xff0c;前端框架已经成为了现代 Web 开发的核心工具之一。它们为开发人员提供了快速构建高效、交互性强的应用的基础。当前流行的前端框架主要包括 React.js、Vue.js 和 Angular.js。在这篇技术博客中&#xff0c;我们…

dubbo微服务

一.启动nacos和redis 1.虚拟机查看是否开启nacos和redis docker ps2.查看是否安装nacos和redis docker ps -a3.启动nacos和redis docker start nacos docker start redis-6379 docker ps二.创建三个idea的maven项目 1.第一个项目dubboapidemo 2.1.1向pom.xml里添加依赖 …

uniapp微信小程序使用ucharts遮挡自定义tabbar的最佳解决方案

如图所示&#xff1a; 使用的ucharts遮挡住了我自定义的tabbar&#xff08;如果不是提需求的有病&#xff0c;我才不会去自定义tabbar&#xff09; 查阅了不少文档&#xff0c;说是开启 ucharts 的 canvas2d 即可&#xff1a; 官网文档地址&#xff1a; uCharts官网 - 秋云…

忽有庞然大物,拔山倒树而来 – 盖RAD Studio 12.2是也

忽有庞然大物&#xff0c;拔山倒树而来 – 盖RAD Studio 12.2是也 不知为什么, 在看到RAD Studio 12.2推出的新功能之后, 脑中出现的第1个反应就是小时候唸的”忽有庞然大物&#xff0c;拔山倒树而来” 这句话, 因为12.2的新功能出乎我意料之外的巨大, 根本不象是一个0.2…

攻防世界---->SignIn

做题笔记。 下载 查壳。 64ida打开。 先运行一下程序&#xff1a; 那么&#xff0c;我们可以直接查找字符串看看&#xff0c;锁定位置。 ### 纠正一下&#xff1a;应该是 n 值 不是d值 n p*q 。。。### ### v6的值 应该就是 我们func(input,49) 进行加密后的值。 (猜测的&a…

《向量数据库指南》——非结构化数据挑战升级:如何高效导入向量数据库?

哈哈,说到 AI 应用中的非结构化数据处理,这可真是个让人又爱又恨的话题啊!今天呢,咱就聊聊这个话题,尤其是那个让人头疼的如何将各种数据源和格式的非结构化数据导入向量数据库的问题。 非结构化数据处理:挑战与复杂性 在 AI 应用领域,非结构化数据无处不在,从社交媒…

【递归】11. leetcode 129 求根节点到叶节点数字之和

1 题目描述 题目链接&#xff1a; 求根节点到叶节点数字之和 2 解答思路 第一步&#xff1a;挖掘出相同的子问题 &#xff08;关系到具体函数头的设计&#xff09; 第二步&#xff1a;只关心具体子问题做了什么 &#xff08;关系到具体函数体怎么写&#xff0c;是一个宏观…

Vue3实现动态菜单功能

文章目录 0.效果演示1.搭建Vue3项目1.1 vite 脚手架创建 Vue3 项目1.2 设置文件别名1.3 安装配置 element-plus1.4 安装配置路由2.登录页面3.后台管理页面3.1 搭建后台框架3.2 左侧菜单栏3.3 header 用户信息3.4 主要内容3.5 footer4.配置静态路由5.记录激活菜单5.1 el-menu 绑…

解析双亲委派机制源码

剖析ClassLoader源码&#xff0c;理解双亲委派机制 双亲委派机制是Java的类加载器在处理加载类的任务时的一种分配机制&#xff0c;可以防止类被重复加载或者出现手写类代替系统类的风险&#xff0c;上篇已经全面介绍了双亲委派机制&#xff0c;本篇我们从ClassLoader抽象类的源…

Ubuntu22.04之测试两个IP地址的网速(二百七十一)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

微信小程序操作蓝牙

主要流程&#xff1a; 1.初始化蓝牙适配器openBluetoothAdapter&#xff0c;如果不成功就onBluetoothAdapterStateChange监听蓝牙适配器状态变化事件 2.startBluetoothDevicesDiscovery开始搜寻附近的蓝牙外围设备 3.onBluetoothDeviceFound监听寻找到新设备的事件&#xff0c;…

制造业该如何应用大数据?

​收到一位朋友私信&#xff0c;提问“制造业该如何应用大数据”&#xff1f;我觉得这个问题非常好&#xff0c;而且这也将是未来机械专业领域的一个重要突破口。 而传统制造企业与计算机、互联网行业的最佳结合点就在这里。 如果你没有真正的去实施过一个企业的信息化项目&a…

【重学 MySQL】四十五、数据库的创建、修改与删除

【重学 MySQL】四十五、数据库的创建、修改与删除 一条数据存储的过程数据输入数据验证数据处理数据存储数据持久化反馈与日志注意事项 标识符命名规则基本规则长度限制保留字与特殊字符命名建议示例 MySQL 中的数据类型创建数据库创建数据库时指定字符集和排序规则 查看数据库…

[Linux]开发环境搭建

RPM和YUM 安装JDK 安装Tomcat 安装IDEA 安装MySql

代码随想录算法训练营Day20 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

目录 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 题目 235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先…

Yocto - 使用Yocto开发嵌入式Linux系统_05 认识Bitbake工具

Meeting the BitBake Tool 通过本章&#xff0c;我们将开始学习 Yocto 项目引擎如何在幕后工作的旅程。正如每一段旅程一样&#xff0c;沟通是至关重要的&#xff0c;因此我们需要理解 Yocto 项目工具所使用的语言&#xff0c;并学习如何充分利用这些工具来实现我们的目标。 Wi…