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

news2024/10/5 20:41:14

股票预测算法通常涉及时间序列分析、统计学、机器学习和深度学习等多种方法。以下是经典的、常见的十大股票预测算法及其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 talib

data['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.coloradmin.cn/o/2190493.html

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

相关文章

如何创建商业博客:一步一步教你从零开始

搭建一个成功的商业博客,不仅可以提升品牌形象,还能吸引更多潜在客户。作为一个在这方面有些经验的人,我来分享一些实用的步骤和建议,希望对你有所帮助。 一、明确你的目标和客户群体 确定目标:首先,你得搞…

Origin图像中插入各种符号以及矩形椭圆等

画各种形状 空白处右击 文字处右击

【RISCV指令集手册】向量扩展v1.0

概述 从rvv 0.9说起 此前写过向量扩展0.9的阅读记录,三年已过,本以为不再参与RVV的相关开发,奈何造化弄人,旧业重操,真就世事难料呀。 总的来说1.0版本相比0.9版本的扩充了较多内容,但大部分为指令功能的…

力扣1~5题

题1(简单). 思路: 因为时间复杂度小于n^2,所以不能双for遍历,怎么优化? 这里采用一个键值对的形式,存储nums离target的间隔和它的下标,只要n,然后再遍历nums有没有刚好是这个距离的就…

cnn突破四(生成卷积核与固定核对比)

cnn突破三中生成四个卷积核,训练6万次,91分,再训练6万次,95分,不是很满意,但又找不到问题点,所以就想了个办法,使用三个固定核,加上三层bpnet神经网络,看看效…

从零开始学cv-16:超像素图像分割

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、超像素图像分割简介二:SLIC超像素图像分割三:Seed超像素分割算法四 :LSC超像素分割 前言 在数字图像处理和计算机视觉领…

2、Redis数据安全性分析

文章目录 一、Redis性能压测脚本介绍二、Redis数据持久化机制详解1、整体介绍Redis的数据持久化机制2、RDB详解3、AOF详解4、混合持久化策略 三、Redis主从复制Replica机制详解**1、Replica是什么?有什么用?****2、如何配置Replica?****3、如…

【AI知识点】正态分布(高斯分布)和中心极限定理(CLT)

正态分布(Normal Distribution)和中心极限定理(Central Limit Theorem, CLT) 是统计学中非常重要的概念,它们广泛应用于概率论、数据分析、机器学习等领域。以下将详细解释这两个概念及其关系。 1. 正态分布&#xff…

【C++】入门基础介绍(上)C++的发展历史与命名空间

文章目录 1. 前言2. C发展历史2. 1 C版本更新特性一览2. 2 关于C23的一个小故事: 3. C的重要性3. 1 编程语言排行榜3. 2 C在工作领域中的应用 4. C学习建议和书籍推荐4. 1 C学习难度4. 2 学习书籍推荐 5. C的第一个程序6. 命名空间6. 1 namespace的价值6. 2 namespace的定义6. …

《CUDA编程》4.CUDA程序的错误检测

在编写CUDA程序时,有的错误在编译过程中被发现,称为编译错误,有的在运行时出现,称为运行时刻错误,本章讨论如何排查运行时刻错误 1 一个检测CUDA运行时错误的宏函数 1.1 编写错误检查宏函数 在《CUDA编程》3.简单CUD…

从0到1:培训机构排课小程序开发笔记一

业务调研 随着人们生活水平的提高,健康意识和学习需求日益增强,私教、健身和培训机构的市场需求迅速增长。高效的排课系统不仅可以提升机构的管理效率,还能提高学员的满意度。解决传统的排课方式存在的时间冲突、信息不对称、人工操作繁琐等…

51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器CO传感器蓝牙LED、蜂鸣器等模块构成。适用于家用天然气泄露报警器、煤气泄露报警器、无线报警等相似项目。 可实现功能: 1、LCD1602实时显示温度和煤气浓度 2、温度传感器DS18B20采集环境温度 3、CO传…

【Mybatis篇】Mybatis的关联映射详细代码带练 (多对多查询、Mybatis缓存机制)

🧸安清h:个人主页 🎥个人专栏:【计算机网络】,【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯一.关联映射概述 &#x1f6a…

【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑

0.前言 P-tuning v2的实验在网上一抓一大把,这里就说一下我在微调过程中遇到的有些bug,踩过的一些坑,在网上找了很久都没有一些好的解决方案,在这里记录一下。 1.下载预训练模型 在官方给出的教程中,并不需要预先将模…

【springboot】简易模块化开发项目整合Swagger2

接上一项目【springboot】简易模块化开发项目整合MyBatis-plus,进行拓展项目 1.新建模块 右键项目→New→Module,新建一个模块 父项目选择fast-demo,命名为fast-demo-config,用于存放所有配置项 添加后,项目结构如图…

X3U·可编程控制器的定位控制

FX3U可编程控制器的定位控制进行说明。 一、概要 FX3U可编程控制器可以向伺服电机、步进电机等输出脉冲信号,从而进行定位控制。 脉冲频率高的时候,电机转得快:脉冲数多的时候,电机转得多。用脉冲频率、脉冲数来设定定位对象…

Linux基本命令及vim应用实训练习

Linux基本命令及vim应用实训练习 1. 2. 3. 4. 5. 使用man cp找出

4 思科模拟器的介绍和使用

4 思科模拟器的介绍和使用 思科的IOS给我们提供了三大模式 设备开机后,进入的模式是【用户模式】 Router表示设备的名称 “>”表示用户模式 在用户模式输入"?" 可列出在用户模式可以使用的命令 第二种模式是特权模式,输入enable进入特权模式&…

RNN经典案例——构建人名分类器

RNN经典案例——人名分类器 一、数据处理1.1 去掉语言中的重音标记1.2 读取数据1.3 构建人名类别与人名对应关系字典1.4 将人名转换为对应的onehot张量 二、构建RNN模型2.1 构建传统RNN模型2.2 构建LSTM模型2.3 构建GRU模型 三、构建训练函数并进行训练3.1 从输出结果中获得指定…

字符和ACSII编码

1.字符和ASCII编码 C语言中char类型,专门用来创建字符变量,字符放在单引号中 char ch a ASCII码表 c官网,最全de c官网链接 数字字符0~9对应ASCII码十进制48~57 字符 大写字母A~Z对应ASCII码十进制65~90 字符 小写字母a~z对应ASCII码…