美国大选后,用HMM模型做特斯拉股价波动解析

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:本文主要探讨如何利用高斯隐马尔可夫模型(HMM)预测股票价格,我们将分步进行说明:包括数据准备、特征选择、训练 HMM 模型、最后通过实际案例展示如何使用Python中的hmmlearn库来构建和训练一个高斯HMM,并用该模型对2024年特斯拉股票的价格走势进行了解析。

一、什么是隐马尔可夫模型?

隐马尔可夫模型(Hidden Markov Model)是一种统计模型,用于描述一个由马尔可夫过程支配的系统,该过程具有隐藏(未观察到的)状态。其核心思想是通过观测到的一系列数据(观测序列),来推断出背后的状态序列。目前,隐马尔可夫模型在自然语言处理、语音识别、生物信息学等领域有着广泛的应用。

而在股价预测方面,隐马尔可夫模型允许我们对影响可观测股价走势的潜在市场条件进行建模。每个隐藏状态代表一种市场机制(如牛市、熊市或中性),而可观测变量则来自具体股票的股价走势。

该模型在股价预测领域由三个主要部分组成:

  • 隐藏状态:这代表了无法观察到的市场状态(如看涨、看跌)。
  • 过渡概率:市场制度之间的转换概率。
  • 排放概率:在特定市场制度下观察特定股票价格变动的概率。

特斯拉股票是市场上备受欢迎且波动较大的股票之一,因此成为预测模型的一个有趣选择。投资者常常寻求预测股价走势的方法,以便做出明智的决策,尤其是对于像特斯拉这样高动态的股票。隐马尔可夫模型(HMM)提供了一种概率方法,可以对具有隐藏状态的时间序列数据进行建模,通过识别潜在的市场机制或趋势,使其成为预测股价趋势的合适工具。

二、 HMM 模型在特斯拉股票中的应用

在本次研究中,我们运用高斯隐马尔可夫模型,对2024年1月至11月8日特斯拉股价的波动模式进行了深入挖掘,从而发现隐藏的波动状态。特别是在埃隆·马斯克在激烈的美国大选政治角逐中明确立场,这无疑可能使得特斯拉股票成为市场情绪波动的受益者,这种在年初几乎不可预测的变量,会让我们的尝试变得非常有意思。

为了精确捕捉股价的波动性,我们计算每日价格变化以捕捉波动,而不受绝对价格水平的影响,这样的数据处理为HMM模型提供了绝佳的输入数据。基于假设特斯拉股价走势能够自然地被划分为几种不同的波动机制,我们将模型设定为拥有三个隐藏状态,以描绘这些潜在的波动模式。代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from hmmlearn import hmm
import yfinance as yf# Load historical Tesla data
df = yf.download('TSLA', start="2024-01-01", end="2024-11-08")
# Calculate daily price changes
df['price_change'] = df['Close'].diff().fillna(0)# Prepare the data for the HMM
X = df[['price_change']].values# Build a Gaussian HMM 
model = hmm.GaussianHMM(n_components=10, covariance_type="diag", n_iter=1000)
model.fit(X)# Predict the hidden states (volatility regimes)
hidden_states = model.predict(X)# Plot the results
plt.figure(figsize=(15, 6))
plt.plot(df.index, df['Close'], label='Tesla Close Price')
for i in range(3):mask = (hidden_states == i)plt.scatter(df.index[mask], df['Close'][mask], label=f'State {i}', s=10)# Set the x-axis to display months
plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
plt.xticks(rotation=45)plt.legend()
plt.title('Tesla Close Price vs HMM States')
plt.grid(True)
plt.tight_layout()
plt.show()

输出结果如下图:

在根据不同的隐藏状态对股价进行细分后,我们尝试使用各种状态来预测股价,以确定哪种状态能紧跟实际趋势。进行代码输出:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from hmmlearn import hmm
import yfinance as yf
from sklearn.preprocessing import StandardScaler
import matplotlib.dates as mdates# Step 1: Fetch Reliance stock data from yfinance
symbol = "TSLA"
data = yf.download(symbol, start="2024-01-01", end="2024-11-08")
data['price_change'] = data['Close'].diff().fillna(0)# Step 2: Standardize the price change data to avoid large values
scaler = StandardScaler()
X_scaled = scaler.fit_transform(data[['price_change']])# Step 3: Helper function to train GHMM and predict
def run_ghmm(X, n_hidden_states):model = hmm.GaussianHMM(n_components=n_hidden_states, covariance_type="diag", n_iter=100)model.fit(X)# Predict the hidden stateshidden_states = model.predict(X)# Generate predicted changes based on the hidden statespredicted_changes = model.sample(len(X))[0]# Rescale the predicted changes back to the original scalepredicted_changes_rescaled = scaler.inverse_transform(predicted_changes)# Calculate the predicted prices by applying the predicted changes to the initial pricepredicted_prices = [data['Close'].iloc[0]]  # Start with the first actual pricefor change in predicted_changes_rescaled:predicted_prices.append(predicted_prices[-1] + change[0])return hidden_states, predicted_prices[:-1], model# Step 4: Plotting function to visualize actual vs predicted pricesdef plot_predictions(n_hidden_states, predicted_prices):plt.figure(figsize=(12, 6))plt.plot(data.index, data['Close'], label='Actual Prices', color='blue')plt.plot(data.index, predicted_prices, label=f'Predicted Prices (Hidden States={n_hidden_states})', color='red')plt.title(f'Tesla Stock Prediction with {n_hidden_states} Hidden States')plt.xlabel('Date')plt.ylabel('Price (USD)')# Set the x-axis to display monthsplt.gca().xaxis.set_major_locator(mdates.MonthLocator())plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))plt.xticks(rotation=45)  # Rotate for readabilityplt.legend()plt.grid(True)plt.tight_layout()  plt.show()# Step 5: Run the GHMM with different numbers of hidden states (3, 4, 5, 6)
for n_states in [3, 4, 5, 6]:hidden_states, predicted_prices, model = run_ghmm(X_scaled, n_states)plot_predictions(n_states, predicted_prices)

隐藏状态 3 的结果:

隐藏状态 4 的结果:

隐藏状态 5 的结果:

隐藏状态 6 的结果:

根据结果并结合特斯拉股票的实际走势分析,隐藏状态 6 似乎模拟出了从 1 月到 7 月中旬的趋势。另一方面,状态 4 模拟出了从 7 月中旬到 8 月中旬左右的趋势。因此,根据测试的状态,状态 4 和状态 6 的表现还不错,但都需要进行进一步的微调。

三、观点总结

总而言之,尽管我们在本文中对高斯隐马尔可夫模型的应用为洞察特斯拉股价的波动提供了一种有力的工具。但必须承认,面对特斯拉这样波动性极强的股票,任何模型都可能难以完全捕捉其复杂多变的市场趋势。模型的局限性提醒我们,在解读和利用这些分析结果时,应保持谨慎,并结合其他市场信息和专业判断。

我在前面也写过一篇结合运用两个指标(CPR+SMA 和 STD 过滤)的特斯拉交易策略,有兴趣的朋友可以读一读:《独家!特斯拉股票的专属交易策略》

  • 隐马尔可夫模型是一种适合预测特斯拉股票价格趋势的统计模型,它通过模拟市场的隐藏状态和相应的过渡概率来捕捉股价变动的内在规律。
  • 特斯拉股票的高波动性使其成为研究和预测的有趣案例,尤其是在政治事件如美国大选等可能影响市场情绪的背景下。
  • 通过Python编程和hmmlearn库的实际应用,本文展示了如何实现HMM模型的数据准备、特征选择、模型训练和预测股票走势。
  • 模型的预测结果表明,虽然在某些时间段内模型能够较好地预测股价走势,但整体上仍有改进的空间,特别是在调整隐藏状态数量和微调模型参数方面。

感谢您阅读到最后,希望本文能给您带来新的收获。祝您投资顺利!如果对文中的内容有任何疑问,请给我留言,必复。


本文内容仅仅是技术探讨和学习,并不构成任何投资建议。

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

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

相关文章

解决Conda虚拟环境中pip下载包总是到base环境的问题

conda本地创建的虚拟环境使用pip安装一些包总是安装到base环境中,导致无法正确进行环境隔离,下面是一些解决办法 方法一、使用python -m pip安装 1.1、验证虚拟环境的pip版本是哪个版本,如下所示,本人的demo虚拟环境直接使用pip…

VSCode(四)CMake调试

1. 工具准备 1.1 C环境插件 1.2 CMake插件 2. Cmake工程 2.1 创建项目文件夹 ex:CMAKE_TEST 2.2 创建CMake工程 (shift ctl P), 选择"CMAKE: Quick Start": 2.3 填写project name: (ex: test_cmake) 2.4 选择”Executable“ 项目文件内会自动…

qt-everywher交叉编译e-src-5.15.2

简化配置的方式: 你完全可以通过直接配置 安装目录、编译链 和 目标架构 来完成交叉编译,而不需要修改 mkspecs 配置。以下是如何通过简化配置来进行交叉编译 Qt 的步骤。 准备交叉编译工具链 首先,确保你已经安装了交叉编译工具链&#xff…

kafka-clients之ConsumerConfig

Kafka ConsumerConfig 中的配置项用于定义消费者的行为&#xff0c;如消费方式、偏移管理、组协调等。以下是ConsumerConfig中的关键配置项及其详细说明&#xff1a; 1. bootstrap.servers 类型&#xff1a;List<String>说明&#xff1a;Kafka集群的地址列表&#xff0…

EasyExcel导出列表

通过easyexcel导出列表数据 根据列表内容自适应宽高。 文件名冲突&#xff0c;修改文件名递增设置。 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version&…

ubuntu下的chattts 学习4:Advanced Usage

源码 import ChatTTS import torch import torchaudiochat ChatTTS.Chat() chat.load(compileFalse) # Set to True for better performance ################################### # Sample a speaker from Gaussian.rand_spk chat.sample_random_speaker() print(rand_spk)…

从 HTML 到 CSS:开启网页样式之旅(七)—— CSS浮动

从 HTML 到 CSS&#xff1a;开启网页样式之旅&#xff08;七&#xff09;—— CSS浮动 前言一、浮动的简介1.没有浮动的代码和效果2.加入浮动的代码和效果 二、元素浮动后的特点1. 脱离文档流2.宽高特性&#xff1a;3.共用一行&#xff1a;4.margin 特性&#xff1a;5.区别于行…

微信小程序实现图片拖拽调换位置效果 -- 开箱即用

在编写类似发布朋友圈功能的功能时&#xff0c;需要实现图片的拖拽排序&#xff0c;删除图片等功能。 一、效果展示 **博主的小程序首页也采用了该示例代码&#xff0c;可以在威信中搜索&#xff1a;我的百宝工具箱 二、示例代码 1.1、在自己的小程序中创建组件 1.2、组件…

通过 FRP 实现 P2P 通信:控制端与被控制端配置指南

本文介绍了如何通过 FRP 实现 P2P 通信。FRP&#xff08;Fast Reverse Proxy&#xff09;是一款高效的内网穿透工具&#xff0c;能够帮助用户突破 NAT 和防火墙的限制&#xff0c;将内网服务暴露到公网。通过 P2P 通信方式&#xff0c;FRP 提供了更加高效、低延迟的网络传输方式…

MySQL Explain 指南

MySQL Explain 指南 idselect_typetablepartitionstypepossible_keyskeykeylenrefrowsfilteredExtra 使用 explain 执行 DML 语句时&#xff0c;数据不会发生变化。explain 的结果可能包含多行数据&#xff0c;每行对应一个表。若涉及 union 操作&#xff0c;MySQL 会创建临时表…

如何给 JavaScript 函数添加参数校验?

在 JavaScript 中&#xff0c;对函数参数进行校验是确保代码健壮性和防止错误的重要手段。参数校验不仅能提高代码的可读性&#xff0c;还能帮助捕获潜在的错误。下面&#xff0c;我们将结合实际项目代码示例&#xff0c;讲解如何给 JavaScript 函数添加参数校验。 常见的参数…

php7.4安装pg扩展-contos7

今天接到一个需求&#xff0c;就是需要用thinkphp6链接pg(postgresql)数据库。废话不多说&#xff0c;直接上操作步骤 一、安装依赖 yum install -y sqlite-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-dev…

CentOS7.X 安装RustDesk自建服务器实现远程桌面控制

参照文章CentOS安装RustDesk自建服务器中间总有几个位置出错&#xff0c;经实践做个记录防止遗忘 一 环境&工具准备 1.1 阿里云轻量服务器、Centos7系统、目前最高1.1.11版本rustdesk-server-linux-amd64.zip 1.2 阿里云轻量服务器–安全组–开放端口&#xff1a;TCP(21…

TCP Analysis Flags 之 TCP Spurious Retransmission

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

c# 设计模式--抽象工厂模式 (Abstract Factory)

定义 抽象工厂模式是一种创建型设计模式&#xff0c;它提供了一种创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。抽象工厂模式强调的是对象族的创建&#xff0c;而不是单一对象的创建。 用例写法 假设我们有一个场景&#xff0c;需要根据不同的平…

MySQL 8.0 的主主复制(双向复制)

在 Windows Server 2022 Datacenter 上配置 MySQL 8.0 的主主复制&#xff08;双向复制&#xff09;&#xff0c;步骤与 Linux 类似&#xff0c;但有一些特定的配置和路径需要注意。以下是详细的简化步骤&#xff1a; 1. 使用 root 用户登录 确保你以 root 用户登录到 MySQL …

1. 设计模式的由来

设计模式的灵感来自建筑师亚历山大的“设计套路”&#xff0c;后来被程序员借用&#xff0c;总结出一套“编程武功秘籍”。 20世纪90年代&#xff0c;四位软件工程师&#xff08;被称为“四人帮”&#xff09;——Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides&…

【笔记】Linux中使用到的一些操作

1、查找指定文件并执行删除 find . -name "checkpoint_*_*.pth" -type f -exec rm -f {} \; 2、查看每个文件夹占用空间 du -h --max-depth1 3、移动文件 mv valid.zip ./xg mv 文件 目标位置 4、删除文件夹 rmdir folder rm -r folder # 递归删除文件夹下所有内容…

java如何判断object是基本数据类型还是引用数据类型

如何判断object是基本数据类型还是引用数据类型 ‍ 直接用apache commons下的工具类isPrimitiveOrWrapper即可,没必要造轮子 /*** Returns whether the given {code type} is a primitive or primitive wrapper ({link Boolean}, {link Byte}, {link Character},* {link Shor…

Java线程的interrupt中断、wait-notify/all(源码级分析)

实例方法&#xff1a; interrupt()方法是设置结束阻塞(sleep、wait等)&#xff0c;并且设置中断标记true isInterrupted()判断当前是否中断 静态方法&#xff1a; Thread.interrupted():调用这个方法的线程中断标记位还原为false 那么好&#xff0c;既然上面的方法作用是清…