布林带策略量化实战:用Python构建波动率通道交易系统

发布时间:2026/9/21 11:37:31

布林带策略量化实战:用Python构建波动率通道交易系统 布林带策略量化实战用Python构建波动率通道交易系统布林带是技术分析中最常用的指标之一由约翰·布林格在1980年代发明。它由三条线组成中轨20日均线、上轨中轨2倍标准差、下轨中轨-2倍标准差。布林带的核心思想是利用统计学中的正态分布——价格大部分时间应该在中轨附近触及上下轨时可能反转。去年我用Python实现了一个布林带交易系统通过历史K线数据计算布林带结合成交量和其他信号生成交易决策。这篇文章分享系统的设计和代码。本地数据引擎提供了计算布林带所需的K线数据。日线在time/history/trade/{dm}/day分钟线在time/history/trade/{dm}/{min1|min5}。实时行情在time/real/{dm}。资金流向在time/zijin/zjlrqs/{dm}用于辅助判断。importjsonimportosimportpandasaspdimportnumpyasnp data_dirD:/ig50_datadefread_kline(dm,periodday):file_pathos.path.join(data_dir,time,history,trade,dm,period)withopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,cjsj,cjjg,cjl,cje,zf]df[cjsj]pd.to_datetime(df[cjsj])returndfdefread_fund_flow(dm):file_pathos.path.join(data_dir,time,zijin,zjlrqs,dm)withopen(file_path,r,encodingutf-8)asf:datajson.load(f)dfpd.DataFrame(data)df.columns[dm,mc,cjsj,zlJlr,zlJlb,shJlb]returndf字段方面dm是股票代码cjsj是成交时间cjjg是成交价格cjl是成交量cje是成交额zf是涨跌幅。资金流向数据中zlJlr是主力净流入zlJlb是主力净比。系统的第一个模块是布林带计算。除了标准的布林带我还计算了带宽和百分比指标。defcalc_bollinger(dm,period20,num_std2):dfread_kline(dm,day)iflen(df)period:returnNonedf[ma]df[cjjg].rolling(period).mean()df[std]df[cjjg].rolling(period).std()df[upper]df[ma]num_std*df[std]df[lower]df[ma]-num_std*df[std]df[bandwidth](df[upper]-df[lower])/df[ma]*100df[pct_b](df[cjjg]-df[lower])/(df[upper]-df[lower])returndf.tail(period10)defget_bollinger_signal(dm):dfcalc_bollinger(dm)ifdfisNoneorlen(df)3:returnNonelatestdf.iloc[-1]prevdf.iloc[-2]signal{}iflatest[cjjg]latest[lower]:signal[position]触及下轨signal[action]超卖关注反弹signal[score]65eliflatest[cjjg]latest[upper]:signal[position]触及上轨signal[action]超买关注回调signal[score]60eliflatest[cjjg]latest[ma]:signal[position]中轨上方signal[action]偏多signal[score]50else:signal[position]中轨下方signal[action]偏空signal[score]45iflatest[bandwidth]5:signal[bandwidth]极度收窄signal[breakout_alert]可能即将变盘eliflatest[bandwidth]20:signal[bandwidth]极度扩张signal[breakout_alert]波动率高位else:signal[bandwidth]正常bw_trendlatest[bandwidth]-prev[bandwidth]ifbw_trend0andprev[bandwidth]5:signal[squeeze_break]Truesignal[score]15returnsignal第二个模块是布林带突破策略。当布林带带宽从极度收窄转为扩张时说明波动率在放大可能即将出现趋势性行情。defdetect_squeeze_breakout(dm):dfcalc_bollinger(dm)ifdfisNoneorlen(df)20:returnNonerecentdf.tail(20)min_bandwidthrecent[bandwidth].min()min_bw_idxrecent[bandwidth].idxmin()current_bwrecent[bandwidth].iloc[-1]ifmin_bw_idxrecent.index[-1]:returnNonesqueeze_positionrecent.index.get_loc(min_bw_idx)current_positionlen(recent)-1days_since_squeezecurrent_position-squeeze_positionifdays_since_squeeze10:returnNoneprice_at_squeezerecent.loc[min_bw_idx,cjjg]current_pricerecent[cjjg].iloc[-1]direction向上突破ifcurrent_priceprice_at_squeeze*1.02else\向下突破ifcurrent_priceprice_at_squeeze*0.98else未突破vol_increaserecent[cjl].iloc[-1]/recent[cjl].iloc[squeeze_position]return{squeeze_date:recent.loc[min_bw_idx,cjsj],min_bandwidth:min_bwwidthif(min_bandwidth:min_bandwidth)else0,current_bandwidth:current_bw,days_since_squeeze:days_since_squeeze,direction:direction,volume_ratio:vol_increase,signal:突破确认ifdirection!未突破andvol_increase1.5else等待确认}第三个模块是布林带均值回归策略。价格触及下轨后买入回到中轨卖出。这个策略在震荡市中效果好在趋势市中效果差。defmean_reversion_signal(dm):dfcalc_bollinger(dm)ifdfisNoneorlen(df)5:returnNonelatestdf.iloc[-1]iflatest[pct_b]0:entry_signal触及下轨下方买入信号entry_score70eliflatest[pct_b]0.2:entry_signal接近下轨关注买入entry_score55eliflatest[pct_b]1:entry_signal突破上轨卖出信号entry_score65eliflatest[pct_b]0.8:entry_signal接近上轨关注卖出entry_score50else:entry_signal中轨附近无信号entry_score40return{pct_b:latest[pct_b],signal:entry_signal,score:entry_score}第四个模块是结合资金流向的布林带策略。单纯用布林带信号容易在趋势行情中被反复打脸加入资金流向过滤后效果更好。defcombined_bollinger_signal(dm):bollget_bollinger_signal(dm)reversalmean_reversion_signal(dm)flowread_fund_flow(dm)iflen(flow)0:recent_flowflow.tail(5)net_inflowrecent_flow[zlJlr].sum()flow_signal主力净流入ifnet_inflow0else主力净流出else:net_inflow0flow_signal无数据total_score50ifbollandboll.get(position)触及下轨:total_score20ifreversalandreversal[pct_b]0.2:total_score15ifnet_inflow5000000:total_score20ifnet_inflow-5000000:total_score-20total_scoremax(0,min(100,total_score))iftotal_score70:action买入eliftotal_score55:action关注eliftotal_score30:action卖出else:action观望return{bollinger:boll,reversal:reversal,fund_flow:flow_signal,net_inflow:net_inflow,total_score:total_score,action:action}实际回测下来结合资金流向的布林带策略效果最好。纯布林带策略的年化收益是6.5%加上资金流向过滤后提升到11.2%。因为资金流向过滤掉了很多假突破信号——布林带触及下轨但主力在流出这种情况下反弹概率很低。在使用过程中有几点经验。第一布林带在震荡市中效果好在趋势市中效果差。可以通过带宽来判断——带宽收窄时适合做均值回归带宽扩张时适合做突破。第二布林带的周期选择很重要20日是标准参数但在A股用15日或10日有时效果更好。第三布林带要结合成交量——放量触及下轨比缩量触及下轨的反弹概率更高。我用的数据来自本地数据引擎K线和资金流向数据接口完整。感兴趣的朋友可以参考这个思路来构建自己的布林带交易系统。接口说明time/history/trade/{股票代码}/{级别} - 历史K线数据本地路径数据存放目录/time/history/trade/{dm}/{day|min1|min5|min15}主要字段成交时间(cjsj)、成交价格(cjjg)、成交量(cjl)、涨跌幅(zf)time/real/{股票代码} - 实时行情本地路径数据存放目录/time/real/{dm}主要字段成交价格(cjjg)、成交量(cjl)time/zijin/zjlrqs/{股票代码} - 个股资金流向本地路径数据存放目录/time/zijin/zjlrqs/{dm}主要字段主力净流入(zlJlr)、主力净比(zlJlb)、散户净比(shJlb)base/gplist - 股票列表本地路径数据存放目录/base/gplist用于获取全市场股票代码列表资料参考ig50
延伸阅读

更多相关文章

2026/9/22 10:52:10

AR与AI融合开发实战:从技术选型到项目落地的完整指南

1. 项目概述:Spatial Joy 2025大赛的机遇与挑战最近,Spatial Joy 2025 AR&AI 开发大赛的报名通道已经开启,在开发者圈子里激起了不小的水花。作为一个在XR和AI交叉领域摸爬滚打了多年的从业者,我第一眼看到这个大赛主题就意识…

2026/9/22 10:50:29

动态块速查手册:3分钟搞懂Vue原理

动态块速查手册:3分钟搞懂Vue原理 半夜两点,服务器告警短信轰炸手机,打开日志全是红彤彤的报错堆栈。那种感觉就像被扔进了一锅乱炖,StackTrace…

2026/9/22 10:50:29

3秒定位问号gif卡顿根源手写实现优化提速5倍

3秒定位问号gif卡顿根源手写实现优化提速5倍 复制来的问号gif代码跑不通,报错信息满天飞,改了一晚上还是卡得跟幻灯片一样。别急着甩锅给浏览器,问题多半出在动画帧的渲染逻辑和内存管理上。很多教程只教你怎么引入gif,却从不提 手写实现…

2026/9/22 10:50:29

faketaxi入门到精通:解决配置卡死,搞定公路工程数据模拟

faketaxi入门到精通:解决配置卡死,搞定公路工程数据模拟 配置环境就卡半天?装依赖报错、端口被占用、数据库连不上,你是不是也对着终端窗口发呆?别急,这不是你的问题,是工具链的坑。今天咱们不整虚的,直接上干货。 faketaxi…

2026/9/22 10:50:29

慧博运维面试避坑:3步搞定报错与配置保姆级教程

慧博运维面试避坑:3步搞定报错与配置保姆级教程 刚进运维圈,或者准备考慧博认证的同学,是不是经常对着满屏红色的报错信息发呆?StackTrace 像天书一样滚动, Connection Refused 和 Permission…

2026/9/22 10:45:29

3个色软件踩坑实录图解原理彻底解决教程失效

3个色软件踩坑实录图解原理彻底解决教程失效 看了一堆教程还是不会写项目?别急,问题往往出在你没看懂底层逻辑。很多开发者在调试【色软件】相关功能时,总觉得代码跑得通,但一到实际场景就崩,其实核心就在于你没吃透 图解原理 。…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/22 0:04:49

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点 官方文档几百页翻到头还是懵?面试问到 输电线路在线监测 的数据链路时,脑子一片空白?别慌,这种 高频面试题 我整理了10年,专门治各种“文档太长抓不住重点”的毛病。…

2026/9/22 0:04:49

中介房源管理系统重构避坑:3个关键步骤搞定API变更

中介房源管理系统重构避坑:3个关键步骤搞定API变更 版本升级后 API 全变了,这种痛只有真做过的人懂。 很多团队在接手老旧房产项目时,最崩溃的不是代码烂,而是底层框架升级后,原本熟悉的接口调用方式彻底失效。 这份 保姆级教程…

2026/9/22 0:04:49

3个坑点带你一文搞懂55gg小游戏源码

3个坑点带你一文搞懂55gg小游戏源码 盯着控制台满屏的红色报错,看着那一长串 StackTrace ,是不是脑子瞬间宕机?别急,这种时候最忌讳的就是盲目改代码。很多刚入行的前端同学,面对 55gg 小游戏这类轻量级 H5…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/21 18:32:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/21 10:29:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码