# 牛熊自适应趋势跟踪策略 ## 概述 通过识别市场所处的牛熊状态,自适应地选择做多或做空方向,在震荡市中空仓等待。 核心思想:**牛市不逆势做空,熊市不逆势做多。** --- ## 市场状态判定(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)