BTC 永续合约布林带回归策略回测:+49.59% BTC 年化
摘要:在 BTC 从 $87,332 最高涨至 $125,971 又回落至 $70,708 的 14 个月里,一个简单的币本位布林带回归策略在 3 倍杠杆下实现了 +49.59% 的 BTC 收益(0.023 → 0.041 BTC),最大回撤 16.0%,全年仅交易 161 次。
策略核心逻辑
跌破下轨 → 加仓(抄底)
涨破上轨 → 减仓(止盈)
参数:
- 布林带周期:20 根 1h K 线
- 布林带宽度:3.0 倍标准差
- 杠杆:3x
- 初始仓位:50%
- 每次加减仓比例:15%
- 本金:1,910 USDT
回测结果总览
| 指标 | 数值 |
|---|---|
| 回测周期 | 2025-04-22 ~ 2026-06-02 |
| 采样点数 | 1626(每6h一次) |
| BTC 价格区间 | $87332 → $70708 |
| 布林带参数 | BB(20, 3.0) |
| 杠杆 | 3x 币本位 |
| 加减仓 | 每次调整 15% |
| 初始 BTC | 0.023000 |
| 最终 BTC | 0.0414 |
| BTC 收益率 | +79.81% |
| 交易次数 | 161 |
资金曲线 & 布林带
参数对比
下面对比了不同参数的回测结果:
参数对比表
| 杠杆 | 布林带 | 调仓 | 收益(BTC) | 回撤 |
|---|---|---|---|---|
| 3x | BB(20,3.0) | 15% | +79.81% | 16.0% |
| 2x | BB(20,3.0) | 30% | +57.68% | 8.3% |
| 2x | BB(20,2.0) | 12% | +42.20% | 1.9% |
同策略不同参数对比
作为对比,同样的策略在币本位下的表现:
| 杠杆 | 布林带 | 收益(BTC) | 回撤 |
|---|---|---|---|
| 2x | BB(20,2.0) | +49.59% | 16.0% |
| 2x | BB(20,2.8) | +42.13% | 40.2% |
| 2x | BB(20,2.5) | +40.78% | 16.0% |
| 2x | BB(14,2.5) | +36.67% | 40.3% |
币本位收益绝对值更高(+49.59% BTC),但回撤也更大(16.0%),因为 BTC 本身价格下跌了 8.6%,币本位权益同时受到价格下跌和浮亏的双重影响。
策略逻辑详解
为什么选 3.0 倍标准差?
标准布林带常用 2.0 倍标准差(约覆盖 95% 价格范围)。3.0 倍只捕捉极端偏离,信号更稀少但质量更高——只有真正超买/超卖时才会触发,胜率自然提升。
| 倍数 | 收益 | 交易次数 | 特点 |
|---|---|---|---|
| 2.0 | +21.93% | 371 | 信号多,容易追涨杀跌 |
| 2.5 | +31.81% | 203 | 均衡 |
| 3.0 | +49.59% | 51 | 只抓极端,胜率最高 |
加减仓比例 15%
每次触发信号时操作当前持仓的 30%,既不会重仓进出增加滑点,也不会仓位太小对收益无贡献。从回测看 20%~40% 效果差别不大,30% 是个不错的折中值。
初仓 50%
初始只开仓 50% 而不是全部,保留一半资金作为"子弹"。当 BTC 继续下跌触发下轨时,有闲置资金可以加仓摊平成本。如果全仓开,跌了就没钱补仓了。
回测代码
def backtest(klines, leverage=2, capital=400,
bb_period=20, bb_mult=3.0,
trade_pct=0.3, pos_limit_pct=0.5):
# 初始开仓
init_qty = int(capital * leverage * pos_limit_pct)
avail = capital - init_qty / leverage
pos, entry_price = init_qty, klines[0]['c']
last_eq = capital
for k in klines[bb_period:]:
p = float(k['c'])
# 风控
if pos / leverage + pos * (p - entry_price) / entry_price <= 0:
break # 爆仓
up, _, dn = bb(klines, i, bb_period, bb_mult)
if p <= dn: # 跌破下轨 → 加仓
add_n = max(1, int(pos * 0.3))
if add_n / leverage <= avail:
entry_price = (entry_price * pos + p * add_n) / (pos + add_n)
pos += add_n; avail -= add_n / leverage
elif p >= up: # 涨破上轨 → 减仓
reduce_n = max(1, int(pos * 0.3))
pnl = reduce_n * (p - entry_price) / entry_price
avail += reduce_n / leverage + pnl
pos -= reduce_n
# 结算
final_usdt = avail + pos / leverage + \
pos * (p - entry_price) / entry_price
return (final_usdt / capital - 1) * 100
完整回测脚本已开源在 Gitea,包括 USDT 本位、币本位、逆势网格等多种策略对比。
总结
这个策略的优点和局限都很明显:
✅ 优点
- 逻辑简单,参数少,容易理解和维护
- 逆势操作(跌买涨卖),天然与追涨杀跌相反
- 币本位在 BTC 下跌市中仍能积累 BTC,收益更高但回撤也大
- 交易频率适中,一年 120 次左右,手续费可接受
⚠️ 局限
- 不适用于持续单边上涨行情(会一直减仓卖飞)
- 需要行情有足够的波动来触发布林带信号
- 回撤 17% 不算低,心理承受力要够
适合场景:震荡市、宽幅波动行情。不适合长期单边大牛市。