使用ARIMA预测股票未来走势

简介: Python实现使用ARIMA预测股票未来走势

from fileinput import close
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.stats.diagnostic import acorr_ljungbox

import statsmodels.api as sm
import matplotlib.font_manager as fm
import mplfinance as mpf

def arima_prediction(df,forecast_steps):

# 处理缺失值(如果有)
df = df.fillna(df.bfill())

# sm.graphics.tsa.plot_acf(ts,lags=30)
# sm.graphics.tsa.plot_pacf(ts,lags=30)

# 拟合ARIMA模型
p, d, q = 2, 0, 2  # 设置ARIMA模型的阶数(可以根据实际数据调整)
model = ARIMA(df, order=(p, d, q))
model_fit = model.fit()

# 预测未来1个月的K线数据

forecast= model_fit.forecast(steps=forecast_steps)
return forecast

def main():
code = '000001.SZ'
df = pd.read_csv("D:\csv_day_hq\"+code+".csv")
df['pushDate'] = pd.to_datetime(df['pushDate'])

df_p = df[df['pushDate']<='2023-08-25'].tail(250)
df_p.set_index('pushDate', inplace=True)

# print(df_p)
forecast_steps = 30
forecast_close = arima_prediction(df_p['close'],30)
forecast_open = arima_prediction(df_p['open'],30)
forecast_high = arima_prediction(df_p['high'],30)
forecast_low = arima_prediction(df_p['low'],30)

# 生成日期序列(未来1个月的日期)
last_date = df_p.index[-1]
print(last_date)
date_range = pd.date_range(start=last_date + pd.DateOffset(days=1), periods=forecast_steps, freq='D')
print(date_range)

# 创建未来1个月K线走势的DataFrame
forecast_df = pd.DataFrame({"pushDate":date_range,'open': forecast_open[0],'high': forecast_high[0],'low': forecast_low[0],'close': forecast_close[0]})
forecast_df.set_index('pushDate', inplace=True)
print(forecast_df)
lishi_df = df[['pushDate','open','high','low','close']]
lishi_df = lishi_df[lishi_df.shape[0]-100:]
lishi_df.set_index('pushDate', inplace=True)
forecast_df = pd.concat([lishi_df,forecast_df],ignore_index=False)
print(forecast_df)
# 自定义涨跌颜色
custom_colors = mpf.make_marketcolors(
    up='red',       # 上涨的颜色
    down='green',   # 下跌的颜色
    edge='black',   # K线边缘颜色
    wick='black',   # K线上下影线颜色
    volume='blue'   # 成交量条颜色
)

# 设置自定义样式
style = mpf.make_mpf_style(base_mpl_style="seaborn", marketcolors=custom_colors)
mpf.plot(forecast_df,type='candle', style=style, title='Kline', ylabel='price')

main()
Figure_1.png

相关文章
|
数据采集 数据可视化 vr&ar
Python3实现基于ARIMA模型来预测茅台股票价格趋势
Python3实现基于ARIMA模型来预测茅台股票价格趋势
1650 0
|
12月前
|
机器学习/深度学习 安全 算法
《联邦学习:打破数据孤岛,实现隐私保护下的跨机构协作》
联邦学习是一种分布式机器学习技术,核心理念为“数据不动模型动”,即在不交换原始数据的前提下,各机构基于本地数据独立训练模型,并通过加密方式上传模型参数更新至中央服务器进行聚合,从而提升全局模型性能。它分为横向、纵向和联邦迁移学习三种类型,分别适用于不同场景下的数据协作。联邦学习有效解决了数据隐私保护与跨机构协作的难题,在医疗、金融等领域展现出巨大潜力,推动了智能化变革。尽管仍面临通信效率、安全性和可解释性等挑战,但其前景广阔。
1226 25
|
10月前
|
存储 SQL 并行计算
【赵渝强老师】达梦数据库MPP集群的架构
达梦数据库提供大规模并行处理(MPP)架构,以低成本实现高性能并行计算,满足海量数据存储和复杂查询需求。DM MPP采用完全对等无共享体系,消除主节点瓶颈,通过多节点并行执行提升性能。其执行流程包括主EP生成计划、分发任务、各EP并行处理及结果汇总返回。为确保高可用性,建议结合数据守护部署。
360 0
|
Prometheus Kubernetes Cloud Native
Kruise Rollout:灵活可插拔的渐进式发布框架
Kruise Rollout 是 OpenKruise 社区开源的渐进式交付框架。Kruise Rollout 支持配合流量和实例灰度的金丝雀发布、蓝绿发布、A/B Testing 发布,以及发布过程能够基于 Prometheus Metrics 指标自动化分批与暂停,并提供旁路的无感对接、兼容已有的多种工作负载(Deployment、CloneSet、DaemonSet)。近期也在《2022 开放原子全球开源峰会》上面做了主题分享,以下是主要内容。
Kruise Rollout:灵活可插拔的渐进式发布框架
|
消息中间件 存储 Java
技术笔记:trident介绍
技术笔记:trident介绍
|
API 开发工具 Android开发
简述大疆无人机对接
【2月更文挑战第7天】本文介绍了对接大疆无人机的主要目的,包括实时画面获取、飞行数据监测、操控飞行、媒体管理和业务功能开发等,并列举了多种开发接口如MobileSDK、UXSDK、云开发API等。重点讨论了MobileSDK在Android平台的应用,包括SDK集成步骤、直播推流和获取飞机实时数据的细节。另外,UXSDK用于加速应用开发,提供预设UI组件。上云API则简化了无人机与第三方云平台的集成,支持MQTT、HTTPS和WebSocket协议,适用于行业级无人机。对接流程涉及Pilot2和Dock的配置,以及数据传输和业务功能处理。文章还提及了如何对接多个飞机的方法。
11445 0
简述大疆无人机对接
|
SQL 分布式计算 安全
Spark的核心概念:RDD、DataFrame和Dataset
Spark的核心概念:RDD、DataFrame和Dataset
|
算法 JavaScript 前端开发
JavaScript学习 -- SM3算法基本原理
JavaScript学习 -- SM3算法基本原理
375 0
|
SQL Java Spring
MybatisPlus-条件查询方式及多条件构建查询
MybatisPlus-条件查询方式及多条件构建查询
1714 0
|
编解码 Java Linux
linux【redhat&ubuntu】下ffmpeg-3.1安装编译及视频转码
这篇是几年前整理的老文章了,当时在调研流视频推送及播放相关技术,并在项目中应用,使用到ffmpeg,所以整理了这篇文章,但并未发布。最近又有相关的技术需求,所以整理出来,作为一个新的开始。
591 0