Python 计算股票布林线(BOLL)指标完整实战教程

发布时间:2026/7/18 20:34:51
Python 计算股票布林线(BOLL)指标完整实战教程 一、布林线指标基础原理布林线Bollinger Bands简称BOLL是由约翰·布林格发明的经典趋势波动率指标核心依托移动平均线标准差构建三条轨道线直观反映股价波动区间、支撑压力位与超买超卖状态。三条轨道计算公式中轨线MBN周期收盘价简单移动平均线常规参数N20MBMA20Close1Close2...Close2020MB MA_{20} \frac{Close_1Close_2...Close_{20}}{20}MBMA20​20Close1​Close2​...Close20​​上轨线UP中轨 N倍收盘价标准差默认倍数K2UPMB2×σUP MB 2 \times \sigmaUPMB2×σ下轨线DN中轨 - N倍收盘价标准差DNMB−2×σDN MB - 2 \times \sigmaDNMB−2×σσ\sigmaσ20周期收盘价标准差代表股价波动率。基础交易逻辑股价触碰上轨短期超买回调概率提升股价触碰下轨短期超卖反弹概率提升轨道收窄波动率缩小预示即将突破行情轨道扩张波动加大单边趋势行情延续。二、环境依赖准备本次实战使用三大核心库tushare免费获取A股股票历史行情数据pandas数据清洗、均线、标准差批量计算matplotlib可视化绘制布林线K线走势图numpy数值计算辅助安装依赖命令pipinstalltushare pandas numpy matplotlib三、完整代码实现获取行情计算布林指标3.1 步骤说明初始化Tushare接口拉取单只股票日线数据基于收盘价计算20日均线、标准差代入公式生成上轨、中轨、下轨三条布林线数据校验剔除空值Matplotlib绘制股价与布林轨道对比图。完整可运行源码importtushareastsimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt# ---------------------- 1. 初始化Tushare需自行官网注册获取token ----------------------# Tushare官网https://tushare.pro/ 注册后获取个人tokents.set_token(你的Tushare Token)prots.pro_api()# ---------------------- 2. 获取股票日线行情数据 ----------------------defget_stock_data(stock_code,start_date,end_date): 获取A股日线数据 :param stock_code: 股票代码 如600036.SH :param start_date: 起始日期 YYYYMMDD :param end_date: 结束日期 YYYYMMDD :return: 处理后DataFrame dfpro.daily(ts_codestock_code,start_datestart_date,end_dateend_date)# 按交易日期升序排序接口默认倒序必须反转才能正确计算均线dfdf.sort_values(trade_date).reset_index(dropTrue)# 日期格式转换用于绘图横轴展示df[trade_date]pd.to_datetime(df[trade_date])returndf# ---------------------- 3. 核心函数计算布林线BOLL指标 ----------------------defcalc_boll(df,n20,k2): 计算布林带上中下轨 :param df: 股票行情DataFrame必须包含close收盘价列 :param n: 均线周期默认20 :param k: 标准差倍数默认2 :return: 新增boll_mb、boll_up、boll_dn三列的df # 中轨N周期简单移动平均df[boll_mb]df[close].rolling(windown).mean()# 计算N周期收盘价标准差stddf[close].rolling(windown).std()# 上轨 中轨 k倍标准差df[boll_up]df[boll_mb]k*std# 下轨 中轨 - k倍标准差df[boll_dn]df[boll_mb]-k*stdreturndf# ---------------------- 4. 布林线可视化绘图函数 ----------------------defplot_boll(df,stock_name):plt.rcParams[font.sans-serif][SimHei]# 解决中文乱码plt.rcParams[axes.unicode_minus]False# 解决负号显示异常fig,axplt.subplots(figsize(14,7))# 绘制收盘价走势ax.plot(df[trade_date],df[close],color#222222,linewidth1.2,label收盘价)# 布林中轨蓝色ax.plot(df[trade_date],df[boll_mb],color#0066cc,linewidth1.5,labelBOLL中轨(MB))# 布林上轨红色ax.plot(df[trade_date],df[boll_up],color#cc2222,linewidth1,linestyle--,labelBOLL上轨(UP))# 布林下轨绿色ax.plot(df[trade_date],df[boll_dn],color#229922,linewidth1,linestyle--,labelBOLL下轨(DN))# 填充上下轨区间半透明灰色ax.fill_between(df[trade_date],df[boll_up],df[boll_dn],color#dddddd,alpha0.3)ax.set_title(f{stock_name}布林线BOLL指标走势图,fontsize15,pad15)ax.set_xlabel(交易日期)ax.set_ylabel(股价(元))ax.legend(locbest)ax.grid(alpha0.3)plt.xticks(rotation45)plt.tight_layout()plt.show()# ---------------------- 主程序执行入口 ----------------------if__name____main__:# 配置参数stock_ts_code600036.SH# 招商银行stock_short_name招商银行start20250101end20251231# 1. 获取行情stock_dfget_stock_data(stock_ts_code,start,end)# 2. 计算布林线stock_dfcalc_boll(stock_df,n20,k2)# 3. 打印前30行数据查看指标结果print(股票行情布林指标数据预览)print(stock_df[[trade_date,close,boll_mb,boll_up,boll_dn]].head(30))# 4. 绘制布林线图表plot_boll(stock_df,stock_short_name)四、代码分段详细解析4.1 数据获取模块关键点Tushare接口返回数据默认是日期倒序如果不执行sort_values排序滚动均线计算会完全失真这是新手最容易踩坑的问题。行情核心字段说明trade_date交易日期close当日收盘价布林线唯一计算数据源open/high/low开盘、最高、最低价拓展可用于K线绘制4.2 BOLL指标计算核心逻辑pandas.rolling(windown)滑动窗口是计算均线、标准差的核心窗口大小20代表每次取连续20根日线mean()计算窗口均值即中轨std()计算窗口内收盘价标准差衡量波动幅度上下轨仅在中轨基础上±2倍标准差参数k可自定义短线用1.8长线用2.2。4.3 绘图模块优化点配置SimHei黑体解决Matplotlib中文乱码上下轨使用虚线区分轨道区间填充半透明底色视觉分层清晰自动旋转X轴日期标签避免日期文字重叠。五、拓展优化方案5.1 本地CSV行情离线计算无需Tushare如果没有Tushare账号可导入本地存储的股票CSV文件计算布林线# 本地csv格式至少包含 trade_date, close 两列dfpd.read_csv(stock_data.csv)df[trade_date]pd.to_datetime(df[trade_date])dfdf.sort_values(trade_date).reset_index(dropTrue)dfcalc_boll(df)5.2 增加布林带宽指标判断轨道收缩扩张布林带宽衡量轨道宽窄用于捕捉突破行情前兆BandWidthUP−DNMBBandWidth \frac{UP-DN}{MB}BandWidthMBUP−DN​新增代码df[boll_bandwidth](df[boll_up]-df[boll_dn])/df[boll_mb]带宽持续走低代表震荡缩量即将出现大行情。5.3 超买超卖标记增加标记列识别股价突破轨道的信号df[signal]0df.loc[df[close]df[boll_up],signal]1# 上轨超买df.loc[df[close]df[boll_dn],signal]-1# 下轨超卖六、实战使用注意事项参数适配A股短线交易可调整n13k1.9长线持有默认20、2停牌处理数据中停牌无收盘价行会导致标准差失真需提前过滤空值单边行情缺陷持续大涨/大跌行情中股价会长期贴紧上/下轨单纯触碰轨道反向操作容易踏空指标组合实战建议搭配MACD、成交量使用单独布林线信号可靠性较低。七、总结本文通过Pythonpandas完整复现布林线指标数学公式实现了行情获取、指标批量计算、可视化绘图全流程。核心难点在于滑动窗口的顺序处理与标准差公式落地代码封装成独立函数后可快速嵌入量化回测、自动化选股系统。基于这套框架可继续拓展布林线金死叉策略回测、多股票批量遍历计算、实时行情分钟线布林指标等进阶量化功能。