好用的股票预测八大算法的Python实现

股票预测算法通常涉及时间序列分析、统计学、机器学习和深度学习等多种方法。以下是经典的、常见的十大股票预测算法及其Python实现。这些算法各有优势,可以用于不同的市场预测场景。以下代码实现中,我们将使用yfinance下载数据,并展示各算法的基本使用方法。

1. 移动平均线(Moving Average, MA)

在这里插入图片描述
移动平均线是一种常见的时间序列分析方法,它能够平滑数据波动,反映趋势。

import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf# 下载数据
data = yf.download("AAPL", start="2023-01-01", end="2023-10-01")
data['MA_20'] = data['Close'].rolling(window=20).mean()
data['MA_50'] = data['Close'].rolling(window=50).mean()# 绘图
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['MA_20'], label='20-Day MA', color='orange')
plt.plot(data['MA_50'], label='50-Day MA', color='green')
plt.title('Moving Average (MA) - Apple Stock')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

2. 指数平滑移动平均(Exponential Moving Average, EMA)

在这里插入图片描述

指数平滑移动平均(EMA)比普通移动平均线更加灵敏,可以更好地跟随趋势。

data['EMA_20'] = data['Close'].ewm(span=20, adjust=False).mean()# 绘图
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['EMA_20'], label='20-Day EMA', color='purple')
plt.title('Exponential Moving Average (EMA) - Apple Stock')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

3. 相对强弱指数(Relative Strength Index, RSI)

在这里插入图片描述

相对强弱指数(RSI)是一种衡量股票内部相对强弱的指标,用于判断超买和超卖情况。

import talibdata['RSI_14'] = talib.RSI(data['Close'], timeperiod=14)# 绘图
plt.figure(figsize=(14, 5))
plt.plot(data['RSI_14'], label='14-Day RSI', color='red')
plt.axhline(70, linestyle='--', color='gray')
plt.axhline(30, linestyle='--', color='gray')
plt.title('Relative Strength Index (RSI) - Apple Stock')
plt.xlabel('Date')
plt.ylabel('RSI Value')
plt.legend()
plt.show()

4. 支持向量机(Support Vector Machine, SVM)

在这里插入图片描述

SVM 是一种常见的机器学习分类算法,可以用来预测股票的涨跌。

from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 创建特征数据
data['Return'] = data['Close'].pct_change()
data['Direction'] = np.where(data['Return'] > 0, 1, 0)
data.dropna(inplace=True)# 定义特征和标签
X = data[['Close', 'Volume']]
y = data['Direction']# 数据标准化
scaler = StandardScaler()
X = scaler.fit_transform(X)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 训练 SVM 模型
svm_model = SVC(kernel='linear')
svm_model.fit(X_train, y_train)# 预测结果
predictions = svm_model.predict(X_test)
print(f'SVM 准确率: {svm_model.score(X_test, y_test) * 100:.2f}%')

5. 随机森林(Random Forest)

在这里插入图片描述

随机森林是一种集成学习算法,适用于非线性数据建模。它可以有效地处理分类和回归问题。

from sklearn.ensemble import RandomForestClassifier# 定义特征和标签
X = data[['Close', 'Volume']]
y = data['Direction']# 数据标准化
scaler = StandardScaler()
X = scaler.fit_transform(X)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 训练随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)# 预测结果
predictions = rf_model.predict(X_test)
print(f'随机森林准确率: {rf_model.score(X_test, y_test) * 100:.2f}%')

6. 长短期记忆网络(Long Short-Term Memory, LSTM)

在这里插入图片描述

LSTM 是一种用于时间序列数据的深度学习模型,可以有效捕捉数据中的长期依赖性。

import tensorflow as tf
from sklearn.preprocessing import MinMaxScaler# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data['Close'].values.reshape(-1, 1))# 创建训练和测试数据集
train_data = scaled_data[:int(len(scaled_data) * 0.8)]
test_data = scaled_data[int(len(scaled_data) * 0.8):]# 创建数据集函数
def create_dataset(data, time_step=1):X, y = [], []for i in range(len(data) - time_step - 1):X.append(data[i:(i + time_step), 0])y.append(data[i + time_step, 0])return np.array(X), np.array(y)time_step = 60
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)# 调整输入数据维度为 LSTM 输入
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)# 创建 LSTM 模型
model = tf.keras.Sequential([tf.keras.layers.LSTM(50, return_sequences=True, input_shape=(time_step, 1)),tf.keras.layers.LSTM(50, return_sequences=False),tf.keras.layers.Dense(25),tf.keras.layers.Dense(1)
])# 编译和训练模型
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, y_train, batch_size=1, epochs=1)# 预测
predictions = model.predict(X_test)
predictions = scaler.inverse_transform(predictions)# 绘图
plt.figure(figsize=(14, 7))
plt.plot(scaler.inverse_transform(scaled_data), label='True Price')
plt.plot(range(len(train_data) + time_step + 1, len(scaled_data) - 1), predictions, label='LSTM Predictions', color='orange')
plt.title('LSTM Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Price')
plt.legend()
plt.show()

7. ARIMA(自回归积分滑动平均模型)

在这里插入图片描述

ARIMA 模型是一种时间序列预测方法,常用于预测股价的未来趋势。

from statsmodels.tsa.arima.model import ARIMA# 训练 ARIMA 模型
arima_model = ARIMA(data['Close'], order=(5, 1, 0))
arima_result = arima_model.fit()# 预测未来趋势
forecast = arima_result.forecast(steps=30)# 绘图
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='Close Price')
plt.plot(forecast, label='ARIMA Forecast', color='orange')
plt.title('ARIMA Stock Price Forecast')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

8. Prophetic Time Series Forecasting

在这里插入图片描述

Prophet 是由 Facebook 开发的时间序列预测工具,可以轻松处理趋势、季节性和节假日效应。

from fbprophet import Prophet# 准备数据
prophet_data = data.reset_index()[['Date', 'Close']]
prophet_data.columns = ['ds', 'y']# 创建模型并训练
prophet_model = Prophet()
prophet_model.fit(prophet_data)# 预测未来趋势
future = prophet_model.make_future_dataframe(periods=30)
forecast = prophet_model.predict(future)# 绘图
prophet_model.plot(forecast)
plt.title('Prophet Stock Price Forecast')
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()
//python 因为爱,所以学
print("Hello, Python!")

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

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

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

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

相关文章

关于鸿蒙next 调用系统权限麦克风

使用app的时候都清楚,想使用麦克风、摄像头,存储照片等,都需要调用系统的权限,没有手机操作系统权限你也使用不了app所提供的功能,虽然app可以正常打开,但是你需要的功能是没办法使用的。今天把自己在鸿蒙学…

netty之NettyServer字符串解码器

前言 在实际开发中,server端接收数据后我们希望他是一个字符串或者是一个对象类型,而不是字节码,那么; 在netty中是否可以自动的把接收的Bytebuf数据转String,不需要我手动处理? 答;有&#xff…

OpenGL ES MVP/变换投影矩阵(8)

OpenGL ES MVP/变换投影矩阵(8) 简述 通过前面几节的学习,目前我们已经可以渲染自己想要的图像,也可以通过纹理加载图片进行渲染。接下来我们来学习一下MVP,这里的MVP不是Android应用开发里的框架MVP,而是Model,View…

TCP/UDP初识

TCP是面向连接的、可靠的、基于字节流的传输层协议。 面向连接:一定是一对一连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端…

鸿蒙harmonyos next flutter混合开发之开发package

​​​​​​ 创建 package flutter create --templatepackage mypackage package代码如下: 创建hello_world.dart ///HelloWorld返回hello world 拼接param class HelloWorld {String helloWorld(String param) > "hello world ${param}"…

Java的学习(语法相关)

字符串存储的问题 char 和字符串都是字符的集合,它们之间的确有相似性,但在 Java 中它们有着不同的存储机制和处理方式。让我从 char 和 String 的本质区别入手来解释。 1. char 和 String 的区别 char 是基本类型:char 是 Java 中的基本数据…

现在别买理想L7/L8,问界M8要来暴揍友商了

文 | AUTO芯球 作者 | 雷慢 问界又一重磅炸弹要来了, 它就是问界M8, 来看,M8刚又曝光了大量谍照。 现在我打听的消息是这样的, 11月广州车展亮相预售, 12月底正式上市,25年春节前后开始交付&#xff…

TS(type,属性修饰符,抽象类,interface)一次性全部总结

目录 1.type 1.基本用法 2.联合类型 3.交叉类型 2.属性修饰符 1.public 属性修饰符 属性的简写形式 2.proteced 属性修饰符 3.private 属性修饰符 4.readonly 属性修饰符 3.抽象类 4.interface 1.定义类结构 2.定义对象结构 3.定义函数结构 4.接口之间的继…

客厅落地台灯怎么摆放?五款客厅落地台灯款式分享

客厅落地台灯怎么摆放?客厅落地台灯是提升光线环境在室内光线质量的关键设备。但如果不慎购买到低质量的客厅落地台灯,可能会导致光线效果不佳,进而影响视力健康。因此,挑选一个可靠的品牌至关重要。那么,客厅落地台灯…

数据治理006-数据标准的管理

元数据的分类和标准有哪些? 一、元数据的分类 元数据可以根据其描述的对象和属性不同,被分为不同的类型。以下是几种常见的元数据分类方法: 基于数据的类型:根据数据的类型,元数据可以被分为结构化元数据、非结构化元…

软件测试——Python和UnitTest框架

文章目录 一、软件测试1.测试计划和测试方案1.测试计划(管理类型文档)2.测试方案(技术型文档) 2.非功能测试设计3.测试报告1.核心内容 4.处理测试过程中出现不可复现的bug 二、Python1.常用语法1.切片2.字符串查找方法:find()3.字符串替换方法:replace()…

构建应用层(TCP)自定义协议:深入理解序列化与反序列化技术

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 网络版计算器序列化 和 反序列化重新理解 read、write、recv、send 和 tcp 为什么支持全双工自定义协议期望的报文格式 模板方法模式…

开源大数据框架-Ambari+Bigtop如何写metainfo.xml文件

1.如何一键编译?一键安装?你没看错。 👉👉👉 https://gitee.com/tt-bigdata/ambari-env 你以为跟你闹着玩?人狠话不多🙍‍♂️🙍‍♂️🙍‍♂️,直接上图&a…

国庆普及模拟2总结

目录 题目链接: 官方题解: 概述: 总结反思: 题目 T1: 题目分析: 错误代码: 错因: AC代码: T2: 题目分析: 赛时代码&#xf…

Centos Stream 9备份与恢复、实体小主机安装PVE系统、PVE安装Centos Stream 9

最近折腾小主机,搭建项目环境,记录相关步骤 数据无价,丢失难复 1. Centos Stream 9备份与恢复 1.1 系统备份 root权限用户执行进入根目录: cd /第一种方式备份命令: tar cvpzf backup.tgz / --exclude/proc --exclu…

CSS基础-常见属性

6、CSS三大特性 6.1 层叠性 如果样式发生冲突,则按照优先级进行覆盖。 6.2 继承性 元素自动继承其父元素、祖先元素所设置的某些元素,优先继承较近的元素。 6.3 优先级 6.3.1 简单分级 1、内联样式2、ID选择器3、类选择器/属性选择器4、标签名选择器/…

若无向图G(V,E)中含7个顶点,为保证图G在任何情况下都是连通的,则需要的边数最少是多少?

这乍一看是不是可抽象(迷糊)了,butttt待我小翻译一下。 先举少一点的例子,假如我们有三个点,我给你两条边,那是不是不管咋连都一定一定是连通的。 那我们再进一步,假如四个点呢?我给…

大厂进阶之CSS死磕牢记的7大知识点

本文主要讨论7大CSS知识点,个个都是金刚附体,干货满满: 1、移动端样式适配 2、回流和重绘 3、flex布局 4、BFC 5、CSS垂直居中方法 6、CSS两栏、三栏自适应布局 7、CSS单行、多行文本溢出省略号格式 一、如何做到移动端样式适配 1、媒体查询…

CloudCompare插件编写

预置环境:Windows10GitCMake3.23.3VS2019Qt5.14.2 编译CloudCompare工程 首先克隆CloudCompare工程,注意必须加上--recursive否则无法下载完整代码编译会失败: git clone --recursive https://github.com/CloudCompare/CloudCompare.git这…

鸢尾花书实践和知识记录[编程1-11二维和三维可视化]

作者空间 文章目录 思维导图函数使用 二维可视化方案平面散点图散点图的示例代码1:绘制鸢尾花的散点图代码2Plotly绘制散点图 数据类型和绘图工具的对应 平面等高线代码3生成等高线网格数据 plotly.express关键的绘图函数 Plotly的另一个模块代码4 Plotly生成的 热图…