不止于获取数据:用baostock+Pandas+Matplotlib打造你的第一个股票分析仪表盘
从数据获取到洞察生成构建股票分析仪表盘的全流程实战在金融数据分析领域获取原始数据只是万里长征的第一步。真正有价值的是如何将这些数据转化为可操作的洞察。本文将带你使用Python生态中的baostock、Pandas和Matplotlib等工具构建一个完整的股票分析仪表盘实现从数据获取到可视化分析的全流程自动化。1. 环境准备与数据获取在开始之前确保你已经安装了以下Python库pip install baostock pandas matplotlib mplfinance streamlitbaostock作为一个免费的金融数据接口提供了丰富的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_date2022-01-01, end_date2023-12-31, frequencyd, adjustflag3 ) # 转换为DataFrame data_list [] while (rs.error_code 0) and rs.next(): data_list.append(rs.get_row_data()) df pd.DataFrame(data_list, columnsrs.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, inplaceTrue)提示adjustflag参数设置为3表示后复权这是进行长期趋势分析时的推荐设置。2. 数据清洗与特征工程原始数据往往需要经过清洗和增强才能用于分析。以下是几个关键的数据处理步骤处理缺失值检查并处理数据中的缺失值计算技术指标添加常用的技术分析指标特征标准化确保不同量纲的特征可以比较# 计算移动平均线 df[MA5] df[close].rolling(window5).mean() df[MA20] df[close].rolling(window20).mean() df[MA60] df[close].rolling(window60).mean() # 计算布林带 df[std] df[close].rolling(window20).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(window14).mean() loss (-delta.where(delta 0, 0)).rolling(window14).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], colorblue), mpf.make_addplot(df[MA20], colororange), mpf.make_addplot(df[MA60], colorgreen), mpf.make_addplot(df[RSI], panel1, colorpurple, ylabelRSI) ] # 绘制K线图 mpf.plot(ohlc, typecandle, stylecharles, addplotadd_plot, volumeTrue, 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[fMA{period}] df[close].rolling(windowperiod).mean() add_plot.append(mpf.make_addplot(df[fMA{period}], colorcolor)) fig, _ mpf.plot(df, typecandle, stylecharles, addplotadd_plot, volumeTrue, returnfigTrue, 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. 分析策略与实战技巧有了完善的数据和可视化工具后我们可以实现一些基本的分析策略趋势跟踪策略示例当短期均线(5日)上穿长期均线(20日)时考虑买入当短期均线下穿长期均线时考虑卖出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股股票进行技术分析和策略测试。这个框架还可以进一步扩展比如添加基本面数据、实现自动化交易信号提醒等。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2627985.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!