美国大选后,用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,一经查实,立即删除!

相关文章

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“ 项目文件内会自动…

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

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

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

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

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

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

php7.4安装pg扩展-contos7

今天接到一个需求,就是需要用thinkphp6链接pg(postgresql)数据库。废话不多说,直接上操作步骤 一、安装依赖 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自建服务器中间总有几个位置出错,经实践做个记录防止遗忘 一 环境&工具准备 1.1 阿里云轻量服务器、Centos7系统、目前最高1.1.11版本rustdesk-server-linux-amd64.zip 1.2 阿里云轻量服务器–安全组–开放端口:TCP(21…

TCP Analysis Flags 之 TCP Spurious Retransmission

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

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

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

Burp Suite 实战指南:Proxy 捕获与修改流量、HTTP History 筛选与分析

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

12月第1周AI资讯

阅读时间:3-4min 更新时间:2024.12.2-2024.12.6 目录 OpenAI CEO Sam Altman 预告“12天OpenAI”系列活动 腾讯HunyuanVideo:130亿参数的开源视频生成模型 李飞飞的World Labs发布空间智能技术预览版 中科院联手腾讯打造“AI带货王”AnchorCrafter OpenAI CEO Sam Alt…

从零开始学TiDB(1) 核心组件架构概述

首先TiDB深度兼容MySQL 5.7 1. TiDB Server SQL语句的解析与编译:首先一条SQL语句最先到达的地方是TiDB Server集群,TiDB Server是无状态的,不存储数据,SQL 发过来之后TiDB Server 负责 解析,优化,编译 这…

记录一次使用git无权限的问题排查

正常的配置了公私钥之后,在gitlab中也存储了配对的公钥,但当使用git clone 时,总是报无权限 由于在这台机器中添加了多个公私钥,有点复杂,我们可以使用命令 ssh -vvvT 调试一下 ssh -vvvT yourGitlabAddr

python调用GPT-4o实时音频 Azure OpenAI GPT-4o Audio and /realtime

发现这块网上信息很少,记录一下 微软azure入口 https://learn.microsoft.com/zh-cn/azure/ai-services/openai/realtime-audio-quickstart?pivotsprogramming-language-ai-studio sdk文档 https://github.com/azure-samples/aoai-realtime-audio-sdk?tabread…

fastadmin 后台插件制作方法

目录 一:开发流程 二:开发过程 (一):后台功能开发 (二):功能打包到插件目录 (三):打包插件 (四):安装插件…

Kafka单机及集群部署及基础命令

目录 一、 Kafka介绍1、kafka定义2、传统消息队列应用场景3、kafka特点和优势4、kafka角色介绍5、分区和副本的优势6、kafka 写入消息的流程 二、Kafka单机部署1、基础环境2、iptables -L -n配置3、下载并解压kafka部署包至/usr/local/目录4、修改server.properties5、修改/etc…

Docker部署的gitlab升级的详细步骤(升级到17.6.1版本)

文章目录 一、Gitlab提示升级信息二、老版本的docker运行gitlab命令三、备份老版本Gitlab数据四、确定升级路线五、升级(共分3个版本升级)5.1 升级第一步(17.1.2 > 17.3.7)5.2 升级第二步(17.3.7 > 17.5.3)5.3 升级第三步(17.5.3 > 17.6.1) 六、web端访问gitlab服务 一…

在Java的xml的sql语句里面的某一个参数是list集合的时候

经常在Java里面,遇到这样的问题,sql的一个查询语句,它的某一个参数是一个List集合,然而,在xml.mapper文件里面的时候,不知道如何去组成这个查询语句,不知道兄弟们是否经常忘记如何去写这个语句&…

前端技术(23) : 聊天页面

来源: GPT生成之后微调 效果图 HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>聊天</t…

内存图及其画法

所有的文件都存在硬盘上&#xff0c;首次使用的时候才会进入内存 进程&#xff1a;有自己的Main方法&#xff0c;并且依赖自己Main运行起来的程序。独占一块内存区域&#xff0c;互不干扰。内存中有一个一个的进程。 操作系统只认识c语言。操作系统调度驱动管理硬件&#xff0…

树与图深度优先遍历——acwing

题目一&#xff1a;树的重心 846. 树的重心 - AcWing题库 分析 采用暴力枚举&#xff0c;试探每个点&#xff0c;除去之后&#xff0c;连通分量最大值是多少&#xff0c; 各个点的最大值找最小的 因为可以通过 dfs 来得到 根u以下点数&#xff0c;以及可以求各分树的点数&am…