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

以下是一个基于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!")

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百锦再@新空间代码工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值