news 2026/6/22 15:48:01

不止于获取数据:用baostock+Pandas+Matplotlib打造你的第一个股票分析仪表盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
不止于获取数据:用baostock+Pandas+Matplotlib打造你的第一个股票分析仪表盘

从数据获取到洞察生成:构建股票分析仪表盘的全流程实战

在金融数据分析领域,获取原始数据只是万里长征的第一步。真正有价值的是如何将这些数据转化为可操作的洞察。本文将带你使用Python生态中的baostock、Pandas和Matplotlib等工具,构建一个完整的股票分析仪表盘,实现从数据获取到可视化分析的全流程自动化。

1. 环境准备与数据获取

在开始之前,确保你已经安装了以下Python库:

pip install baostock pandas matplotlib mplfinance streamlit

baostock作为一个免费的金融数据接口,提供了丰富的A股市场数据。与其它金融数据接口相比,它具有以下优势:

特性baostockTushare ProAKShare
免费额度有限
数据完整性优秀优秀良好
更新频率日级实时日级
接口稳定性稳定较稳定一般

获取牧原股份历史数据的完整代码如下:

import baostock as bs import pandas as pd # 登录系统 lg = bs.login() if lg.error_code != '0': print(f"登录失败: {lg.error_msg}") exit() # 查询历史K线数据 fields = "date,code,open,high,low,close,volume,amount,pctChg" rs = bs.query_history_k_data_plus( "sz.002714", fields, start_date='2022-01-01', end_date='2023-12-31', frequency="d", adjustflag="3" ) # 转换为DataFrame data_list = [] while (rs.error_code == '0') and rs.next(): data_list.append(rs.get_row_data()) df = pd.DataFrame(data_list, columns=rs.fields) bs.logout() # 数据类型转换 numeric_cols = ['open', 'high', 'low', 'close', 'volume', 'amount', 'pctChg'] df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric) df['date'] = pd.to_datetime(df['date']) df.set_index('date', inplace=True)

提示:adjustflag参数设置为"3"表示后复权,这是进行长期趋势分析时的推荐设置。

2. 数据清洗与特征工程

原始数据往往需要经过清洗和增强才能用于分析。以下是几个关键的数据处理步骤:

  1. 处理缺失值:检查并处理数据中的缺失值
  2. 计算技术指标:添加常用的技术分析指标
  3. 特征标准化:确保不同量纲的特征可以比较
# 计算移动平均线 df['MA5'] = df['close'].rolling(window=5).mean() df['MA20'] = df['close'].rolling(window=20).mean() df['MA60'] = df['close'].rolling(window=60).mean() # 计算布林带 df['std'] = df['close'].rolling(window=20).std() df['upper_band'] = df['MA20'] + 2 * df['std'] df['lower_band'] = df['MA20'] - 2 * df['std'] # 计算相对强弱指数(RSI) delta = df['close'].diff() gain = (delta.where(delta > 0, 0)).rolling(window=14).mean() loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean() df['RSI'] = 100 - (100 / (1 + gain / loss))

处理后的数据结构更加丰富,为后续分析打下了坚实基础。我们可以通过以下代码快速查看关键统计指标:

print(df[['close', 'volume', 'pctChg', 'RSI']].describe())

3. 高级可视化分析

基础的价格走势图只能提供有限的信息。我们将使用mplfinance库创建专业的K线图,并结合多种技术指标进行综合展示。

import mplfinance as mpf # 准备K线图数据 ohlc = df[['open', 'high', 'low', 'close', 'volume']].copy() ohlc.columns = ['Open', 'High', 'Low', 'Close', 'Volume'] # 添加技术指标 add_plot = [ mpf.make_addplot(df['MA5'], color='blue'), mpf.make_addplot(df['MA20'], color='orange'), mpf.make_addplot(df['MA60'], color='green'), mpf.make_addplot(df['RSI'], panel=1, color='purple', ylabel='RSI') ] # 绘制K线图 mpf.plot(ohlc, type='candle', style='charles', addplot=add_plot, volume=True, figratio=(12,8), title='牧原股份技术分析', datetime_format='%Y-%m')

这段代码将生成包含以下元素的专业图表:

  • 主图区域:K线图+三条移动平均线
  • 副图区域:RSI指标
  • 底部区域:成交量柱状图

注意:mplfinance的style参数支持多种预设样式,如'charles'、'binance'等,可以根据个人喜好调整。

4. 构建交互式仪表盘

静态图表虽然信息丰富,但缺乏交互性。我们可以使用Streamlit快速构建一个Web应用,实现交互式分析。

import streamlit as st import pandas as pd import mplfinance as mpf import matplotlib.pyplot as plt st.title('股票分析仪表盘') # 侧边栏控件 ticker = st.sidebar.text_input('股票代码', 'sz.002714') start_date = st.sidebar.date_input('开始日期', pd.to_datetime('2022-01-01')) end_date = st.sidebar.date_input('结束日期', pd.to_datetime('2023-12-31')) ma_periods = st.sidebar.multiselect('移动平均线周期', [5, 20, 60], default=[5, 20, 60]) # 获取数据 @st.cache_data def load_data(ticker, start_date, end_date): # 这里插入之前的数据获取代码 return df df = load_data(ticker, start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d')) # 主显示区域 tab1, tab2, tab3 = st.tabs(['K线图', '技术指标', '原始数据']) with tab1: # 动态生成addplot add_plot = [] colors = ['blue', 'green', 'red', 'purple'] for period, color in zip(ma_periods, colors): df[f'MA{period}'] = df['close'].rolling(window=period).mean() add_plot.append(mpf.make_addplot(df[f'MA{period}'], color=color)) fig, _ = mpf.plot(df, type='candle', style='charles', addplot=add_plot, volume=True, returnfig=True, figsize=(12,8)) st.pyplot(fig) with tab2: col1, col2 = st.columns(2) with col1: st.line_chart(df['pctChg']) with col2: st.line_chart(df['volume']) with tab3: st.dataframe(df)

这个仪表盘具有以下功能特点:

  • 可自定义股票代码和时间范围
  • 动态选择显示哪些移动平均线
  • 多标签页展示不同维度的数据
  • 自动缓存数据,提高响应速度

5. 分析策略与实战技巧

有了完善的数据和可视化工具后,我们可以实现一些基本的分析策略:

趋势跟踪策略示例:

  1. 当短期均线(5日)上穿长期均线(20日)时,考虑买入
  2. 当短期均线下穿长期均线时,考虑卖出
  3. RSI超过70为超买信号,低于30为超卖信号
# 策略信号生成 df['signal'] = 0 df.loc[df['MA5'] > df['MA20'], 'signal'] = 1 # 买入信号 df.loc[df['MA5'] < df['MA20'], 'signal'] = -1 # 卖出信号 # 策略回测 df['daily_return'] = df['close'].pct_change() df['strategy_return'] = df['signal'].shift(1) * df['daily_return'] # 计算累计收益 df['cum_market'] = (1 + df['daily_return']).cumprod() df['cum_strategy'] = (1 + df['strategy_return']).cumprod() # 绘制收益曲线 plt.figure(figsize=(12,6)) plt.plot(df['cum_market'], label='市场收益') plt.plot(df['cum_strategy'], label='策略收益') plt.legend() plt.title('策略回测结果') plt.show()

实际应用中还需要考虑以下因素:

  • 交易成本的影响
  • 策略参数的优化
  • 不同市场环境下的稳定性测试
  • 风险管理规则的加入

将上述所有组件整合到一个Jupyter Notebook或Python脚本中,你就拥有了一个完整的股票分析工具,可以快速对任何A股股票进行技术分析和策略测试。这个框架还可以进一步扩展,比如添加基本面数据、实现自动化交易信号提醒等。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 10:44:03

高效解决Web安全信息收集难题的URLFinder:从零到精通的实战指南

高效解决Web安全信息收集难题的URLFinder&#xff1a;从零到精通的实战指南 【免费下载链接】URLFinder 一款快速、全面、易用的页面信息提取工具&#xff0c;可快速发现和提取页面中的JS、URL和敏感信息。 项目地址: https://gitcode.com/gh_mirrors/ur/URLFinder URLF…

作者头像 李华
网站建设 2026/5/20 10:39:27

D3KeyHelper:暗黑3终极宏工具完整指南 - 5分钟快速上手

D3KeyHelper&#xff1a;暗黑3终极宏工具完整指南 - 5分钟快速上手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为《暗黑破坏…

作者头像 李华
网站建设 2026/5/20 10:37:59

在数据预处理流水线中集成 Taotoken 进行文本摘要与分类

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在数据预处理流水线中集成 Taotoken 进行文本摘要与分类 对于数据工程师和算法工程师而言&#xff0c;构建一个稳定、高效且成本可…

作者头像 李华
网站建设 2026/5/20 10:36:17

无王无帝定乾坤,来自田间第一人:海棠悟道定尘寰

无王无帝定乾坤&#xff0c;来自田间第一人。 静栖海棠通至理&#xff0c;一朝悟道定尘寰。一、序章 尘世如棋 世间万象纷纭&#xff0c;尘世浮沉难测。 古今多少豪杰&#xff0c;争名于朝&#xff0c;逐利于市&#xff1b; 多少帝王&#xff0c;执掌山河&#xff0c;到头来皆…

作者头像 李华
网站建设 2026/5/20 10:36:06

复合钢格板哪家好?花纹盖板厂家大揭秘

当您为厂房搭建平台、为光伏电站寻找通道板&#xff0c;或是为化工厂挑选耐腐蚀的沟盖板时&#xff0c;面对市场上琳琅满目的钢格板厂家&#xff0c;“哪家更好”这个问题是否让您感到困惑&#xff1f;作为一名在金属制品行业摸爬滚打近十年的从业者&#xff0c;我见过太多因为…

作者头像 李华
网站建设 2026/5/20 10:32:08

MCP、Skills、Workflow 到底有什么区别?

现在只要聊到 Agent&#xff0c;基本绕不开几个词&#xff1a;MCP、Skills、Workflow。很多人第一次看到这些概念时&#xff0c;可能会觉得它们都差不多。反正都是在“增强 Agent 的能力”&#xff0c;不都是让大模型能干更多事情吗&#xff1f;这么理解不能说完全错&#xff0…

作者头像 李华