4da520c14b
- backtest/engine.py: 事件驱动回测引擎核心,支持 K 线推进/订单撮合/权益曲线 - backtest/models.py: 回测数据模型(订单/成交/持仓/账户快照) - backtest/README.md: 回测模块使用说明 - backtest/STRATEGY.md: 策略开发指南与最佳实践 - backtest/TIMEFRAME_COMPARISON*.md: 多周期回测对比分析报告
179 lines
5.6 KiB
Markdown
179 lines
5.6 KiB
Markdown
# 牛熊自适应趋势跟踪策略
|
||
|
||
## 概述
|
||
|
||
通过识别市场所处的牛熊状态,自适应地选择做多或做空方向,在震荡市中空仓等待。
|
||
|
||
核心思想:**牛市不逆势做空,熊市不逆势做多。**
|
||
|
||
---
|
||
|
||
## 市场状态判定(3 法投票)
|
||
|
||
每根 4h K 线收盘后,用以下三种方法独立判定当前市场状态:
|
||
|
||
### 方法 1:EMA200 斜率
|
||
|
||
```
|
||
计算:EMA200 近 20 根 K 线的变化率
|
||
判定:斜率 > +0.2% → 牛
|
||
斜率 < -0.2% → 熊
|
||
其他 → 震荡
|
||
```
|
||
|
||
EMA200 向上倾斜说明长期趋势向上,向下倾斜说明长期趋势向下。
|
||
|
||
### 方法 2:价格 vs EMA200
|
||
|
||
```
|
||
判定:当前收盘价 > EMA200 → 牛
|
||
当前收盘价 < EMA200 → 熊
|
||
```
|
||
|
||
最直接的趋势判定——价格在年线上方就是多头市场。
|
||
|
||
### 方法 3:ATH 回撤
|
||
|
||
```
|
||
追踪历史最高价 (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.py`(LongShortEngine)
|