Skip to content

别再用传统布林带了,先看这个TradingView上的改良版(附完整代码下载)

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

文中示例仅用于技术讨论,不构成任何操作建议。
量化策略开发应以学习和技术交流为目的。
本号不荐股、不卖课、不承诺收益。
市场有风险,请合法合规投资。

本文约 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项检查缺一不可:

  1. 跨品种测试:不要只跑一只REIT,至少覆盖不同 sector 的20-30个品种
  2. 多周期验证:日线之外,试试周线、4小时线,看策略是否依赖特定周期
  3. 样本外检验:把数据切成训练集和测试集,训练集调参,测试集验证
  4. 参数敏感性:把每个参数上下浮动20%,看结果是否剧烈变化
  5. 成本压力测试:加入滑点、佣金、冲击成本,看净利润是否还能覆盖
  6. 做空侧验证:本文只测了多头,空头信号作为独立策略的表现未知

这6项是”门槛”,任何一项没通过,策略都不应该进入实盘候选名单。

六、观点总结

GBB这个指标的设计思路确实有它的道理。五层改良并不是为了显得高级而硬凑出来的,每一层都在解决传统布林带存在的某个实际问题。这种“发现问题再动手改”的做法,比那种“我觉得加个滤波器看起来顺眼”的随手调整要靠谱得多。

不过回测结果也提醒了我们一件事:指标改来改去,能带来的收益提升其实越来越有限。你把简单平均换成KAMA,把标准差换成百分位,把固定周期换成自适应检测,这些改动确实让指标变得更“聪明”了,对行情的反应也更灵敏。但聪明归聪明,能不能赚钱是另一回事。特别是在没有严格风控的情况下,单品种、只做多,再好的指标也扛不住市场的折腾。

67.5%的回撤就是个很刺眼的警告。它说白了就是:你的指标再精准,仓位怎么下、亏到什么时候该跑,这些没跟上,最后的结果照样让人扛不住。

七、代码下载

下面是完整代码的免费下载,包括Python移植版、单品种回测和指标可视化等。

https://www.laoyulaoyu.com/code/gbb.zip

你做过最完整的回测验证是什么?

是单品种全样本,还是跨品种样本外?欢迎在评论区聊聊你的经验。


#布林带指标 #量化回测 #TradingView #Python量化 #技术指标改良 #KAMA均线 #波动率策略 #回测陷阱 #vectorbt #策略验证

Published inAI&Invest专栏

Be First to Comment

    发表回复