布林帶策略量化實戰(zhàn):用Python構建波動率通道交易系統(tǒng)
布林帶策略量化實戰(zhàn)用Python構建波動率通道交易系統(tǒng)布林帶是技術分析中最常用的指標之一由約翰·布林格在1980年代發(fā)明。它由三條線組成中軌20日均線、上軌中軌2倍標準差、下軌中軌-2倍標準差。布林帶的核心思想是利用統(tǒng)計學中的正態(tài)分布——價格大部分時間應該在中軌附近觸及上下軌時可能反轉。去年我用Python實現了一個布林帶交易系統(tǒng)通過歷史K線數據計算布林帶結合成交量和其他信號生成交易決策。這篇文章分享系統(tǒng)的設計和代碼。本地數據引擎提供了計算布林帶所需的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是主力凈比。系統(tǒng)的第一個模塊是布林帶計算。除了標準的布林帶我還計算了帶寬和百分比指標。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線和資金流向數據接口完整。感興趣的朋友可以參考這個思路來構建自己的布林帶交易系統(tǒng)。接口說明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年針對語音芯片生產廠家的選型剛需:正規(guī)企業(yè)核心標準、行業(yè)痛點梳理與避坑要點全解析

2026年針對語音芯片生產廠家的選型剛需:正規(guī)企業(yè)核心標準、行業(yè)痛點梳理與避坑要點全解析

2026年針對語音芯片生產廠家的選型剛需:正規(guī)企業(yè)核心標準、行業(yè)痛點梳理與避坑要點全解析 2026年,國內智能硬件、汽車電子、醫(yī)療設備等領域的升級需求帶動語音芯片采購量持續(xù)攀升,不少剛接觸供應鏈的采購、產品或研發(fā)人員,首次面臨…

2026/8/4 9:02:59 閱讀更多
探秘LED海報顯示屏工廠:先進工藝與智能生產的幕后真相

探秘LED海報顯示屏工廠:先進工藝與智能生產的幕后真相

在當今數字化時代,海報屏作為信息傳播的重要載體,在商業(yè)、廣告等領域發(fā)揮著關鍵作用。然而,海報屏領域也面臨著諸多技術挑戰(zhàn)。一、行業(yè)痛點分析傳統(tǒng)LED海報屏存在安裝繁瑣、成本高的問題。數據表明,傳統(tǒng)屏的安裝和拆裝成本可占總成…

2026/8/4 8:52:59 閱讀更多
期貨量化交易中過擬合的識別與防范策略

期貨量化交易中過擬合的識別與防范策略

1. 期貨量化交易中的過擬合陷阱 做量化交易的朋友都知道,策略失效是最大的噩夢。去年我團隊開發(fā)的一個CTA策略,在回測階段年化收益高達80%,結果實盤運行三個月就虧掉了20%的本金。復盤時發(fā)現,這個策略完美擬合了歷史數據中的特定波…

2026/8/4 10:13:01 閱讀更多
2027 甘肅工業(yè)裝備與智能制造展覽會

2027 甘肅工業(yè)裝備與智能制造展覽會

智造隴原?裝備西北|2027 甘肅工業(yè)裝備與智能制造展覽會全面開啟招展工作 順應制造業(yè)智能化、綠色化發(fā)展趨勢,助力甘肅省 “強工業(yè)” 行動落地實施,2027 甘肅工業(yè)裝備與智能制造展覽會(GIME2027)定檔 2027 年 5 月 14 …

2026/8/4 10:13:01 閱讀更多
SpringBoot寵物游戲平臺開發(fā)指南與實戰(zhàn)

SpringBoot寵物游戲平臺開發(fā)指南與實戰(zhàn)

1. 項目概述 "基于SpringBoot的購買狗線上游戲平臺"是一個典型的Java畢業(yè)設計選題,它結合了當前流行的電商平臺和寵物養(yǎng)成游戲的特性。這個選題之所以適合作為畢業(yè)設計,是因為它涵蓋了企業(yè)級應用開發(fā)的多個核心模塊:用戶系統(tǒng)、商品…

2026/8/4 10:13:01 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/3 12:53:38 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產的一款用于半導體設備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/3 19:34:52 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機,適用于自動化設備及通用機械驅動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/3 19:34:54 閱讀更多