5、布林带策略:中轨、上下轨计算,突破信号与回归信号
布林带这东西,说白了就是一个动态的「价格通道」。它不像固定支撑阻力线那样死板,而是根据市场波动率自己调整宽窄。我个人习惯把它叫做「会呼吸的通道」——市场安静时收窄,躁动时张开。
嗯,咱们直接进入正题。布林带的核心就三根线:中轨、上轨、下轨。中轨是基础,上下轨是边界。
5.1 中轨与上下轨的计算
中轨其实就是一个简单移动平均线(SMA),周期我一般用20。为什么是20?因为一个月大概有20个交易日,能较好地反映中期趋势。
上下轨的计算公式:
- 中轨 = SMA(close, 20)
- 上轨 = 中轨 + k × 标准差(close, 20)
- 下轨 = 中轨 - k × 标准差(close, 20)
这里的k值,经典取值是2。但我在高频数据里发现,k=2.5或1.8有时效果更好。为什么?因为高频数据噪声大,k值太小容易频繁触发假信号。
来看代码实现:
import numpy as np
import pandas as pd
def bollinger_bands(df, window=20, k=2):
"""
计算布林带
df: 包含'close'列的DataFrame
"""
df = df.copy()
df['middle'] = df['close'].rolling(window=window).mean()
df['std'] = df['close'].rolling(window=window).std()
df['upper'] = df['middle'] + k * df['std']
df['lower'] = df['middle'] - k * df['std']
return df
# 示例用法
# df = bollinger_bands(df, window=20, k=2)
这里有个坑,我踩过。rolling计算标准差时,默认是样本标准差(ddof=1)。但在高频数据里,用总体标准差(ddof=0)有时更稳定。你自己试试看,不同选择对信号触发频率影响挺大的。
5.2 突破信号:价格冲出通道
突破信号分两种:向上突破和向下突破。
- 向上突破信号:收盘价 > 上轨。意味着价格强势,可能继续上涨。
- 向下突破信号:收盘价 < 下轨。意味着价格弱势,可能继续下跌。
但注意,单纯的突破信号在震荡市里就是灾难。我曾经在横盘行情里用突破信号做交易,一天被来回打脸三次。后来我加了一个过滤条件:突破时布林带宽度必须大于某个阈值。
代码实现突破信号检测:
def detect_breakout(df, k=2):
"""
检测突破信号
返回:1=向上突破,-1=向下突破,0=无信号
"""
df = bollinger_bands(df, k=k)
df['signal'] = 0
# 向上突破
df.loc[df['close'] > df['upper'], 'signal'] = 1
# 向下突破
df.loc[df['close'] < df['lower'], 'signal'] = -1
return df
5.3 回归信号:价格回到通道内
回归信号是布林带策略的精髓。它基于一个假设:价格偏离均值太远后,会向均值回归。
- 回归买入信号:价格跌破下轨后,重新回到下轨上方。意味着超卖反弹。
- 回归卖出信号:价格突破上轨后,重新回到上轨下方。意味着超买回落。
说白了,就是「涨多了会跌,跌多了会涨」。但这里有个度的问题。我记得有一次做股指期货,价格连续三天贴着上轨跑,我一直在等回归信号,结果等来了爆仓。趋势行情里,回归信号会让你死得很惨。
回归信号检测代码:
def detect_reversion(df, k=2):
"""
检测回归信号
返回:1=回归买入,-1=回归卖出,0=无信号
"""
df = bollinger_bands(df, k=k)
df['signal'] = 0
# 回归买入:之前跌破下轨,现在回到下轨上方
df['below_lower'] = df['close'] < df['lower']
df['reversion_buy'] = df['below_lower'].shift(1) & (df['close'] > df['lower'])
# 回归卖出:之前突破上轨,现在回到上轨下方
df['above_upper'] = df['close'] > df['upper']
df['reversion_sell'] = df['above_upper'].shift(1) & (df['close'] < df['upper'])
df.loc[df['reversion_buy'], 'signal'] = 1
df.loc[df['reversion_sell'], 'signal'] = -1
return df
5.4 布林带策略知识体系
下面这张图,是我自己梳理的布林带策略核心逻辑。你看一眼就能明白整个框架:
5.5 实战中的参数调优
参数调优是布林带策略的灵魂。我整理了一个参数对比表,供你参考:
| 参数 | 默认值 | 高频数据建议 | 说明 |
|---|---|---|---|
| 窗口期 | 20 | 10-15 | 高频数据周期短,窗口太大反应迟钝 |
| k值 | 2 | 1.5-2.5 | 噪声大用大k,噪声小用小k |
| 标准差类型 | 样本标准差 | 总体标准差 | 高频数据用总体标准差更稳定 |
| 信号过滤 | 无 | 成交量+带宽 | 过滤掉80%的假信号 |
最后说一句,布林带策略不是万能钥匙。它最适合震荡行情,在趋势行情里要搭配其他指标使用。比如加上ADX指标判断趋势强度,或者用RSI过滤极端值。这些组合策略,咱们后面章节会详细讲。