📑 查看全课大纲(第 14 / 38 节)
- 1.课程介绍与学习目标
- 2.量化交易的发展
- 3.主观投资与量化投资的关系
- 4.认识一个量化策略(1)
- 5.认识一个量化策略(2)
- 6.理工生做量化的优势
- 7.量化交易系统的基本架构
- 8.必要的交易基础知识及参考资料
- 9.上节课思考题及本节课内容介绍
- 10.技术指标简介
- 11.基于MACD的交易信号开发(1)
- 12.基于MACD的交易信号开发(2)
- 13.基于RSI的交易信号开发
- 14.基于BOLL的交易信号开发
- 15.基于分形的交易信号开发
- 16.总结及下节课预告
- 17.开发环境安装
- 18.获取指数和个股历史行情数据
- 19.修复行情数据中的问题
- 20.抓取财报数据、数据定时更新
- 21.实现低PE股票池(1)
- 22.实现低PE股票池(2)
- 23.实现低PE策略的回测(1)
- 24.实现低PE策略的回测(2)
- 25.风险控制综述
- 26.风险控制中的止盈止损
- 27.仓位管理的工程实现
- 28.完整策略介绍-基础策略
- 29.策略的分步优化
- 30.策略评价指标(1)
- 31.策略评价指标(2)
- 32.如何评价策略
- 33.如何优化策略
- 34.tick数据的意义
- 35.tick数据的介绍及使用
- 36.Hans123策略
- 37.经典买入三法策略
- 38.量化系统的完整研发和系统搭建
基于BOLL的交易信号开发
约 9 分钟
基于BOLL的交易信号开发
小象实战讲义 · 初阶量化交易:策略编写及系统搭建 本讲义仅用于编程与量化方法教学,不构成任何投资建议。
在统计套利与通道突破策略中,BOLL(Bollinger Bands,布林线) 是极具数理优雅感的自适应指标。它由约翰·布林格(John Bollinger)于 1980 年代创立,基于统计学中正态分布与标准差(Standard Deviation) 原理,在均线两端构建动态置信区间通道。
与固定宽度的传统包络线不同,布林带通道宽度会随着标的历史波动率自适应收缩与扩张。本讲将系统解析布林带三大轨道的数学构建逻辑;重点剖析量化实盘中利用前一日轨道消除盘中信号闪烁(Anti-flickering) 的工程架构方案;并给出突破上下轨的信号提取与数据库落库实现。
💡 核心导读
- BOLL 指标的三大轨道与数学公式(经典参数:):
- 中轨(MB, Middle Band):过去 日收盘价的简单移动平均:
- 样本标准差( / STD):
- 上轨(UP, 动态压力线):
- 下轨(DOWN, 动态支撑线):
- 带宽指标(BandWidth):,直接反映市场波动率大小。
- 盘中信号防闪烁工程设计(Anti-flickering Design):
- 盘中实时价格跳变频繁,若以当日未定格的 实时判定,信号会出现反复闪烁(产生大量假单);
- 工程解决方案:采用 日已收盘固定的 与 作为当日突破比对基准线,消除信号闪烁;
- 两大核心交易逻辑分支:
- 动量突破策略(Trend Following):低波动挤压(Squeeze)后,价格强势向上刺破上轨(),预示主升浪开启,顺势追买;
- 均值回归策略(Mean Reverting):震荡市中,价格击穿下轨()后大概率向中轨均值回归反弹,逆势低吸。
┌─────────────────────────────────────────────────────────────┐
│ BOLL 布林通道三轨与波动率自适应 │
└──────────────────────────────┬──────────────────────────────┘
│
┌─────────────────────────────┴─────────────────────────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ 上轨: MB + 2σ │ ─── 压力带 (95.4% 概率置信上限) │ 通道收窄 (Squeeze)│
├──────────────────┤ ├──────────────────┤
│ 中轨: MA20 │ ─── 价值中枢 (趋势基准线) │ • 波动率极度压缩 │
├──────────────────┤ │ • 预示大变盘在即 │
│ 下轨: MB - 2σ │ ─── 支撑带 (95.4% 概率置信下限) │ • 突破即单边主升 │
└──────────────────┘ └──────────────────┘一、布林带的统计学原理与动态带宽
1. 正态分布置信区间的数理内涵
在统计学中,若价格服从均值为 、方差为 的分布:
- 价格落在 内的理论概率约为 68.2%;
- 价格落在 内的理论概率约为 95.4%;
- 价格落在 内的理论概率约为 99.7%。
因此, 的上轨与下轨构成了常态下 95% 以上价格波动的天然包络线。一旦价格有效穿越该边界,往往意味着小概率极端行情的爆发。
2. 波动率挤压(The Bollinger Squeeze)
当市场陷入长时间缩量震荡时, 极速衰减,上下轨急剧向中轨靠拢,带宽百分比降至历史极低分位。历史规律表明:波动率具有强烈的均值回归特征,极度的波动率挤压必然伴随着单边爆发性趋势的来临。
二、防闪烁突破判定与代码实现
为防止盘中价格未定格时因上轨动态变化引起信号高频闪烁,量化系统统一采用平移一期的基准线对比:
t = (Close{t-1} \le UP_{t-1}) \land (Close_t > UP_{t-1})
t = (Close{t-1} \ge DOWN_{t-1}) \land (Close_t < DOWN_{t-1})
📝 动手练一练
下面我们用 Python 编写一段 BOLL 布林通道与防闪烁上下轨突破信号计算引擎,验证价格在低波动整理后向上暴力突破上轨的精准识别:
import pandas as pd
import numpy as np
def compute_boll_signals(df, n=20, k=2.0):
"""
计算布林带 (BOLL) 三轨指标与防闪烁上下轨突破信号
"""
df = df.copy()
# 1. 计算中轨 (N 日收盘均线) 与 滚动样本标准差
df['MB'] = df['Close'].rolling(n).mean()
df['STD'] = df['Close'].rolling(n).std()
# 2. 计算上轨、下轨与动态带宽百分比
df['UP'] = df['MB'] + k * df['STD']
df['DOWN'] = df['MB'] - k * df['STD']
df['BandWidth'] = (df['UP'] - df['DOWN']) / df['MB'] * 100.0
# 3. 防闪烁设计: 基于 t-1 日固定的上下轨进行边沿突破判定
df['Last_Close'] = df['Close'].shift(1)
df['Shifted_UP'] = df['UP'].shift(1)
df['Shifted_DOWN'] = df['DOWN'].shift(1)
# 向上突破上轨: 前一日在轨下,当日穿到轨上
df['Break_UP'] = (df['Last_Close'] <= df['Shifted_UP']) & (df['Close'] > df['Shifted_UP'])
# 向下跌破下轨: 前一日在轨上,当日跌到轨下
df['Break_DOWN'] = (df['Last_Close'] >= df['Shifted_DOWN']) & (df['Close'] < df['Shifted_DOWN'])
return df
def test_boll_run():
np.random.seed(42)
n_days = 30
dates = pd.date_range("2023-01-01", periods=n_days, freq="D")
# 构造稳定窄幅横盘后突发强力向上暴涨突破的价格时序
base_prices = np.full(n_days, 10.0) + np.random.normal(0, 0.2, n_days)
base_prices[24:] += np.array([1.0, 1.8, 2.5, 3.2, 3.8, 4.5]) # 模拟突破拉升
df = pd.DataFrame({'Close': base_prices}, index=dates)
res = compute_boll_signals(df, n=15, k=2.0)
break_ups = res[res['Break_UP']].index.strftime('%Y-%m-%d').tolist()
break_downs = res[res['Break_DOWN']].index.strftime('%Y-%m-%d').tolist()
print("================ BOLL 布林通道与突破信号引擎 ================")
print(res[['Close', 'MB', 'UP', 'DOWN', 'BandWidth', 'Break_UP', 'Break_DOWN']].tail(8))
print("------------------------------------------------------------")
print(f"检测到 BOLL 向上突破上轨日期: {break_ups}")
print(f"检测到 BOLL 向下跌破下轨日期: {break_downs}")
print("============================================================")
if __name__ == "__main__":
test_boll_run()运行结果输出:
================ BOLL 布林通道与突破信号引擎 ================
Close MB UP DOWN BandWidth Break_UP Break_DOWN
2023-01-23 10.013506 9.912985 10.271795 9.554175 7.239192 False False
2023-01-24 9.715050 9.900248 10.273383 9.527113 7.537888 False False
2023-01-25 10.891123 9.952422 10.581465 9.323380 12.640995 True False
2023-01-26 11.822185 10.080080 11.230789 8.929370 22.831344 False False
2023-01-27 12.269801 10.237610 11.843590 8.631630 31.374107 False False
2023-01-28 13.275140 10.452727 12.690311 8.215144 42.813418 False False
2023-01-29 13.679872 10.723562 13.456435 7.990689 50.969498 False False
2023-01-30 14.441661 11.042672 14.306985 7.778359 59.121798 False False
------------------------------------------------------------
检测到 BOLL 向上突破上轨日期: ['2023-01-25']
检测到 BOLL 向下跌破下轨日期: []
============================================================本章小结
- 掌握布林带统计内涵:均线代表价值中枢,两倍标准差上下轨提供动态波动的包络线。
- 防闪烁工程设计:实盘与回测判定突破时,使用上一交易日已收盘定型的轨道作为比对基准线,确保信号稳定性。
- 重视波动率挤压形态:通道收窄至极值往往是重大单边行情的蓄势期,突破瞬间是胜率极高的顺势入场点。
📋 行动清单 (Action Checklist)
- 运行本讲 BOLL 引擎代码,观察突破发生后
BandWidth从 7.2% 迅速扩张至 59.1% 的动态过程; - 尝试将倍数 从 2.0 调整至 1.5 和 2.5,对比突破信号灵敏度与虚假突破的比例;
- 预习下一讲,探索非线性形态识别指标——分形(Fractal)顶底结构的量化开发。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问