作者:老余捞鱼
原创不易,转载请标明出处及原作者。

文中示例仅用于技术讨论,不构成任何操作建议。
量化策略开发应以学习和技术交流为目的。
本号不荐股、不卖课、不承诺收益。
市场有风险,请合法合规投资。
本文约 2800 字 | 阅读预计需 5 分钟
· · ·
在TradingView上刷到一个叫Modern Bollinger Bands [GBB]的指标。第一眼看我以为就是普通的布林带改了个皮肤,点进去看了源码才发现,底下藏了五层结构。
自适应周期检测、KAMA均线替代简单平均、百分位带宽替代标准差倍数、状态切换过滤器、挤压检测器。外加三套信号体系:区间回归、趋势跟踪、挤压突破。每个信号都有多空双向提醒。

这种指标在图表上看着很漂亮,但”看着漂亮”和”能赚钱”是两回事。
事后看图找入场点,谁都会。真正的问题是:如果把它写成交易规则,然后自动执行27年,结果怎么样?
接下来我会把Pine Script逐行翻成Python,然后用vectorbt跑了一遍回测,整个过程、数据和结果分享给大家。
一、这个GBB指标到底改了什么
传统布林带三条线:中轨是简单移动平均,上下轨是标准差倍数。用了几十年,问题也很明显。固定周期对趋势和震荡一视同仁,标准差假设价格服从正态分布(但实际不是),参数调来调去容易过拟合。
GBB的五层改良,一层一层解决这些问题:
| 层级 | 传统布林带 | GBB改良 |
|---|---|---|
| 周期 | 固定20日 | Ehlers风格周期检测,自适应调整 |
| 中轨 | 简单移动平均 | Kaufman自适应移动平均(KAMA) |
| 带宽 | 标准差 × 固定倍数 | 历史价格百分位(经验分布) |
| 状态 | 无 | 趋势/震荡双模式切换 |
| 挤压 | 无 | 波动率压缩检测,预警突破 |
简单说,这已经不是”布林带皮肤包”,而是把布林带拆开,每个零件都换成了更现代的版本。KAMA均线比简单平均对噪音更鲁棒,百分位带宽比标准差更贴近实际价格分布,状态切换让指标在趋势和震荡市场用不同的逻辑说话。
但零件升级不等于系统好用。五层结构意味着五个地方可能出错,五个地方可能过拟合,就需要用数据说话。
二、回测设计
这里有一个关键细节:GBB本身只是个指标,没有内置策略逻辑。它输出的是 提醒条件(alert conditions),不是 buy/sell 信号。所以需要做额外的规则设计:
- 三个做多信号(区间回归、趋势延续、挤压突破)合并成一个入场条件;
- 三个做空信号合并成一个出场条件;
- 只做多头测试,做空信号仅用于平掉多头仓位;
- 所有信号向前偏移一根K线,确保在下一根开盘价成交,避免未来函数。
测试标的:SBAC(SBA Communications,一家REIT),1999年到2026年,日线数据。
为什么选SBAC? REIT的波动特性介于股票和债券之间,如果指标在这种资产上有效,说明它对不同波动体制有一定适应性。但单品种测试的局限性,后面会细说。
三、27年回测结果
直接上数字:
| 指标 | GBB策略 | 买入并持有 |
|---|---|---|
| 总收益 | 3,578.6% | 2,121.9% |
| 交易次数 | 89笔 | — |
| 胜率 | 48.3% | — |
| 平均盈利 | +19.6% | — |
| 平均亏损 | -6.1% | — |
| 最佳单笔 | +176.3% | — |
| 最差单笔 | -21.9% | — |
| 盈亏比 | 3.2 : 1 | — |
| 利润因子 | 1.26 | — |
| 夏普比率 | 0.66 | — |
| 索提诺比率 | 1.14 | — |
| 卡玛比率 | 0.32 | — |
| 最大回撤 | 67.5% | — |
| 回撤持续时间 | 约2,915天(近8年) | — |
权益曲线跑赢了买入并持有,PnL分布也呈现”肥尾盈利 + 小亏频繁”的形状,这是趋势/状态切换类策略的典型特征。从这一点看,指标的设计逻辑在数据上得到了一定验证。

SBAC 27年回测完整图表:净值曲线、回撤、买卖点、交易盈亏分布
但有几个数字需要我们再认真分析分析。
四、数字背后的三个问题
1. 67.5%的最大回撤意味着什么
这不是”账面浮亏”的概念。67.5%意味着策略在某个时间点损失了超过三分之二的累计收益,而且这个过程持续了将近8年。
想象一下:你2010年开户,按照规则执行,到2018年还在回本路上。中间任何一年都可能怀疑策略是不是失效了,是不是该停掉。这种心理压力,不是回测报告里的一行数字能传达的。
卡玛比率0.32也印证了这一点。卡玛 = 年化收益 / 最大回撤,0.32意味着每承担1%的回撤,只换来0.32%的年化收益。这个效率在量化策略里属于偏低的水平。
2. 夏普0.66,不算高
夏普比率衡量的是每单位总风险带来的超额收益。在实盘里,0.66这个数值意味着波动很大,收益不够稳定。索提诺1.14稍好一些,说明下行风险的控制比总风险好一些,但整体仍然偏温和。
利润因子1.26,意思是每亏1块钱,赚回来1.26块。这个数值在趋势策略里不算出色,很多成熟CTA策略的利润因子在1.5-2.0之间。
3. 单品种、全样本、参数多
这是最容易被忽略的问题。测试只在SBAC一个品种上跑,时间跨度27年但用的是全样本,没有留出一部分数据做样本外验证。指标本身有多个可调参数(周期边界、百分位、状态阈值、挤压阈值),这种”多参数 + 单品种 + 全样本”的组合,是过拟合的高发区。
一个指标在一只REIT上表现好,不代表它在科技股、商品、外汇上也好。全样本回测相当于”开卷考试”,你真正的考验是样本外数据。
五、6项压力测试清单
在把真金白银放进去之前,这6项检查缺一不可:
- 跨品种测试:不要只跑一只REIT,至少覆盖不同 sector 的20-30个品种
- 多周期验证:日线之外,试试周线、4小时线,看策略是否依赖特定周期
- 样本外检验:把数据切成训练集和测试集,训练集调参,测试集验证
- 参数敏感性:把每个参数上下浮动20%,看结果是否剧烈变化
- 成本压力测试:加入滑点、佣金、冲击成本,看净利润是否还能覆盖
- 做空侧验证:本文只测了多头,空头信号作为独立策略的表现未知
这6项是”门槛”,任何一项没通过,策略都不应该进入实盘候选名单。
六、观点总结
GBB这个指标的设计思路确实有它的道理。五层改良并不是为了显得高级而硬凑出来的,每一层都在解决传统布林带存在的某个实际问题。这种“发现问题再动手改”的做法,比那种“我觉得加个滤波器看起来顺眼”的随手调整要靠谱得多。
不过回测结果也提醒了我们一件事:指标改来改去,能带来的收益提升其实越来越有限。你把简单平均换成KAMA,把标准差换成百分位,把固定周期换成自适应检测,这些改动确实让指标变得更“聪明”了,对行情的反应也更灵敏。但聪明归聪明,能不能赚钱是另一回事。特别是在没有严格风控的情况下,单品种、只做多,再好的指标也扛不住市场的折腾。
67.5%的回撤就是个很刺眼的警告。它说白了就是:你的指标再精准,仓位怎么下、亏到什么时候该跑,这些没跟上,最后的结果照样让人扛不住。
七、代码下载
下面是完整代码的免费下载,包括Python移植版、单品种回测和指标可视化等。
https://www.laoyulaoyu.com/code/gbb.zip
你做过最完整的回测验证是什么?
是单品种全样本,还是跨品种样本外?欢迎在评论区聊聊你的经验。
#布林带指标 #量化回测 #TradingView #Python量化 #技术指标改良 #KAMA均线 #波动率策略 #回测陷阱 #vectorbt #策略验证
Be First to Comment