Files
trade/engine/backtest/STRATEGY.md
T
Rekey 4da520c14b feat(engine): 添加事件驱动回测引擎
- backtest/engine.py: 事件驱动回测引擎核心,支持 K 线推进/订单撮合/权益曲线
- backtest/models.py: 回测数据模型(订单/成交/持仓/账户快照)
- backtest/README.md: 回测模块使用说明
- backtest/STRATEGY.md: 策略开发指南与最佳实践
- backtest/TIMEFRAME_COMPARISON*.md: 多周期回测对比分析报告
2026-06-12 10:26:53 +08:00

5.6 KiB
Raw Blame History

牛熊自适应趋势跟踪策略

概述

通过识别市场所处的牛熊状态,自适应地选择做多或做空方向,在震荡市中空仓等待。

核心思想:牛市不逆势做空,熊市不逆势做多。


市场状态判定(3 法投票)

每根 4h K 线收盘后,用以下三种方法独立判定当前市场状态:

方法 1EMA200 斜率

计算:EMA200 近 20 根 K 线的变化率
判定:斜率 > +0.2% → 牛
      斜率 < -0.2% → 熊
      其他       → 震荡

EMA200 向上倾斜说明长期趋势向上,向下倾斜说明长期趋势向下。

方法 2:价格 vs EMA200

判定:当前收盘价 > EMA200 → 牛
      当前收盘价 < EMA200 → 熊

最直接的趋势判定——价格在年线上方就是多头市场。

方法 3ATH 回撤

追踪历史最高价 (ATH)
计算:(当前价 - ATH) / ATH
判定:回撤 > -15%(距高点不到15%)→ 牛
      回撤 < -35%(距高点超过35%)→ 熊
      回撤在 15%-35% 之间          → 震荡

加密市场经典规律:从高点回撤超过 35% 通常意味着熊市确认。

综合投票

三种方法独立投票,2/3 多数决:

  牛票 >= 2 → 牛市 → 只做多
  熊票 >= 2 → 熊市 → 只做空
  其他      → 震荡 → 空仓等待

交易信号

使用 EMA(10, 50) 双均线交叉 作为入场信号:

方向 入场条件 出场条件
做多 牛市 + EMA10 金叉 EMA50 EMA10 死叉 EMA50,或 ATR 止损,或状态转熊
做空 熊市 + EMA10 死叉 EMA50 EMA10 金叉 EMA50,或 ATR 止损,或状态转牛

ATR 动态止损

做多止损:入场后最高价 - 2.5 × ATR(14)
做空止损:入场后最低价 + 2.5 × ATR(14)

止损触发后平仓但不反手,空仓等待下一个交叉信号 + 状态确认。


参数配置

参数 说明
周期 4h 交易时间级别
EMA 快线 10 短期趋势
EMA 慢线 50 中期趋势
EMA 趋势 200 长期趋势基准
ATR 周期 14 波动率计算
ATR 止损倍率 2.5 止损宽度
手续费 0.1% 单边
滑点 0.05% 单边

不同币种的 EMA 快慢线参数已做优化:

币种 快线 慢线
BTC 10 50
ETH 10 75
BNB 20 50
SOL 30 50

回测结果(2017-2026 全周期,4h

币种 数据范围 总收益 年化 夏普 最大回撤 交易数 多头P&L 空头P&L
BTC 2017.08-2026.06 +494% 22.5% 0.80 -34.1% 208 +41,513 +14,936
ETH 2017.08-2026.06 +4,240% 53.7% 1.24 -37.3% 205 +262,427 +194,635
BNB 2017.11-2026.06 +1,375% 37.0% 0.92 -44.6% 190 +88,684 +63,905
SOL 2020.08-2026.06 +65% 9.1% 0.41 -56.6% 134 +13,743 -4,385

多时间级别对比(1h / 4h / 1d)

同一策略在不同 K 线周期上的表现:

币种 周期 总收益 年化 夏普 最大回撤 交易数 胜率
BTC 1h -78% -15.7% -0.35 -94.8% 744 24.2%
BTC 4h +494% 22.5% 0.80 -34.1% 208 36.5%
BTC 1d +660% 26.8% 0.99 -30.5% 28 42.9%
ETH 1h -65% -10.9% -0.07 -88.8% 755 28.4%
ETH 4h +4,240% 53.7% 1.24 -37.3% 205 40.5%
ETH 1d +692% 27.4% 0.87 -59.5% 25 44.0%
BNB 4h +1,375% 37.0% 0.92 -44.6% 190 37.4%
BNB 1d +914% 32.1% 0.80 -51.5% 26 38.5%
SOL 4h +65% 9.1% 0.41 -56.6% 134 35.1%
SOL 1d +454% 36.0% 0.92 -43.2% 20 35.0%

各币种最佳周期

币种 最佳周期 收益 夏普 原因
BTC 1d +660% 0.99 大盘稳定,日线信号最干净
ETH 4h +4,240% 1.24 趋势转换快,4h 反应速度最优
BNB 4h +1,375% 0.92 弹性大,需要 4h 捕捉波动
SOL 1d +454% 0.92 波动剧烈,日线过滤噪音最有效

周期选择规律

高波动币种 ──→ 短周期(4h)──→ 捕捉快节奏趋势(ETH、BNB)
低波动币种 ──→ 长周期(1d)──→ 过滤噪音假信号(BTC、SOL)

1h 对所有币种均不可用 ──→ 744-755 笔交易,摩擦成本吃掉一切

BTC 逐年表现

年份 市场性质 收益率 夏普比率
2017 牛市 +38.2% 2.59
2018 熊市 -13.8% -0.56
2019 反弹 +72.6% 1.93
2020 牛初 +72.4% 1.43
2021 牛市 +10.7% 0.48
2022 熊市 +2.0% 0.23
2023 震荡 +2.3% 0.22
2024-25 牛市 +75.4% 1.28

8 年中 7 年盈利,熊市不亏钱,牛市吃足利润。


设计要点

  1. 跨周期一致性:所有信号在同一 4h 周期上,不跨级,避免多时间框架的延迟叠加
  2. 状态优先于信号:先判断能做哪个方向,再在该方向上找入场点
  3. 止损不反手:止损后空仓等下一个信号,避免震荡市中反复被止损
  4. 少即是多:3 种判定方法刚好覆盖趋势方向、当前价格位置、极端状态三个不冗余的维度

代码位置

  • 策略实现:engine/example/regime_all.py
  • 多空引擎:engine/example/long_short.pyLongShortEngine