当前位置: 首页 > news >正文

python代码绘制某只股票最近90天的K线图、均线、量能图

运行代码,要求输入股票代码和名称,其他参数可省略

import akshare as ak
import matplotlib.pyplot as plt
import pandas as pd
import mplfinance as mpf
import matplotlib.dates as mdates
import numpy as np
import os
from datetime import datetime, timedelta# 设置中文字体
plt.rcParams["font.family"] = ["SimHei",  "Microsoft YaHei"]
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题def get_stock_data(stock_code, start_date=None, end_date=None, adjust="qfq"):"""使用 AkShare 获取股票数据参数:stock_code (str): 股票代码,如 'sh000001' 或 '000001.SZ'start_date (str): 开始日期,格式 'YYYYMMDD',默认为 3 个月前end_date (str): 结束日期,格式 'YYYYMMDD',默认为今天adjust (str): 复权类型,'qfq' 为前复权,'hfq' 为后复权,None 为不复权返回:DataFrame: 包含股票数据的 DataFrame"""# 处理默认日期if end_date is None:end_date = datetime.now().strftime('%Y%m%d')if start_date is None:start_date = (datetime.now() - timedelta(days=90)).strftime('%Y%m%d')# 格式化股票代码以适应 AkShareif not stock_code.startswith(('sh', 'sz')):market = 'sh' if stock_code.startswith(('6', '9')) else 'sz'stock_code = f'{market}{stock_code}'try:# 使用 AkShare 获取股票日线数据stock_data = ak.stock_zh_a_hist_tx(symbol=stock_code, start_date=start_date, end_date=end_date, adjust=adjust)# 重命名列以符合 mplfinance 要求# 检查并映射成交量列名volume_columns = ['成交量', '成交额', 'volume','amount']volume_col = next((col for col in volume_columns if col in stock_data.columns), None)if volume_col is None:print("警告: 数据中未找到成交量列,图表可能不完整")stock_data['volume'] = 0  # 添加默认成交量列else:stock_data = stock_data.rename(columns={volume_col: 'volume'})# 重命名其他必要列stock_data = stock_data.rename(columns={'日期': 'date', '开盘': 'open', '收盘': 'close', '最高': 'high', '最低': 'low'})# 转换日期格式stock_data['date'] = pd.to_datetime(stock_data['date'])# 确保数据按日期排序stock_data = stock_data.sort_values('date')# 检查是否有必要的列required_columns = ['date', 'open', 'high', 'low', 'close', 'volume']missing_columns = [col for col in required_columns if col not in stock_data.columns]if missing_columns:print(f"错误: 数据缺少必要的列: {', '.join(missing_columns)}")return Nonereturn stock_dataexcept Exception as e:print(f"获取股票数据时出错: {e}")return Nonedef plot_stock_daily_movement(stock_data, stock_name="股票", save_path=None, ma_periods=None):"""绘制股票日变动情况,包括 K 线图和成交量及均线参数:stock_data (DataFrame): 包含股票数据的 DataFrame,必须包含 'date', 'open', 'high', 'low', 'close', 'volume' 列stock_name (str): 股票名称,用于图表标题save_path (str): 图表保存路径,默认为 None 不保存ma_periods (list): 均线周期列表,默认为 [5, 10, 20]"""if stock_data is None or stock_data.empty:print("没有数据可绘制图表")return# 设置默认均线周期if ma_periods is None:ma_periods = [5, 10, 20]# 复制数据并准备 mplfinance 所需格式plot_data = stock_data.copy()plot_data = plot_data.set_index('date')# 添加均线for period in ma_periods:column_name = f'MA{period}'plot_data[column_name] = plot_data['close'].rolling(window=period).mean()# 设置 mplfinance 样式mc = mpf.make_marketcolors(up='r', down='g', inherit=True)# 自定义均线颜色ma_colors = ['blue', 'purple', 'orange', 'green', 'red', 'brown', 'gray']ma_colors = ma_colors[:len(ma_periods)]  # 确保颜色数量与均线周期数量匹配s = mpf.make_mpf_style(marketcolors=mc, gridstyle='--', y_on_right=False,rc={'font.family': ['SimHei', 'WenQuanYi Micro Hei', 'Heiti TC', 'Microsoft YaHei'],'lines.linewidth': 1.5  # 增加均线线条宽度})# 绘制 K 线图和成交量fig, axes = mpf.plot(plot_data,type='candle',style=s,title=f'{stock_name} 日变动情况',ylabel='价格 (元)',volume=True,ylabel_lower='成交量 (手)',mav=tuple(ma_periods),  # 传递均线周期returnfig=True,figsize=(14, 10),update_width_config=dict(candle_linewidth=1.2,  # K线实体边框宽度candle_width=0.6,      # K线宽度volume_width=0.8,      # 成交量柱宽度))# 调整标题位置fig.suptitle(f'{stock_name} 日变动情况', fontsize=16, y=0.98)# 添加均线图例ax = axes[0]  # K线图的轴for i, period in enumerate(ma_periods):ax.plot([], [], color=ma_colors[i], label=f'MA{period}', linewidth=1.5)ax.legend(loc='upper left')# 如果指定了保存路径,则保存图表if save_path:save_dir = os.path.dirname(save_path)if not os.path.exists(save_dir):os.makedirs(save_dir)plt.savefig(save_path, dpi=300, bbox_inches='tight')print(f"图表已保存至: {save_path}")plt.show()# 主函数
if __name__ == "__main__":# 用户输入股票代码和名称stock_code = input("请输入股票代码(例如 000001 或 sh000001): ").strip()stock_name = input("请输入股票名称(例如 平安银行): ").strip()# 获取股票数据print("正在获取股票数据...")stock_data = get_stock_data(stock_code)if stock_data is not None and not stock_data.empty:print(f"成功获取 {len(stock_data)} 天的股票数据")# 显示数据列名,用于调试print(f"数据列名: {', '.join(stock_data.columns)}")# 可选:自定义均线周期ma_input = input("请输入均线周期(用逗号分隔,默认 5,10,20): ").strip()if ma_input:try:ma_periods = [int(p.strip()) for p in ma_input.split(',')]except ValueError:print("无效的均线周期,使用默认值")ma_periods = [5, 10, 20]else:ma_periods = [5, 10, 20]# 绘制股票日变动情况plot_stock_daily_movement(stock_data, stock_name, ma_periods=ma_periods)else:print("未能获取股票数据,请检查股票代码是否正确")    

在这里插入图片描述

相关文章:

python代码绘制某只股票最近90天的K线图、均线、量能图

运行代码,要求输入股票代码和名称,其他参数可省略 import akshare as ak import matplotlib.pyplot as plt import pandas as pd import mplfinance as mpf import matplotlib.dates as mdates import numpy as np import os from datetime import date…...

upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)

目录 一、图片马 二、文件包含 三、文件包含与图片马 四、图片马制作方法 五、源码分析 六、制作图片马 1、创建脚本并命名为test.php 2、准备制作图片马的三类图片 3、 使用copy命令制作图片马 七、渗透实战 1、GIF图片马渗透 (1)上传gif图…...

反弹shell

shell了解 shell其xxxx是交互,点鼠标敲键盘与计算机进行交互,还有常见的shell(cmd,powershell) shell反弹 当远程连接shell(windows远程桌面,linux有SSH之类),从外面远…...

【动手学深度学习】1.3. 各种机器学习问题

目录 1.3. 各种机器学习问题1)监督学习(supervisedlearning)(1)回归(regression)(2)分类(classification)(3)标记问题&…...

OS进程调度

tss Q1:你是如何保证两个进程不能同时访问共享资源的? ✅ 推荐回答: 我实现了基于结构体的互斥锁,使用 mutex_lock() 来加锁资源。如果已有任务持有锁,则当前任务会被阻塞并加入等待队列,直到被唤醒。解锁…...

MCP和 AI agent 有什么区别和联系

MCP 是什么? MCP(Model Context Protocol,模型上下文协议)是一种开源通信协议,旨在为大型语言模型(LLM)与外部数据源、工具或服务之间建立标准化、安全且灵活的双向连接。它类似于“AI 的 USB-…...

用Recommenders,实现个性化推荐

文章目录 引言一、Recommenders简介二、选择Recommenders的原因三、智能推荐系统的设计与实现四、总结 引言 在这个信息如洪流般涌来的时代,你是否常常在茫茫的信息海洋中迷失方向,为找不到自己心仪的内容而苦恼?今天咱们就来聊聊基于Micros…...

MCP-1:MCP组件与工作流程

MCP-1:MCP组件与工作流程 1.什么是MCP2.MCP架构组件​​2.1.MCP Hosts2.2.MCP Client​​2.3.MCP Server3.交互流程3.1.用户提问3.2.LLM 推理选择MCP Server(大模型规划)3.3.调用 MCP Tool3.4.返回结果3.5.数据清洗3.6.反馈信息给用户1.什么是MCP MCP(Model Context Proto…...

NVIDIA GPU 性能调优与诊断完全指南

本文为多 GPU 用户(如 3*RTX A4000 系统)提供一份全面的调优与诊断手册,涵盖功率限制、风扇控制、频率锁定、缓存清理、GPU 重置与性能测试工具等操作命令,适合开发者与研究人员在部署前进行系统级优化与验证。 📌 目录…...

从运维告警到业务决策:可观测性正在重新定义企业数据基础设施

可观测性(Observability)与传统监控(Monitoring)的核心差异,本质上是一种数据维度的主动暴露与被动采集的范式转变。传统监控就像在黑暗森林中设置有限的探照灯,运维人员必须预先假设可能的故障路径&#x…...

配电网运行状态综合评估方法研究

1评估指标体系的构建 [1]冷华,童莹,李欣然,等.配电网运行状态综合评估方法研究[J].电力系统保护与控制,2017,45(01):53-59. 1.1评估范围 图1为配电系统组成示意图,其中A、B、C分别表示高、中、低压配电系统。高压配变(也称主变)将35kV或110kV的电压降到10kV&#…...

Linux中I/O复用机制epoll

1. 为什么会出现 epoll? 在早期的网络编程中,select 是一个非常常用的 I/O 复用机制,用于在多个文件描述符(如套接字)上进行 I/O 操作的检测。select 会将多个文件描述符传入,轮询检查它们的状态&#xff…...

数据库表关系详解

一、一对多关系 特征:表A的一条记录对应表B的多条记录,表B的一条记录仅对应表A的一条记录 示例: 学生表(子表) | id | name | class_id | |-----|------|----------| |1001| 张三 | 111 | |1002| 张四 | 222 | 班级表…...

Agentic Loop与MCP:大模型能力扩展技术解析

一、什么是MCP MCP(Model Context Protocol)是一种用于大语言模型与外部工具交互的协议框架。它允许大语言模型能够调用各种外部工具来扩展其能力边界,如访问文件系统、搜索引擎、数据库等。 MCP的核心价值 能力扩展:使大语言模…...

贪心算法 Part04

总结下重叠区间问题 LC 452. 用最少数量的箭引爆气球 和 LC 435. 无重叠区间 本质上是一样的。 LC 452. 用最少数量的箭引爆气球 是求n个区间当中 , 区间的种类数量 k。此处可以理解为,重叠在一起的区间属于同一品种,没有重叠的区间当然…...

Spring事务简单操作

什么是事务? 事务是一组操作的集合,是一个不可分割的操作 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时 成功, 要么同时失败. 事务的操作 分为三步: 1. 开启事start transaction/ begin …...

04算法学习_209.长度最小的子数组

04算法学习_209.长度最小的子数组题目描述:个人代码:学习思路:第一种写法:题解关键点: 第二种写法:题解关键点: 个人学习时疑惑点解答: 04算法学习_209.长度最小的子数组 力扣题目链…...

./build/mkfs.jffs2: Command not found

参考文章:https://blog.csdn.net/FLM19990626/article/details/132070195 sudo apt-get install lib32stdc6 sudo apt-get install lib32z1 sudo apt-get install mtd-utils sudo apt-get install man-db sudo apt-get install liblzo2-dev:i386sudo ldconfig...

从零基础到最佳实践:Vue.js 系列(4/10):《Vue Router 路由管理:深入探索与实战应用》

引言 在现代前端开发中,单页应用(SPA)凭借其流畅的用户体验和高性能成为主流。Vue Router 作为 Vue.js 的官方路由管理工具,为开发者提供了强大的路由管理能力,帮助实现页面导航、权限控制和动态内容加载。本文将从基…...

深入解析C++静态成员变量与函数

当然可以&#xff01;下面是对这段 C 代码的逐行详细注释说明和解释&#xff0c;帮助你理解静态成员变量和静态成员函数的使用。 &#x1f9f1; 类定义部分&#xff1a;MyClass cpp 深色版本 #include <iostream> 说明&#xff1a;包含标准输入输出流库&#xff0c;用于…...

基于JDBC的信息管理系统,那么什么是JDBC呢?什么又是DAO类?

1.JDBC JDBC 即 Java Database Connectivity&#xff0c;是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式&#xff0c;让 Java 程序能够连接到各种不同类型的数据库&#xff0c;并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。 主要功…...

Java虚拟机 -虚拟机栈

虚拟机栈详解 虚拟机栈概述案例常见的跟虚拟栈异常相关的异常StackOverflowError异常OutOfMemoryError异常 栈的基本存储单位局部变量表IDEA Jclasslib Bytecode Viewer插件slot 操作数栈方法调用&#xff08;待后续补充&#xff09; 虚拟机栈 上一篇文章&#xff0c;我们简单…...

【AI News | 20250521】每日AI进展

AI Repos 1、OpenHands OpenHands&#xff08;前身为OpenDevin&#xff09;是一个由AI驱动的软件开发代理平台&#xff0c;它能够像人类开发者一样修改代码、运行命令、浏览网页、调用API&#xff0c;甚至从StackOverflow复制代码片段。用户可以通过OpenHands Cloud轻松上手&a…...

RAG 挑战赛冠军方案解析:从数据解析到多路由器检索的工程实践,推荐阅读!

多路由器 动态知识库&#xff1a;RAG 冠军方案的核心技术揭秘 源码地址&#xff1a;https://github.com/IlyaRice/RAG-Challenge-2/tree/main 公司年报智能问答比赛任务简介 比赛的任务是基于公司年度报告构建一个问答系统。简单来说&#xff0c;比赛当天的流程如下&#xff…...

Java基础 Day17

一、递归 方法直接或者间接调用本身 将大问题, 层层转化为一个与原问题相似的、规模更小的问题来解决 二、异常 程序在编译或执行过程中&#xff0c;出现的非正常的情况 (错误) 语法错误不是异常 1、阅读异常信息 从下往上看&#xff1a;发生异常的位置、异常名称、发生异…...

系分论文《论软件系统安全分析和应用》

系统分析师论文范文系列 【摘要】 2023年3月&#xff0c;我司承接了某知名电商企业“智能化供应链管理系统”的开发任务&#xff0c;我作为系统分析师负责全面的安全分析与设计工作。该系统以提升电商供应链效率为核心&#xff0c;整合仓储、物流、支付等模块&#xff0c;并需应…...

蓝耘Ubantu服务器测试最新 PP-StructureV3 教程

一、服务器配置 二、安装Anaconda3 进入云服务器后删除minconda文件夹 官网&#xff1a; https://repo.anaconda.com/archive/ 在里面找到自己系统的安装包&#xff0c;然后右击复制链接安装。 一定要选择Anaconda,因为很多依赖问题用Minconda容易报错。 wget https://repo…...

File文件

路径&#xff1a; 相对路径&#xff1a;以 当前工作目录&#xff08;或指定的基准目录&#xff09;为起点&#xff0c;描述目标文件或目录的位置&#xff0c;不包含根目录信息&#xff0c;仅表示与基准目录的相对位置关系。绝对路径&#xff1a;从文件系统的 根目录 开始&…...

Wireshark抓包分析小程序接口请求教程

## 1. 准备工作 ### 1.1 安装Wireshark - 访问Wireshark官网 (https://www.wireshark.org/) 下载最新版本 - 按照安装向导完成安装 - 确保安装时选择安装WinPcap或Npcap&#xff08;用于网络数据包捕获&#xff09; ### 1.2 配置环境 - 确保电脑已连接网络 - 如果使用手机…...

C++之模板进阶(探索C++模板:非类型参数与特化技巧)

本节目标&#xff1a; 1.非类型模板参数 2.类模板的特化 3.类模板特化的应用之类型萃取 4.模板的分离编译 非类型模板参数 模板参数分 类型形参与非类型形参 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称 非类型形…...

【项目记录】准备工作及查询部门

1 开发规范 1.1 前后端分离开发 现在的企业项目开发有2种开发模式&#xff1a;前后台混合开发和前后台分离开发。 前后台混合开发&#xff0c;顾名思义就是前台后台代码混在一起开发 这种开发模式有如下缺点&#xff1a; 1. 沟通成本高&#xff1a;后台人员发现前端有问题&a…...

chromedp -—— 基于 go 的自动化操作浏览器库

chromedp chromedp 是一个用于 Chrome 浏览器的自动化测试工具&#xff0c;基于 Go 语言开发&#xff0c;专门用于控制和操作 Chrome 浏览器实例。 chromedp 安装 go get -u github.com/chromedp/chromedp基于chromedp 实现的的简易学习通刷课系统 目前实现的功能&#xff…...

企业级调度器LVS

访问效果 涉及内容&#xff1a;浏览拆分、 DNS 解析、反向代理、负载均衡、数据库等 1 集群 1.1 集群类型简介 对于⼀个业务项⽬集群来说&#xff0c;根据业务中的特性和特点&#xff0c;它主要有三种分类&#xff1a; 高扩展 (LB) &#xff1a;单个主机负载不足的时候&#xf…...

MySQL中的重要常见知识点(入门到入土!)

基础篇 基础语法 添加数据 -- 完整语法 INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);-- 示例 insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,1,Itcast,男,10,123456789012345678,2000-01-01) 修改数据 -- 完整语法 UPDA…...

29.第二阶段x64游戏实战-技能冷却

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;28.第二阶段x64游戏实战-代码实现遍历技能 找技能冷却要通过一个技能cd长点的&…...

第19天-Python自动化生成PPT图文教程(基于python-pptx)

环境准备 pip install python-pptx Pillow 基础示例:批量插入图片 from pptx import Presentation from pptx.util import Inches import os from PIL import Image def create_image_slides(): # 初始化演示文稿 prs = Presentation() # 获取当前目录所…...

基于STM32的骑行语音播报系统

目录 一、前言 二、项目功能说明 三、主要元器件 四、原理图与PCB 五、手机APP 六、完整资料 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; 咸鱼商品链接&#xff1a; 基于STM32的骑行语音播报系统 二、项目功能说明 基础功能&#xff1a; 1&…...

springboot链接nacos测试

代码资料链接&#xff1a;https://download.csdn.net/download/ly1h1/90881498 场景说明&#xff1a;本次测试是springboot项目&#xff0c;可以链接上ncaos&#xff0c;将对应命名空间下的配置信息读取出俩&#xff0c;然后可以在接口进行返回显示。 0.环境配置 1.代码结构 …...

【初识】内网渗透——基础概念,基本工具使用

目录 一、域&#xff0c;工作组&#xff0c;域控制器&#xff0c;活动目录相关概念&#xff1a; 域环境&#xff1a; 工作组&#xff1a; 域控制器DC&#xff1a; 活动目录AD&#xff1a; 二、内网的基本场景&#xff1a; 三、内网渗透基本测试方案&#xff1a; #案例1一基本信…...

AI练习:混合圆

方法一&#xff1a;在圆内 1.画圆 选择椭圆工具&#xff0c;按住Shift键绘制正圆&#xff1b; CtrlC复制&#xff0c;CtrlF原地粘贴&#xff0c;按住Shift键缩小圆&#xff0c;移动位置&#xff1b; 再CtrlC&#xff0c;CtrlF&#xff0c;再按住Shift键缩小圆&#xff0c;移…...

心知天气 API 获取天气预报 2025/5/21

心知天气 API 获取天气预报 2025/5/21 URL格式: https://api.seniverse.com/v3/weather/now.json?key填你的秘钥&locationbeijing(这里填城市 可以用拼音)&languagezh-Hans&unitc 返回格式如下:...

PCB设计教程【入门篇】——电路分析基础-元件数据手册

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理 目录 前言 一、数据手册的重要…...

java上机测试错题回顾(1)

平时不能摸鱼太多&#xff0c;这样导致到最后不能摸鱼...... 看了看日历原来是6.12就结课了&#xff0c;啊哈哈&#xff0c;真没几天准备了&#xff0c;期末月你要来了吗&#xff1f; 1 参数传递&#xff0c;值传递~&#xff01; 题目 以下代码的输出结果为&#xff08; &a…...

HTTP相关内容

应用层 自定义应用层协议,协议:约定 1.约定好通信传输的信息 2.约定好数据的组织格式(xml, json(重点), protobuf) 也可以基于现成的应用层协议,来进行开发 协议的种类非常多(HTTP 协议属于翘楚,1.手机,2 网站) 跟正确的说,咱们现在使用的是 HTTPS 这个协议,HTTP和HTTPS …...

【笔记】排查并解决Error in LLM call after 3 attempts: (status code: 502)

#工作记录 一、问题描述 在部署运行部署对冲基金分析工具 ai-hedge-fund 时&#xff0c;不断出现以下报错&#xff0c;导致项目运行异常&#xff1a; Error in LLM call after 3 attempts: (status code: 502) Error in LLM call after 3 attempts: [WinError 10054] 远程主…...

基于python的机器学习(七)—— 数据特征选择

目录 一、特征选择概念 二、特征选择的方法 2.1 过滤式特征选择 2.1.1 方差分析 2.1.2 相关系数 2.1.3 卡方检验 2.2 包裹式特征选择 2.2.1 递归特征消除 2.3 嵌入式特征选择 2.3.1 决策树特征重要性 一、特征选择概念 特征选择是机器学习非常重要的一个步骤&#x…...

从电商角度设计大模型的 Prompt

从电商角度设计大模型的 Prompt&#xff0c;有一个关键核心思路&#xff1a;围绕具体业务场景明确任务目标输出格式&#xff0c;帮助模型为运营、客服、营销、数据分析等工作提效。以下是电商场景下 Prompt 设计的完整指南&#xff0c;包含通用思路、模块范例、实战案例等内容。…...

从零基础到最佳实践:Vue.js 系列(5/10):《状态管理》

引言 你是不是正在用 Vue.js 开发一个很酷的应用&#xff0c;然后发现组件之间的数据传递变得越来越混乱&#xff1f;比如&#xff0c;一个按钮的状态要传到好几层组件&#xff0c;或者多个页面需要共享同一个用户信息。这时候&#xff0c;状态管理就登场了&#xff01;在 Vue…...

git checkout HEAD

git checkout HEAD 主要用于将工作目录和暂存区的内容重置为当前 HEAD 指向的提交状态&#xff0c;常用于撤销未提交的修改15。具体行为如下&#xff1a; 一、核心作用 ‌恢复工作区文件‌ 将指定文件或全部文件恢复到 HEAD 指向的提交状态&#xff0c;丢弃工作区中未暂存的修改…...

git工具使用

安装Git 在开始使用Git之前&#xff0c;需要在本地计算机上安装Git工具。Git支持Windows、macOS和Linux系统。可以从Git官方网站下载适合操作系统的安装包&#xff0c;并按照安装向导进行安装。 bash复制插入 # 在Linux上安装Git sudo apt-get install git# 在macOS上安装Git…...