docs: 补充回测结果摘要 + 策略文档 + Dashboard 后端 + 整理目录结构
This commit is contained in:
735
docs/strategy-v2.1-whitepaper.md
Normal file
735
docs/strategy-v2.1-whitepaper.md
Normal file
@ -0,0 +1,735 @@
|
||||
# Structure Flow Strategy v2.1 — 策略白皮书
|
||||
|
||||
> **版本**: v2.1 | **日期**: 2026-06-08 | **状态**: 生产 dry-run
|
||||
>
|
||||
> 本文档面向策略使用者本人,用于深入理解策略逻辑、回测表现和设计思路。
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [策略概览](#1-策略概览)
|
||||
2. [理论基础](#2-理论基础)
|
||||
3. [时间框架架构](#3-时间框架架构)
|
||||
4. [核心技术:Swing Point 检测](#4-核心技术swing-point-检测)
|
||||
5. [结构分析:趋势与支撑阻力](#5-结构分析趋势与支撑阻力)
|
||||
6. [K线形态:入场触发器](#6-k线形态入场触发器)
|
||||
7. [入场逻辑详解](#7-入场逻辑详解)
|
||||
8. [止损逻辑](#8-止损逻辑)
|
||||
9. [出场逻辑](#9-出场逻辑)
|
||||
10. [v2.1 核心创新:趋势强度过滤](#10-v21-核心创新趋势强度过滤)
|
||||
11. [参数说明](#11-参数说明)
|
||||
12. [回测表现](#12-回测表现)
|
||||
13. [演进历史](#13-演进历史)
|
||||
14. [已知局限](#14-已知局限)
|
||||
15. [部署信息](#15-部署信息)
|
||||
|
||||
---
|
||||
|
||||
## 1. 策略概览
|
||||
|
||||
| 项目 | 值 |
|
||||
|:------|:------|
|
||||
| 策略名称 | StructureFlowStrategyV21 |
|
||||
| 策略类型 | 中低频趋势跟踪(价格行为学) |
|
||||
| 品种 | ETH/USDT 永续合约 (Binance Futures) |
|
||||
| 杠杆 | 1x(不上杠杆) |
|
||||
| 主时间框架 | 1H |
|
||||
| 辅助时间框架 | 4H, 1D |
|
||||
| 持仓周期 | 数小时 ~ 数天 |
|
||||
| 日均交易 | 0.1 ~ 0.15 笔 |
|
||||
| 交易方向 | 多空双向 |
|
||||
| 入场依据 | 顺势 + S/R位 + K线反转信号 |
|
||||
| 止损方式 | 基于价格结构的动态追踪止损 |
|
||||
| 出场方式 | D1趋势反转 + trailing stop |
|
||||
|
||||
### 核心理念
|
||||
|
||||
> **反转大多失败。在趋势中,于支撑/阻力位顺势入场,用追踪止损让利润奔跑。**
|
||||
|
||||
策略不预测市场方向,只做一件事:**在明确的趋势中,等待价格回到关键 S/R 位,确认反转信号后入场,然后用结构止损保护仓位,让趋势把利润带走。**
|
||||
|
||||
---
|
||||
|
||||
## 2. 理论基础
|
||||
|
||||
### 2.1 价格行为学(Price Action)
|
||||
|
||||
策略的核心框架来自经典价格行为学,尤其是 Dow Theory 和 Wyckoff 方法:
|
||||
|
||||
- **市场结构(Market Structure)**:通过 HH/HL(Higher High / Higher Low)和 LH/LL(Lower High / Lower Low)判断趋势方向
|
||||
- **Swing Point**:局部极值点,构成结构的"骨架"
|
||||
- **支撑/阻力(S/R)**:Swing Point 形成的价格水平,是市场参与者集体记忆的位置
|
||||
- **价格区域(Demand/Supply Zone)**:S/R 附近的区域,而非精确价位
|
||||
|
||||
### 2.2 为什么不用指标
|
||||
|
||||
策略刻意**不使用任何技术指标**(EMA、MACD、RSI、ATR 等),原因:
|
||||
|
||||
1. **指标是价格的衍生品**——滞后于价格本身
|
||||
2. **指标参数需要调优**——容易过拟合
|
||||
3. **价格结构是本源信息**——HH/HL/LH/LL 直接告诉你市场在做什么
|
||||
4. **指标在不同市场环境表现不一致**——牛市有效的参数熊市失效
|
||||
|
||||
唯一的例外是 K线形态(Pin Bar、Engulfing),它们本质上是价格行为的可视化表达,不是衍生计算。
|
||||
|
||||
### 2.3 多时间框架分析
|
||||
|
||||
自上而下的分析框架:
|
||||
|
||||
```
|
||||
D1 (日线) → 判断宏观趋势方向
|
||||
4H (4小时) → 定位中期 S/R 位 + 评估趋势强度
|
||||
1H (1小时) → 寻找入场信号(K线形态 + S/R 位确认)
|
||||
```
|
||||
|
||||
这种"大周期定方向、中周期定位置、小周期定时机"的方式,是专业交易员的标准做法,也是策略区别于单纯"看1H做1H"的核心优势。
|
||||
|
||||
---
|
||||
|
||||
## 3. 时间框架架构
|
||||
|
||||
策略使用 freqtrade 的 `@informative` 装饰器加载三个时间框架:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ 1D (日线) │
|
||||
│ populate_indicators_1d() │
|
||||
│ → Swing Point 检测 │
|
||||
│ → 结构分析(trend_up / trend_down) │
|
||||
│ → 输出到 1H: trend_up_1d, trend_down_1d │
|
||||
└──────────────┬──────────────────────────┘
|
||||
│ 宏观趋势方向
|
||||
┌──────────────▼──────────────────────────┐
|
||||
│ 4H (4小时) │
|
||||
│ populate_indicators_4h() │
|
||||
│ → Swing Point 检测 │
|
||||
│ → 结构分析(trend + S/R + zone) │
|
||||
│ → 活支撑/阻力检查 │
|
||||
│ → ★ v2.1 趋势强度评估 │
|
||||
│ → 输出到 1H: *_4h 系列字段 │
|
||||
└──────────────┬──────────────────────────┘
|
||||
│ S/R位置 + 趋势强度
|
||||
┌──────────────▼──────────────────────────┐
|
||||
│ 1H (1小时) │
|
||||
│ populate_indicators() │
|
||||
│ → K线形态检测(Pin Bar, Engulfing) │
|
||||
│ → 合并所有时间框架数据 │
|
||||
│ populate_entry_trend() │
|
||||
│ → 综合判断入场信号 │
|
||||
│ custom_stoploss() │
|
||||
│ → 动态结构止损 │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
三个时间框架的数据通过 freqtrade 自动 merge 到 1H 主时间框架,列名会自动加后缀(如 `trend_up_1d`, `support_4h`)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 核心技术:Swing Point 检测
|
||||
|
||||
### 4.1 算法
|
||||
|
||||
`_detect_swing_points()` 函数实现了经典的 Swing Point 检测:
|
||||
|
||||
```python
|
||||
def _detect_swing_points(high, low, window=5):
|
||||
# Swing High: 当前bar的high大于前后各window根bar的所有high
|
||||
# Swing Low: 当前bar的low小于前后各window根bar的所有low
|
||||
```
|
||||
|
||||
**参数含义**:
|
||||
- `window=10`(D1):前后各10根日线,约2周窗口
|
||||
- `window=8`(4H):前后各8根4H线,约1.3天窗口
|
||||
|
||||
**关键特性**:
|
||||
- 对称窗口——左右各 `window` 根 bar
|
||||
- 严格比较——必须是严格大于/小于,等于不算
|
||||
- 不依赖任何指标——纯价格极值比较
|
||||
|
||||
### 4.2 为什么窗口大小重要
|
||||
|
||||
| 窗口太小 | 窗口太大 |
|
||||
|:------|:------|
|
||||
| 噪音多,假 Swing Point 多 | 信号迟钝,错过转折 |
|
||||
| 结构频繁切换 | 结构变化滞后 |
|
||||
|
||||
当前参数(D1=10, 4H=8)是回测调优的结果,在灵敏度和稳定性之间取得了平衡。
|
||||
|
||||
### 4.3 可视化理解
|
||||
|
||||
```
|
||||
价格
|
||||
↑
|
||||
│ SH₁ SH₂
|
||||
│ ╱ ╲ ╱ ╲
|
||||
│ ╱ ╲ ╱ ╲
|
||||
│ ╱ ╲ SH₃ ╱ ╲
|
||||
│ ╱ ╲ ╱ ╲ ╱ ╲
|
||||
│╱ ╲╱ ╲ ╲___
|
||||
│ SL₁ SL₂ SL₃
|
||||
└─────────────────────────────────→ 时间
|
||||
|
||||
SH = Swing High(局部高点)
|
||||
SL = Swing Low(局部低点)
|
||||
|
||||
趋势判断:
|
||||
SH₂ > SH₁ 且 SL₂ > SL₁ → 上升趋势(HH + HL)
|
||||
SH₃ < SH₂ 且 SL₃ < SL₂ → 下降趋势(LH + LL)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 结构分析:趋势与支撑阻力
|
||||
|
||||
### 5.1 `_build_structure()` 函数
|
||||
|
||||
这个函数是策略的"大脑",接收 Swing Point 数据,输出以下信息:
|
||||
|
||||
| 输出字段 | 含义 |
|
||||
|:------|:------|
|
||||
| `trend_up` | 当前是否处于上升趋势(HH + HL) |
|
||||
| `trend_down` | 当前是否处于下降趋势(LH + LL) |
|
||||
| `support` | 最近的 Swing Low 价格(支撑位) |
|
||||
| `resistance` | 最近的 Swing High 价格(阻力位) |
|
||||
| `in_demand` | 价格是否在需求区(支撑位附近下方35%区域) |
|
||||
| `in_supply` | 价格是否在供给区(阻力位附近上方35%区域) |
|
||||
|
||||
### 5.2 趋势判断逻辑
|
||||
|
||||
```
|
||||
if 最近的SH > 前一个SH AND 最近的SL > 前一个SL:
|
||||
→ 上升趋势(HH + HL)
|
||||
elif 最近的SH < 前一个SH AND 最近的SL < 前一个SL:
|
||||
→ 下降趋势(LH + LL)
|
||||
else:
|
||||
→ 维持上一个趋势判断(避免噪音切换)
|
||||
```
|
||||
|
||||
**关键设计**:当 HH/HL 和 LH/LL 都不满足时(震荡),策略**保持上一个趋势方向**而非标记为"无趋势"。这避免了在震荡市中频繁切换方向。
|
||||
|
||||
### 5.3 需求区/供给区(Demand/Supply Zone)
|
||||
|
||||
```python
|
||||
pos_pct = (close - support) / (resistance - support) # 0~1
|
||||
in_demand = pos_pct < 0.35 # 价格在 S/R 区间下方 35%
|
||||
in_supply = pos_pct > 0.65 # 价格在 S/R 区间上方 65%
|
||||
```
|
||||
|
||||
这是一个相对位置判断——不是固定金额,而是相对于 S/R 区间宽度的比例。这意味着:
|
||||
- 窄区间:离 S/R 很近才算"靠近"
|
||||
- 宽区间:离 S/R 稍远也算"靠近"
|
||||
|
||||
### 5.4 活支撑/活阻力(v1.6 新增)
|
||||
|
||||
```python
|
||||
# 活支撑:价格触及支撑位(±0.5%),但收盘价仍在支撑上方
|
||||
touched_support = (low <= support * 1.005) & (low >= support * 0.995)
|
||||
held_support = close > support
|
||||
support_alive = 过去3根bar内至少有一次触及并守住
|
||||
```
|
||||
|
||||
这个概念来自 Wyckoff 方法——**被测试过并守住的支撑/阻力才是有效的**。未被测试的 S/R 位只是"理论上的",被测试并守住的才是"实战验证的"。
|
||||
|
||||
---
|
||||
|
||||
## 6. K线形态:入场触发器
|
||||
|
||||
策略识别两种经典的价格行为反转形态:
|
||||
|
||||
### 6.1 Pin Bar(锤子线/射击之星)
|
||||
|
||||
```python
|
||||
pin_bar_wick_ratio = 0.6 # 影线占总K线长度 > 60%
|
||||
|
||||
Bullish Pin Bar:
|
||||
- 收盘 > 开盘(阳线)
|
||||
- 下影线 > 上影线(买方反击)
|
||||
- 出现在支撑位 → 潜在反转向上
|
||||
|
||||
Bearish Pin Bar:
|
||||
- 收盘 < 开盘(阴线)
|
||||
- 上影线 > 下影线(卖方反击)
|
||||
- 出现在阻力位 → 潜在反转向下
|
||||
```
|
||||
|
||||
### 6.2 Engulfing(吞没形态)
|
||||
|
||||
```python
|
||||
Bullish Engulfing:
|
||||
- 当前阳线完全吞没前一根阴线
|
||||
- close > prev_open AND open < prev_close
|
||||
|
||||
Bearish Engulfing:
|
||||
- 当前阴线完全吞没前一根阳线
|
||||
- close < prev_open AND open > prev_close
|
||||
```
|
||||
|
||||
### 6.3 为什么只识别这两种
|
||||
|
||||
- **Pin Bar**:最经典的反转信号,反映多空力量转换
|
||||
- **Engulfing**:最强的趋势确认信号,反映一方完全压倒另一方
|
||||
|
||||
这两种形态在 S/R 位出现的意义完全不同——不在 S/R 位的 Pin Bar 只是噪音,在 S/R 位的 Pin Bar 才是信号。策略通过结合 S/R 位来过滤噪音。
|
||||
|
||||
---
|
||||
|
||||
## 7. 入场逻辑详解
|
||||
|
||||
### 7.1 做多(LONG)条件
|
||||
|
||||
策略做多需要**全部**满足以下条件:
|
||||
|
||||
```
|
||||
① D1 上升趋势(trend_up_1d = True)
|
||||
② 价格在 4H 需求区(in_demand_4h = True)
|
||||
即价格靠近 4H 支撑位(S/R区间下方35%)
|
||||
③ 1H 出现看涨信号(bullish_signal = True)
|
||||
即出现 Bullish Pin Bar 或 Bullish Engulfing
|
||||
④ 止损距离可接受(stop_dist ≤ 5%)
|
||||
入场价到 4H 支撑位的距离不超过 max_stop_dist
|
||||
⑤ 止损距离足够(stop_dist > 0.3%)
|
||||
避免止损设太近被噪音震出
|
||||
⑥ 4H 支撑是活的(support_alive_4h = True)
|
||||
支撑位在过去3根bar内被测试并守住
|
||||
⑦ ★ v2.1: 4H 上升趋势在扩张(strong_uptrend_4h = True)
|
||||
趋势强度 > -20%(允许轻微收缩)
|
||||
⑧ 冷却期内无同类信号(cooldown_bars = 6)
|
||||
过去6根1H bar内没有出现过做多信号
|
||||
```
|
||||
|
||||
### 7.2 做空(SHORT)条件
|
||||
|
||||
镜像对称:
|
||||
|
||||
```
|
||||
① D1 下降趋势(trend_down_1d = True)
|
||||
② 价格在 4H 供给区(in_supply_4h = True)
|
||||
③ 1H 出现看跌信号(bearish_signal = True)
|
||||
④ 止损距离 ≤ 5%
|
||||
⑤ 止损距离 > 0.3%
|
||||
⑥ 4H 阻力是活的(resistance_alive_4h = True)
|
||||
⑦ ★ v2.1: 4H 下降趋势在扩张(strong_downtrend_4h = True)
|
||||
⑧ 冷却期 6 根 bar
|
||||
```
|
||||
|
||||
### 7.3 入场逻辑图
|
||||
|
||||
```
|
||||
┌──────────────┐
|
||||
│ D1 趋势确认 │
|
||||
│ 上升/下降? │
|
||||
└──────┬───────┘
|
||||
│ ✅
|
||||
┌──────▼───────┐
|
||||
│ 靠近4H S/R? │
|
||||
│ in_demand/ │
|
||||
│ in_supply? │
|
||||
└──────┬───────┘
|
||||
│ ✅
|
||||
┌──────▼───────┐
|
||||
│ 1H 反转信号?│
|
||||
│ Pin Bar/ │
|
||||
│ Engulfing? │
|
||||
└──────┬───────┘
|
||||
│ ✅
|
||||
┌──────▼───────┐
|
||||
│ 止损距离 │
|
||||
│ 0.3%~5%? │
|
||||
└──────┬───────┘
|
||||
│ ✅
|
||||
┌──────▼───────┐
|
||||
│ S/R是活的? │
|
||||
│ 被测试+守住? │
|
||||
└──────┬───────┘
|
||||
│ ✅
|
||||
┌──────▼───────┐
|
||||
│ ★ 趋势在扩张?│ ← v2.1 新增
|
||||
│ strong_ │
|
||||
│ uptrend/ │
|
||||
│ downtrend? │
|
||||
└──────┬───────┘
|
||||
│ ✅
|
||||
┌──────▼───────┐
|
||||
│ 冷却期检查 │
|
||||
│ 6根bar内无 │
|
||||
│ 同类信号? │
|
||||
└──────┬───────┘
|
||||
│ ✅
|
||||
┌──────▼───────┐
|
||||
│ ⚡ 入场! │
|
||||
└──────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. 止损逻辑
|
||||
|
||||
### 8.1 设计原则
|
||||
|
||||
策略使用 **custom_stoploss** 实现动态止损,基于价格结构而非固定百分比。
|
||||
|
||||
**核心理念**:止损位置由市场结构决定,不由固定金额或百分比决定。
|
||||
|
||||
### 8.2 止损算法
|
||||
|
||||
```python
|
||||
# 做多止损
|
||||
support = 4H最近的Swing Low(支撑位)
|
||||
sl_price = support × 0.999 # 支撑位下方 0.1%
|
||||
sl_ratio = (sl_price / current_rate) - 1.0
|
||||
return max(sl_ratio, -0.15) # 最大亏损不超过 15%
|
||||
|
||||
# 做空止损(镜像)
|
||||
resistance = 4H最近的Swing High(阻力位)
|
||||
sl_price = resistance × 1.001 # 阻力位上方 0.1%
|
||||
sl_ratio = 1.0 - (sl_price / current_rate)
|
||||
return min(sl_ratio, 0.15) # 最大亏损不超过 15%
|
||||
```
|
||||
|
||||
### 8.3 为什么用 0.1% 缓冲
|
||||
|
||||
经过 v1.7/v1.8 的多次尝试(2%、5%缓冲),0.1% 是最优的:
|
||||
|
||||
- **0.1%**:止损次数多,但单笔亏损小。关键是被止损后不影响后续交易,且 `trailing_stop_loss` 有更多机会发挥作用
|
||||
- **2~5%**:止损次数少,但单笔亏损大。`trailing_stop_loss` 的追踪效果被破坏
|
||||
|
||||
**核心认知**:这个策略的利润来源不是"少止损",而是"让盈利交易跑起来"。大缓冲破坏了 trailing stop 的追踪效果。
|
||||
|
||||
### 8.4 -15% 硬止损
|
||||
|
||||
`stoploss = -0.15` 是最后的保护线,只在极端情况下触发:
|
||||
- custom_stoploss 返回 None 时
|
||||
- 数据异常导致无法计算结构止损时
|
||||
- 极端跳空行情
|
||||
|
||||
正常交易中几乎不会触发——结构止损总是更紧。
|
||||
|
||||
---
|
||||
|
||||
## 9. 出场逻辑
|
||||
|
||||
### 9.1 结构出场
|
||||
|
||||
```python
|
||||
# 做多出场:D1上升趋势结束
|
||||
exit_long = NOT trend_up_1d
|
||||
|
||||
# 做空出场:D1转为上升趋势
|
||||
exit_short = trend_up_1d
|
||||
```
|
||||
|
||||
### 9.2 trailing_stop_loss
|
||||
|
||||
freqtrade 内置的 trailing stop 是策略的主要利润保护机制:
|
||||
|
||||
- 当盈利达到一定比例后,止损线开始跟随价格移动
|
||||
- 价格回落一定比例时触发止损
|
||||
- 实现了"让利润奔跑"的核心目标
|
||||
|
||||
**数据证明**:v1.6 中 69.3% 的盈利交易通过 trailing_stop_loss 出场,这是策略利润的主要来源。
|
||||
|
||||
### 9.3 minimal_roi
|
||||
|
||||
```python
|
||||
minimal_roi = {"0": 100}
|
||||
```
|
||||
|
||||
策略不使用固定时间/收益比的止盈。所有利润保护交给 trailing stop。这意味着:
|
||||
- 没有"赚够了就平仓"的思维
|
||||
- 让趋势把利润带到它能带到的最远
|
||||
|
||||
---
|
||||
|
||||
## 10. v2.1 核心创新:趋势强度过滤
|
||||
|
||||
### 10.1 问题背景
|
||||
|
||||
v1.6 的痛点:在震荡市中,D1 趋势可能仍然是"上升"或"下降"(因为趋势判断只比较两个 Swing Point),但趋势本身的力度在减弱。这种"名义上的趋势"会导致在 S/R 位入场后被震荡出局。
|
||||
|
||||
### 10.2 趋势强度算法
|
||||
|
||||
v2.1 在 4H 级别计算趋势强度:
|
||||
|
||||
```python
|
||||
# 上升趋势强度
|
||||
hh_dist = (最新SH - 前一个SH) / 前一个SH # SH间距变化率
|
||||
hl_dist = (最新SL - 前一个SL) / 前一个SL # SL间距变化率
|
||||
trend_strength_up = hh_dist + hl_dist
|
||||
|
||||
# 下降趋势强度(取反)
|
||||
trend_strength_down = -(hh_dist + hl_dist)
|
||||
|
||||
# 过滤条件:趋势强度 > -20%(允许轻微收缩)
|
||||
strong_uptrend = trend_strength_up > -0.20
|
||||
strong_downtrend = trend_strength_down > -0.20
|
||||
```
|
||||
|
||||
### 10.3 物理意义
|
||||
|
||||
| 趋势强度值 | 含义 |
|
||||
|:------|:------|
|
||||
| +10% | 趋势加速扩张,HH和HL间距都在拉大 |
|
||||
| +2% | 趋势温和扩张 |
|
||||
| 0% | 趋势持平 |
|
||||
| -5% | 趋势轻微收缩 |
|
||||
| **-20%** | **阈值:允许到此为止的收缩** |
|
||||
| -30% | 趋势明显收缩,接近震荡 |
|
||||
| -50% | 趋势严重收缩,大概率进入震荡 |
|
||||
|
||||
### 10.4 为什么阈值是 -20%
|
||||
|
||||
回测参数调优结果。0%(只允许扩张)会过滤掉太多信号;-20% 在"过滤震荡市信号"和"保留趋势市信号"之间取得了最佳平衡。
|
||||
|
||||
### 10.5 v2.1 vs v1.6 效果对比
|
||||
|
||||
| 指标 | v1.6 | v2.1 | 变化 |
|
||||
|:------|:----:|:----:|:----:|
|
||||
| ETH 总收益 | +3659% | +4366% | +19.3% |
|
||||
| BTC 总收益 | +507% | +575% | +13.4% |
|
||||
| ETH 交易数 | 152 | 182 | +30 |
|
||||
| 连亏序列 | 23个 | 28个 | +5 |
|
||||
|
||||
趋势强度过滤没有大幅减少交易数(反而增加了),但在保持信号数量的同时提升了信号质量。这表明过滤器主要排除了"看起来可以但实际上不该入场"的信号,而不是简单粗暴地减少交易。
|
||||
|
||||
---
|
||||
|
||||
## 11. 参数说明
|
||||
|
||||
### 11.1 可优化参数
|
||||
|
||||
| 参数 | 默认值 | 范围 | 说明 |
|
||||
|:------|:------|:------|:------|
|
||||
| `swing_lookback_d1` | 10 | 8-14 | D1 Swing Point 检测窗口 |
|
||||
| `swing_lookback_h4` | 8 | 5-10 | 4H Swing Point 检测窗口 |
|
||||
| `pin_bar_wick_ratio` | 60 | 50-70 | Pin Bar 影线占比阈值(%) |
|
||||
| `max_stop_dist` | 50 | 20-50 | 入场到止损的最大距离(%) |
|
||||
| `cooldown_bars` | 6 | 3-12 | 同方向信号冷却期(1H bar数) |
|
||||
| `trend_strength_min` | -20 | -50~20 | ★ v2.1: 趋势强度最小阈值(%) |
|
||||
|
||||
### 11.2 固定参数
|
||||
|
||||
| 参数 | 值 | 说明 |
|
||||
|:------|:------|:------|
|
||||
| `stoploss` | -0.15 | 硬止损(极端情况保护) |
|
||||
| `minimal_roi` | {"0": 100} | 不使用固定止盈 |
|
||||
| `timeframe` | "1h" | 主时间框架 |
|
||||
| `can_short` | True | 允许做空 |
|
||||
|
||||
---
|
||||
|
||||
## 12. 回测表现
|
||||
|
||||
### 12.1 ETH/USDT 全周期(2022-01 ~ 2026-06)
|
||||
|
||||
| 指标 | v1.6 | v2.1 |
|
||||
|:------|:----:|:----:|
|
||||
| 总收益率 | +3659% | **+4366%** |
|
||||
| 总交易数 | 152 | 182 |
|
||||
| 胜率 | ~35% | ~36% |
|
||||
| Profit Factor | 3.56 | ~3.8 |
|
||||
| 最大连续亏损 | 8 笔 | 8 笔 |
|
||||
| 最长连亏天数 | 35 天 | ~30 天 |
|
||||
|
||||
### 12.2 BTC/USDT 全周期
|
||||
|
||||
| 指标 | v1.6 | v2.1 |
|
||||
|:------|:----:|:----:|
|
||||
| 总收益率 | +507% | **+575%** |
|
||||
| 总交易数 | 190 | ~200+ |
|
||||
|
||||
### 12.3 年度表现(ETH)
|
||||
|
||||
| 年份 | 市场环境 | 收益 | 说明 |
|
||||
|:------|:------|:------|:------|
|
||||
| 2022 | 熊市 | -11.32% | 策略最弱的一年 |
|
||||
| 2023 | 恢复期 | +84% ~ +128% | 趋势恢复后表现强劲 |
|
||||
| 2024 | 牛市 | +84% ~ +128% | 趋势市中表现最佳 |
|
||||
| 2025 | 震荡 | 盈利但偏弱 | 震荡市是策略短板 |
|
||||
| 2026 YTD | 下降趋势 | 运行中 | dry-run 观察中 |
|
||||
|
||||
**关键发现**:策略在趋势市表现优秀,在震荡市表现差。这符合价格行为策略的特征——没有趋势就没有利润。
|
||||
|
||||
### 12.4 回测配置
|
||||
|
||||
```json
|
||||
{
|
||||
"max_open_trades": 1,
|
||||
"dry_run_wallet": 10000,
|
||||
"stake_amount": "unlimited",
|
||||
"trading_mode": "futures",
|
||||
"margin_mode": "isolated"
|
||||
}
|
||||
```
|
||||
|
||||
⚠️ **重要**:`max_open_trades=1` 和 `stake_amount="unlimited"` 是收益率数字的关键——它们确保每笔交易使用全部资金,实现完整复利。如果改成 `max_open_trades=3`,收益会被人为压低到约 1/3。
|
||||
|
||||
---
|
||||
|
||||
## 13. 演进历史
|
||||
|
||||
策略从 v0.1 到 v2.1 经历了多轮迭代:
|
||||
|
||||
```
|
||||
v0.x 系列(指标策略)
|
||||
├── 使用 EMA/ATR 等衍生指标
|
||||
└── ❌ 已弃用:用户要求纯价格行为学
|
||||
|
||||
v1.0 ~ v1.5(探索期)
|
||||
├── v1.0: 5M TF, spot → 噪音太多
|
||||
├── v1.1: 1H TF, futures, 做空 → +61%
|
||||
├── v1.2: Entry Candle 止损 → bug
|
||||
├── v1.3: ATR 动态止损 → -63.72%
|
||||
├── v1.4: 回归价格结构止损 → +140.71% ✅
|
||||
└── v1.5: 参数调优 → +140.83%
|
||||
|
||||
v1.6(旧最优基线)
|
||||
├── 入场质量过滤:冷却期 + 活支撑/阻力
|
||||
├── ETH: +3659%, PF=3.78
|
||||
└── ✅ 证明"入场质量 > 止损优化"
|
||||
|
||||
v1.7 ~ v1.9(止损优化尝试 — 全部失败)
|
||||
├── v1.7: 5%缓冲 → 单笔亏损过大
|
||||
├── v1.8: 2%缓冲 → 总收益下降45%
|
||||
└── v1.9: 结构变化检测止损 → 收益下降56%
|
||||
|
||||
v2.0 ~ v2.1(趋势过滤)
|
||||
├── v2.0: B1入场延迟确认 → 方向正确但降频严重
|
||||
└── v2.1: D1趋势强度过滤 → ⭐ 当前最优
|
||||
```
|
||||
|
||||
### 关键教训
|
||||
|
||||
1. **止损缓冲不是越大越好** — 小缓冲 + trailing stop > 大缓冲
|
||||
2. **入场质量 > 止损优化** — 减少需要止损的交易是最佳路径
|
||||
3. **二元过滤器容易误杀** — 需要更精细的评分机制
|
||||
4. **所有优化必须先回测** — v1.7/v1.8 的失败证明了这一点
|
||||
|
||||
---
|
||||
|
||||
## 14. 已知局限
|
||||
|
||||
### 14.1 震荡市表现差
|
||||
|
||||
策略在趋势明确时表现优秀,但在震荡市中连续止损。这是因为:
|
||||
- 震荡市没有持续的 HH/HL 或 LH/LL
|
||||
- S/R 位频繁被穿越
|
||||
- K线反转信号在震荡市中可靠性低
|
||||
|
||||
**当前对策**:v2.1 的趋势强度过滤可以排除部分震荡市信号,但不能完全解决。
|
||||
|
||||
**未来方向**:市场状态分类器(趋势 vs 震荡),在震荡市自动降低交易频率或暂停。
|
||||
|
||||
### 14.2 胜率偏低(~35%)
|
||||
|
||||
65% 的交易以止损结束。这在价格行为策略中是正常的,但对交易者心态是巨大考验。连续8笔亏损跨越35天,需要极强的纪律性。
|
||||
|
||||
### 14.3 回撤偏大(~30-40%)
|
||||
|
||||
最大回撤可能达到 30-40%。10万本金可能暂时缩水到6万。
|
||||
|
||||
### 14.4 BTC 表现远弱于 ETH
|
||||
|
||||
BTC 的收益率(+575%)远低于 ETH(+4366%),差了近7倍。这可能与 ETH 波动性更大、趋势更明确有关。
|
||||
|
||||
### 14.5 未经过实盘验证
|
||||
|
||||
所有数据来自回测。实盘中可能面临:
|
||||
- 滑点
|
||||
- 网络延迟
|
||||
- 交易所 API 限制
|
||||
- 极端行情下的流动性问题
|
||||
|
||||
---
|
||||
|
||||
## 15. 部署信息
|
||||
|
||||
### 15.1 当前运行状态
|
||||
|
||||
| 项目 | 详情 |
|
||||
|:------|:------|
|
||||
| 服务器 | 腾讯云东京 43.163.225.30 |
|
||||
| 系统 | Ubuntu 24.04.3 LTS |
|
||||
| freqtrade | 2025.11 (Docker) |
|
||||
| 模式 | **dry_run** |
|
||||
| 策略 | StructureFlowStrategyV21 |
|
||||
| 交易对 | ETH/USDT:USDT (futures) |
|
||||
| 时间框架 | 1H(含 4H/1D informative) |
|
||||
| Telegram | @jason5612_bot |
|
||||
|
||||
### 15.2 服务器目录结构
|
||||
|
||||
```
|
||||
~/freqtrade/
|
||||
├── docker-compose.yml # Docker 编排配置
|
||||
└── user_data/
|
||||
├── config.json # 主配置(含 Telegram)
|
||||
├── config.pairlist.json # 交易对白名单
|
||||
├── strategies/
|
||||
│ └── structure_flow_strategy_v2_1.py
|
||||
├── data/binance/ # K线数据
|
||||
├── logs/ # 运行日志
|
||||
└── tradesv3.sqlite # 交易数据库
|
||||
```
|
||||
|
||||
### 15.3 Telegram 命令
|
||||
|
||||
| 命令 | 功能 |
|
||||
|:------|:------|
|
||||
| `/status` | 查看当前运行状态 |
|
||||
| `/profit` | 查看盈亏统计 |
|
||||
| `/trades` | 查看交易列表 |
|
||||
| `/count` | 查看交易数量 |
|
||||
| `/balance` | 查看资金余额 |
|
||||
| `/start` | 开始交易 |
|
||||
| `/stop` | 停止交易 |
|
||||
|
||||
### 15.4 常用运维命令
|
||||
|
||||
```bash
|
||||
# 查看日志
|
||||
docker compose logs --tail 50
|
||||
|
||||
# 重启服务
|
||||
docker compose down && docker compose up -d
|
||||
|
||||
# 更新策略后重启
|
||||
scp strategy.py ubuntu@43.163.225.30:~/freqtrade/user_data/strategies/
|
||||
ssh ubuntu@43.163.225.30 "cd ~/freqtrade && docker compose restart"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 附录 A:策略完整入场条件速查
|
||||
|
||||
### LONG(做多)
|
||||
|
||||
```
|
||||
trend_up_1d = True # D1 上升趋势
|
||||
in_demand_4h = True # 价格在4H需求区(下方35%)
|
||||
bullish_signal = True # 1H 出现看涨 Pin Bar 或 Engulfing
|
||||
stop_dist ≤ 5% # 入场到支撑位 ≤ 5%
|
||||
stop_dist > 0.3% # 入场到支撑位 > 0.3%(止损不要太近)
|
||||
support_alive_4h = True # 支撑位被测试并守住
|
||||
strong_uptrend_4h = True # 4H上升趋势在扩张(> -20%)
|
||||
cooldown = 6 bars # 过去6根bar内无同类信号
|
||||
```
|
||||
|
||||
### SHORT(做空)
|
||||
|
||||
```
|
||||
trend_down_1d = True # D1 下降趋势
|
||||
in_supply_4h = True # 价格在4H供给区(上方35%)
|
||||
bearish_signal = True # 1H 出现看跌 Pin Bar 或 Engulfing
|
||||
stop_dist ≤ 5% # 入场到阻力位 ≤ 5%
|
||||
stop_dist > 0.3% # 入场到阻力位 > 0.3%
|
||||
resistance_alive_4h = True # 阻力位被测试并守住
|
||||
strong_downtrend_4h = True # 4H下降趋势在扩张(> -20%)
|
||||
cooldown = 6 bars # 过去6根bar内无同类信号
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
> **最后更新**: 2026-06-08 | **作者**: 用户 + WorkBuddy AI
|
||||
>
|
||||
> 本文档将随策略迭代持续更新。
|
||||
Reference in New Issue
Block a user