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

179 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 牛熊自适应趋势跟踪策略
## 概述
通过识别市场所处的牛熊状态,自适应地选择做多或做空方向,在震荡市中空仓等待。
核心思想:**牛市不逆势做空,熊市不逆势做多。**
---
## 市场状态判定(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.py`LongShortEngine