使用LLM进行股价预测(附代码)
使用LLM进行股价预测(附代码)
注意
- 代码是完整的,但是需要 https://github.com/wxy2ab/akinterpreter 才能完整运行
利用 Python 和 AkShare 进行股票数据分析与预测:以中远海控为例
在本文中,我们将使用 Python 的 akshare 库获取中远海控(股票代码:601919.SH)2024 年的日线股票数据,并结合机器学习模型进行股价预测。接着,我们会可视化历史数据与预测结果,并生成一份简短的市场分析报告。整个过程涵盖了数据获取、处理、预测、可视化和分析等多个环节。
1. 获取中远海控2024年日线股票数据
首先,我们利用 akshare 库中的 stock_zh_a_daily 函数来获取中远海控股票的日线数据。
import akshare as ak
import datetime# 获取今天日期
today = datetime.date.today()# 将日期转换成 yyyyMMdd 格式
end_date = today.strftime("%Y%m%d")# 使用 stock_zh_a_daily 函数获取中远海控2024年日线股票数据
cosco_daily_data_2024 = ak.stock_zh_a_daily(symbol="601919.SH", start_date="20240101", end_date=end_date)# 打印返回的数据
print(cosco_daily_data_2024)
在这段代码中,我们通过 ak.stock_zh_a_daily 函数获取了从 2024 年 1 月 1 日到今天的中远海控股票数据,并将其打印出来进行检查。
2. 数据预处理与预测
我们将获取的数据进行一些预处理,确保数据格式适合机器学习模型的输入。然后,我们使用机器学习模型(假设通过某个 llm_client 客户端)进行未来 5 天股价的预测。
2.1 数据处理函数
这里定义了两个函数,一个用于处理输入数据,另一个用于处理模型预测结果。
import pandas as pd
import re# 准备输入数据
input_data = cosco_daily_data_2024[['date', 'close']].set_index('date')# 定义数据处理函数
def data_processor(data):return data.asfreq('D').fillna(method='ffill').iloc[-30:] # 使用最近30天的数据# 定义响应处理函数
def response_processor(response, num_of_predict):# 使用正则表达式提取预测结果中的数字numbers = re.findall(r'\d+\.\d+', response)predictions = [float(num) for num in numbers[-num_of_predict:]]return pd.Series(predictions, name='close', index=pd.date_range(start=input_data.index[-1] + pd.Timedelta(days=1), periods=num_of_predict))
data_processor函数:将数据处理为按日频率,填充缺失值,并返回最近 30 天的数据。response_processor函数:处理模型的预测结果,提取出预测的股价数据,并将其转换为 PandasSeries对象。
2.2 进行预测
接下来,我们使用 llm_client 进行预测,假设该客户端能够接收历史数据并返回预测结果。
# 使用llm_client进行预测
predictions = llm_client.predict(input_data, num_of_predict=5, data_processor=data_processor, response_processor=response_processor)
在这一步,我们将处理过的 input_data 传递给 llm_client,并设置预测天数为 5 天。预测结果通过 response_processor 处理,转换为 Pandas Series。
3. 数据可视化
我们使用 matplotlib 和 seaborn 库来绘制中远海控的历史股价和预测股价曲线。在此之前,我们还需要确保字体设置正确,以支持中文显示。
3.1 配置中文字体
import os
from matplotlib import font_manager# 设置中文字体
def configure_matplotlib_for_chinese():import platformsystem = platform.system()if system == 'Windows':font_name = 'SimHei'elif system == 'Darwin':font_name = 'STHeiti'else: # For Linuxfont_path = '/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc'if os.path.exists(font_path):font_manager.fontManager.addfont(font_path)font_name = font_manager.FontProperties(fname=font_path).get_name()else:raise FileNotFoundError(f"Font file not found: {font_path}")# Set the font propertiesplt.rcParams['font.sans-serif'] = [font_name]plt.rcParams['font.family'] = 'sans-serif'plt.rcParams['axes.unicode_minus'] = False# 运行配置函数
configure_matplotlib_for_chinese()
为了在可视化图表中正确显示中文,我们根据不同的操作系统设置了合适的中文字体。对于 Windows 和 macOS,分别使用了系统自带的字体;对于 Linux,则使用了 wqy-zenhei 字体。
3.2 绘制图表
import matplotlib.pyplot as plt
import uuid# 访问之前步骤的数据
historical_data = cosco_daily_data_2024
prediction_data = predictions# 合并历史数据和预测数据
historical_data['date'] = pd.to_datetime(historical_data['date'])
historical_data.set_index('date', inplace=True)
combined_data = pd.concat([historical_data['close'], prediction_data['close']])# 绘制图表
plt.figure(figsize=(12, 6))
plt.plot(historical_data.index, historical_data['close'], label='历史数据')
plt.plot(prediction_data.index, prediction_data['close'], color='red', label='预测数据')
plt.title('中远海控股价历史数据和预测')
plt.xlabel('日期')
plt.ylabel('收盘价')
plt.legend()
plt.grid(True)# 保存图表
file_name = f"output/{uuid.uuid4()}.png"
plt.savefig(file_name)
plt.close()
在这段代码中,我们将历史股价与预测股价合并,并绘制出两条曲线。historical_data 显示历史的收盘价曲线,prediction_data 则用红色表示未来 5 天的预测股价。图表保存为 PNG 格式,并保存在 output 文件夹中。
4. 统计数据与市场分析
绘制图表后,我们还可以计算一些统计数据,比如股价变化率,并生成简短的市场分析。我们使用 LLM(大语言模型)来生成对未来股价的分析和投资建议。
4.1 计算统计数据
# 计算一些统计数据
last_historical_price = historical_data['close'].iloc[-1]
first_prediction_price = prediction_data['close'].iloc[0]
prediction_change = (prediction_data['close'].iloc[-1] - first_prediction_price) / first_prediction_price * 100
这里我们计算了:
last_historical_price:最后一个历史数据点的收盘价。first_prediction_price:预测的第一天收盘价。prediction_change:预测期间股价的变化率。
4.2 使用 LLM 进行市场分析
# 使用LLM API进行分析
llm_client = llm_factory.get_instance()
prompt = f"根据以下数据分析中远海控未来5天的股价趋势:最后历史价格 {last_historical_price:.2f},预测5天后价格 {prediction_data['close'].iloc[-1]:.2f},预测期间变化率 {prediction_change:.2f}%。请给出简短的市场分析和投资建议。"
response = llm_client.one_chat(prompt)
在这段代码中,我们构建了一个包含历史和预测数据的提示词,并通过 llm_client 发送给 LLM 模型,请求对未来 5 天的股价趋势进行分析。
4.3 生成最终报告
# 准备返回值
results = []
results.append(f"")
results.append("主要发现:")
results.append(f"1. 最后一个历史数据点的收盘价为 {last_historical_price:.2f}")
results.append(f"2. 预测的第一天收盘价为 {first_prediction_price:.2f}")
results.append(f"3. 预测期间的价格变化率为 {prediction_change:.2f}%")
results.append(f"4. 预测显示未来5天的股价呈现{('上升' if prediction_change > 0 else '下降')}趋势")
results.append("5. LLM分析结果:")
results.append(response)# 将结果保存到 analysis_result 变量
analysis_result = "\n".join(results)
最终,我们将所有的结果整合到 analysis_result 中,这包括:
- 图表文件的引用。
- 主要发现,包括历史收盘价、预测收盘价和价格变化率。
- LLM 生成的市场分析。
5. 总结
本项目演示了如何使用 Python 进行股票数据的获取、处理、预测与可视化。通过 akshare 获取数据,结合机器学习模型进行预测,再借助 matplotlib 绘制图表,最后生成简短的市场分析。
完整代码
import akshare as ak
import datetime# 获取中远海控2024年的日线股票数据
# 中远海控的股票代码是 "601919.SH"# 使用stock_zh_a_daily函数获取数据
# 获取今天的日期
today = datetime.date.today()# 将日期转换成yyyyMMdd格式
end_date = today.strftime("%Y%m%d")# 使用stock_zh_a_daily函数获取数据
cosco_daily_data_2024 = ak.stock_zh_a_daily(symbol=symbol, start_date="20240101", end_date=end_date)# 直接打印返回的数据,不做任何处理
print(cosco_daily_data_2024)import pandas as pd
import re# 准备输入数据
input_data = cosco_daily_data_2024[['date', 'close']].set_index('date')# 定义数据处理函数
def data_processor(data):return data.asfreq('D').fillna(method='ffill').iloc[-30:] # 使用最近30天的数据# 定义响应处理函数
def response_processor(response, num_of_predict):# 使用正则表达式提取数字numbers = re.findall(r'\d+\.\d+', response)predictions = [float(num) for num in numbers[-num_of_predict:]]return pd.Series(predictions, name='close', index=pd.date_range(start=input_data.index[-1] + pd.Timedelta(days=1), periods=num_of_predict))# 使用llm_client进行预测
predictions = llm_client.predict(input_data, num_of_predict=5, data_processor=data_processor, response_processor=response_processor)import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import uuid
import os
from matplotlib import font_manager# 确保output文件夹存在
os.makedirs('output', exist_ok=True)# 设置中文字体
def configure_matplotlib_for_chinese():import platformsystem = platform.system()if system == 'Windows':font_name = 'SimHei'elif system == 'Darwin':font_name = 'STHeiti'else: # For Linuxfont_path = '/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc'if os.path.exists(font_path):font_manager.fontManager.addfont(font_path)font_name = font_manager.FontProperties(fname=font_path).get_name()else:raise FileNotFoundError(f"Font file not found: {font_path}")# Set the font propertiesplt.rcParams['font.sans-serif'] = [font_name]plt.rcParams['font.family'] = 'sans-serif'plt.rcParams['axes.unicode_minus'] = False# 运行配置函数
configure_matplotlib_for_chinese()# 访问之前步骤的数据
historical_data = cosco_daily_data_2024
prediction_data = predictions# 合并历史数据和预测数据
historical_data['date'] = pd.to_datetime(historical_data['date'])
historical_data.set_index('date', inplace=True)
combined_data = pd.concat([historical_data['close'], prediction_data['close']])# 绘制图表
plt.figure(figsize=(12, 6))
plt.plot(historical_data.index, historical_data['close'], label='历史数据')
plt.plot(prediction_data.index, prediction_data['close'], color='red', label='预测数据')
plt.title('中远海控股价历史数据和预测')
plt.xlabel('日期')
plt.ylabel('收盘价')
plt.legend()
plt.grid(True)# 保存图表
file_name = f"output/{uuid.uuid4()}.png"
plt.savefig(file_name)
plt.close()# 计算一些统计数据
last_historical_price = historical_data['close'].iloc[-1]
first_prediction_price = prediction_data['close'].iloc[0]
prediction_change = (prediction_data['close'].iloc[-1] - first_prediction_price) / first_prediction_price * 100# 准备返回值
results = []
results.append(f"")
results.append("主要发现:")
results.append(f"1. 最后一个历史数据点的收盘价为 {last_historical_price:.2f}")
results.append(f"2. 预测的第一天收盘价为 {first_prediction_price:.2f}")
results.append(f"3. 预测期间的价格变化率为 {prediction_change:.2f}%")
results.append(f"4. 预测显示未来5天的股价呈现{('上升' if prediction_change > 0 else '下降')}趋势")# 使用LLM API进行分析
llm_client = llm_factory.get_instance()
prompt = f"根据以下数据分析中远海控未来5天的股价趋势:最后历史价格 {last_historical_price:.2f},预测5天后价格 {prediction_data['close'].iloc[-1]:.2f},预测期间变化率 {prediction_change:.2f}%。请给出简短的市场分析和投资建议。"
response = llm_client.one_chat(prompt)results.append("5. LLM分析结果:")
results.append(response)# 将结果保存到analysis_result变量
analysis_result = "\n".join(results)
如何学习AI大模型?
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

四、AI大模型商业化落地方案

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。
相关文章:
使用LLM进行股价预测(附代码)
使用LLM进行股价预测(附代码) 注意 代码是完整的,但是需要 https://github.com/wxy2ab/akinterpreter 才能完整运行 利用 Python 和 AkShare 进行股票数据分析与预测:以中远海控为例 在本文中,我们将使用 Python 的 akshare 库获取中远海…...
分支限界笔记
文章目录 概要整体架构流程基本概念分支限界法的定义核心思想 简单问题介绍问题:简单背包问题思考:暴力解法聪明的解法:分支限界法直观理解分支限界法的步骤0-1背包问题问题描述问题建模问题分析1. 定义问题的解空间,确定易于搜索…...
PHP Cookie
Cookie 是什么? cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。 如何创建 Cookie? setcoo…...
Java后端面试场景题汇总
1.50 亿数据如何去重&排序? 如此大的数据集进行去重(例如50亿数据条目),我们需要考虑内存和存储空间的限制,同时还需要有一个高效的算法。一般来说,这样的数据量无法直接载入内存进行处理,因此需要采用磁盘存储和分布式处理的技术。主要有以下几种思路: 外部排序…...
【量化中的复权数据详解】
【复权计算方法】 股票会时不时的发生现金分红、送股等一系列股本变动,这会造成股价的非正常变化,导致我们不能直接通过股价来计算股票的涨跌幅。例如一个股票是10元,当他10送10的时候,它的价格会变成5元,但是我们并不…...
YOLO简史
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 YOLO历史 YOLO (You Only Look Once) 是一种流行的对象检测和图像分割模型,由华盛顿大学的 Joseph Redmon 和 Ali Farhadi 开发。YOLO 于 2015 年推出,因其高速和…...
低通滤波器,高通滤波器,公式
1 低通滤波器 :输出的是电容的电压 1 低通滤波器可以把低频信号上面的高频信号给滤掉 2 100hz正常通过 3 经过低通滤波器后,波形光滑,绿色波形。一致 4 电容充电速度跟不上输入信号的速度(因为加了电阻,限制了电流&…...
深入了解IPv6——光猫相关设定:DNS来源、DHCPv6服务、前缀来源等
光猫IPv6设置后的效果对比图: 修改前: 修改后: 一、DNS来源 1. 网络连接 来源: 从上游网络(如运营商)获取 IPv6 DNS 信息,通过 PPPoE 或 DHCPv6 下发。 特点: DNS 服务器地址直…...
前端国际化实战:从需求到落地的完整实践
"我们要开拓东南亚市场了!"产品经理小王兴奋地告诉我这个消息。作为技术负责人,我立刻意识到这意味着我们需要对整个系统进行国际化改造。说实话,虽然之前也做过一些多语言的项目,但面对一个正在运行的大型系统,国际化改造的挑战还是不小。 回想起上周的…...
React的状态管理库-Redux
核心思想:单一数据源、状态是只读的、以及使用纯函数更新状态。 组成部分 Store(存储) 应用的唯一状态容器,存储整个应用的状态树,使用 createStore() 创建。 getState():获取当前状态。dispatch(action)ÿ…...
【Android学习】RxJava
文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换符 资料连接 Android RxJava: 这是一份全面…...
Pycharm访问MySQL数据库·上
1.MySQL驱动模块Connector #导入数据库的驱动工具 import mysql.connector #连接数据库必备的条件 config {"host": "localhost","port": 3306,"user": "root","password": "888888","database&…...
【CUDA】CUBLAS
【CUDA】CUBLAS 在深入了解之前,提前运行预热(warmup)和基准测试(benchmark runs) 是获得准确执行时间的关键。如果不进行预热运行,cuBLAS 的首次运行会有较大的开销(大约 45 毫秒)…...
YOLOv8-ultralytics-8.2.103部分代码阅读笔记-predict.py
predict.py ultralytics\models\yolo\detect\predict.py 目录 predict.py 1.所需的库和模块 2.class DetectionPredictor(BasePredictor): 1.所需的库和模块 # Ultralytics YOLO 🚀, AGPL-3.0 licensefrom ultralytics.engine.predictor import BasePredicto…...
细说Flash存储芯片W25Q128FW和W25Q16BV
目录 一、Flash存储芯片W25Q128FW 1、W25Q128硬件接口和连接 2、存储空间划分 3、数据读写的原则 4、操作指令 (1)“写使能”指令 (2)“读数据”指令 (3)“写数据”指令 5、状态寄存器SR1 二、Fl…...
python爬虫--小白篇【爬取B站视频】
目录 一、任务分析 二、网页分析 三、任务实现 一、任务分析 将B站视频爬取并保存到本地,经过分析可知可以分为四个步骤,分别是: 爬取视频页的网页源代码;提取视频和音频的播放地址;下载并保存视频和音频&#x…...
Three.js入门-模型加载
Three.js 支持多种 3D 模型格式,每种格式有其独特的优势和适用场景。根据项目的需求,选择合适的格式可以提高开发效率和用户体验。下面将详细介绍几种常见的模型格式及其特点,并补充每种格式的典型使用场景。 支持的模型类型及特点 Three.j…...
ECharts实现数据可视化入门详解
文章目录 ECharts实现数据可视化入门详解一、引言二、基础配置1.1、代码示例 三、动态数据与交互2.1、代码示例 四、高级用法1、多图表组合1.1、在同一容器中绘制多个图表1.2、创建多个容器并分别初始化 ECharts 实例1.3、实现多图联动 五、总结 ECharts实现数据可视化入门详解…...
C++(举例说明类的实例化方式)
太多的信息会让你抓不住重点,下面通过间短的举例说明了类的几种实例化方式,熟悉以后再阅读代码的时候就能减少疑惑。 1.直接实例化:使用类名直接实例化对象 MyClass obj; 2.使用 new 关键字动态分配内存:使用 new 关键字来在堆上…...
LeetCode32. 最长有效括号(2024冬季每日一题 32)
给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s “(()” 输出:2 解释:最长有效括号子串是 “()” 示例 2: 输入:s “…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
