209 lines
8.3 KiB
Markdown
209 lines
8.3 KiB
Markdown
# Freqtrade 策略说明与对比
|
||
|
||
## 文件清单
|
||
|
||
```
|
||
quant/
|
||
├── README.md ← 本文档(策略说明与对比)
|
||
├── freqtrade-deploy-guide.md ← 部署操作指南
|
||
├── stoploss_leverage_adjustment.md ← 止损杠杆调整文档
|
||
├── us-stock-trading-evaluation.md ← 美股交易方案评估(券商对比+框架+代币化股票)
|
||
│
|
||
├── multi_asset_channel_breakout_v5/ ← 当前线上策略
|
||
│ ├── multi_asset_channel_breakout_v5.py (本地副本)
|
||
│ ├── multi_asset_channel_breakout_v5.live.py (线上备份)
|
||
│ ├── config.live.json (线上 config.json)
|
||
│ └── config.local.json (本地 config.json)
|
||
│
|
||
└── quantdinger/ ← 旧策略
|
||
├── quantdinger_strategy.py (本地副本)
|
||
├── quantdinger_strategy.live.py (线上备份)
|
||
├── config.json (QuantDinger 专用配置)
|
||
├── live_params.json (实盘运行参数)
|
||
├── channel_breakout.strategy_defaults.json (策略默认参数)
|
||
├── channel_breakout.yaml (策略配置 YAML)
|
||
├── backtest_runtime_defaults.json (回测运行默认参数)
|
||
└── best_params/ ← 最优参数组合(搜索结果)
|
||
├── phase6_offset18_nolock/
|
||
├── phase7_seed251_c915/
|
||
├── phase7a_top3_full_year.json
|
||
├── phase7b_top3_full_year.json
|
||
├── phase8a_full_year.json
|
||
├── seed185_candidate_243/
|
||
├── seed190_candidate_011/
|
||
├── ...(共 20 组最优参数,每组含 params.json + full_year_backtest.json)
|
||
└── seed292_candidate_421/
|
||
```
|
||
|
||
---
|
||
|
||
## 一、当前线上策略:MultiAssetChannelBreakoutV5
|
||
|
||
### 基本信息
|
||
|
||
- **策略文件**:`multi_asset_channel_breakout_v5.py`
|
||
- **时间周期**:15m
|
||
- **杠杆**:固定 10x(OKX 隔离保证金)
|
||
- **交易对**:BTC/USDT、ETH/USDT
|
||
- **方向**:仅做多
|
||
- **代码量**:186 行,7 个可优化参数
|
||
|
||
### 核心逻辑
|
||
|
||
**入场**:收盘价突破 ATR 通道上轨 + 在长均线上方 + ADX > 28(趋势+动量共振)。
|
||
|
||
**出场**:收盘价跌破 141 周期最低点 + ATR×0.19(通道底动态退出线)。
|
||
|
||
**止损**(分段动态,通过 `trade.leverage` 联动):
|
||
|
||
| 盈利阶段 | 止损行为 | 价格含义 |
|
||
|---|---|---|
|
||
| < 5% | 硬止损兜底 | 价格 -8% |
|
||
| 5%~15% | 保本+5% | 入场价 × 1.05 |
|
||
| 15%~30% | 允许 10% 回撤 | 当前价 -10% |
|
||
| > 30% | 允许 10% 回撤 | 当前价 -10% |
|
||
|
||
**入场二次确认**(`confirm_trade_entry`):防假突破(下单价不能低于信号 K 线均线/上轨)+ 防追高(滑点 > 1% 放弃)。
|
||
|
||
**ROI 止盈**:关闭(`minimal_roi = {"0": 100}`),完全依赖信号出场 + 动态止损。
|
||
|
||
### 参数配置
|
||
|
||
参数在策略代码内定义,无外部 JSON。关键参数:
|
||
|
||
| 参数 | 默认值 | 说明 |
|
||
|---|---|---|
|
||
| `up_line_span` | 340 | 上轨窗口(K 线数) |
|
||
| `buy_stop_profit_span` | 141 | 下轨窗口 |
|
||
| `ma_span_long_days` | 2 | 长均线天数(×96 = 15m 周期数) |
|
||
| `adx_threshold` | 28 | 动量阈值 |
|
||
| `up_line_offset` | -0.18 | 上轨 ATR 偏移 |
|
||
| `buy_stop_profit_offset` | 0.19 | 下轨 ATR 偏移 |
|
||
| `stoploss` | -0.80 | 硬止损(保证金维度) |
|
||
|
||
### config.json 关键配置
|
||
|
||
```json
|
||
{
|
||
"max_open_trades": 2,
|
||
"stake_amount": "unlimited",
|
||
"tradable_balance_ratio": 0.99,
|
||
"trading_mode": "futures",
|
||
"margin_mode": "isolated",
|
||
"stoploss": -0.80,
|
||
"strategy": "MultiAssetChannelBreakoutV5",
|
||
"pair_whitelist": ["BTC/USDT:USDT", "ETH/USDT:USDT"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 二、旧策略:QuantDinger
|
||
|
||
### 基本信息
|
||
|
||
- **策略文件**:`quantdinger_strategy.py`
|
||
- **时间周期**:5m
|
||
- **杠杆**:固定 10x(OKX 隔离保证金)
|
||
- **方向**:仅做多
|
||
- **代码量**:521 行,20+ 个可优化参数
|
||
|
||
### 核心逻辑
|
||
|
||
**Regime 检测引擎**:把市场分为四种状态,带滞回 hysteresis 防频繁切换:
|
||
- 压缩(compression):波动率低于阈值
|
||
- 扩张(expansion):波动率高于阈值
|
||
- 趋势(trend):均线斜率 + 价格位移超阈值
|
||
- 震荡(range):以上都不满足
|
||
|
||
**N 值**:自定义 ATR,用 6 个 chunk(每 10 根 K 线)的 high-low spread 的 EMA 平滑。
|
||
|
||
**入场**(三种模式,regime 驱动):
|
||
- 趋势:突破上轨 + N 值偏移
|
||
- 压缩/扩张:波动率扩张 + 突破短周期上轨
|
||
- 震荡:回踩短均线后反弹
|
||
|
||
**退出**(五层):
|
||
1. 保护止损(入场价 - N 值 × 杠杆系数)
|
||
2. 跟踪止损(通道底 + N 值 × offset)
|
||
3. 保本止损(盈利超 buffer 后启动)
|
||
4. 利润锁定(从峰值盈利回撤 33% 退出)
|
||
5. 时间止损(持仓 1440 根 5m K 线 ≈ 5 天)
|
||
|
||
**仓位管理**:`custom_stake_amount` 根据 N 值动态计算仓位,波动大缩小、波动小放大。
|
||
|
||
**杠杆处理**:使用 `stoploss_from_absolute()` 辅助函数,接受 leverage 参数,天然杠杆感知。
|
||
|
||
### 参数配置
|
||
|
||
参数在策略代码内定义,20+ 个 `RealParameter`/`IntParameter`。关键参数:
|
||
|
||
| 参数 | 默认值 | 说明 |
|
||
|---|---|---|
|
||
| `strategy_lever_rate` | 1.0 | 杠杆系数(影响止损+仓位) |
|
||
| `profit_line` | 0.08 | 利润锁定触发线 |
|
||
| `lock_profit_rate` | 0.33 | 利润回撤锁定比例 |
|
||
| `up_line_span` | 1008 | 上轨窗口 |
|
||
| `exit_max_loss_pct` | 0.03 | 保护止损比例 |
|
||
| `exit_max_hold_bars` | 1440 | 最大持仓 K 线数 |
|
||
| `stoploss` | -0.10 | 硬止损(极宽松兜底) |
|
||
|
||
---
|
||
|
||
## 三、两套策略对比
|
||
|
||
### 架构对比
|
||
|
||
| 维度 | QuantDinger(旧) | V5(当前) |
|
||
|---|---|---|
|
||
| 时间周期 | 5m | 15m |
|
||
| 代码量 | 521 行 | 186 行 |
|
||
| 可优化参数 | 20+ | 7 |
|
||
| 市场状态识别 | 四态 regime + hysteresis | 无 |
|
||
| 入场逻辑 | 三种 regime 驱动模式 | 单一突破 |
|
||
| 退出体系 | 五层(保护+跟踪+保本+锁利+时间) | 两层(信号+分段止损) |
|
||
| 仓位管理 | 动态(N 值驱动) | 固定 |
|
||
| 杠杆处理 | `stoploss_from_absolute`(杠杆感知) | `trade.leverage` 动态联动 |
|
||
| 预热 K 线 | 1400(+预取 12 天) | 600 |
|
||
| 持仓时长上限 | 5 天(1440 根 5m) | 无上限 |
|
||
|
||
### 设计哲学对比
|
||
|
||
| | QuantDinger | V5 |
|
||
|---|---|---|
|
||
| 核心理念 | 自适应系统:感知状态→选策略→动态管理 | 简单突破:突破就进,跌破就出 |
|
||
| 复杂度 | 高(regime 引擎 + 五层退出 + 动态仓位) | 低(一个入场 + 一个出场 + 分段止损) |
|
||
| 优点 | 适应不同市场状态,精细化管理 | 简单鲁棒,不易出错,给足趋势空间 |
|
||
| 缺点 | 参数多易过拟合,5m 噪音大,逻辑复杂难维护 | 不区分市场状态,震荡市可能频繁假突破 |
|
||
| 适合行情 | 趋势 + 震荡都能处理 | 单边趋势行情 |
|
||
|
||
### 止损策略对比
|
||
|
||
| | QuantDinger | V5 |
|
||
|---|---|---|
|
||
| 止损维度 | 价格维度(`stoploss_from_absolute`) | 保证金维度(`trade.leverage` 联动) |
|
||
| 硬止损 | -0.10(宽松兜底,实际靠 custom_stoploss) | -0.80(价格 -8%,接近强平线) |
|
||
| 跟踪止损 | 通道底 + N 值 × offset | 信号出场(跌破通道底) |
|
||
| 保本 | 盈利 > 0.1% 后,止损 = 入场价 - N×0.3 | 盈利 > 5% 后,止损 = 入场价 × 1.05 |
|
||
| 利润锁定 | 峰值回撤 33% 退出 | 无(让利润跑) |
|
||
| 时间止损 | 5 天 | 无 |
|
||
|
||
### 切换原因
|
||
|
||
从 QuantDinger 切换到 V5 的主要原因:
|
||
1. **简化**:QuantDinger 5m + 20+ 参数过于复杂,维护成本高
|
||
2. **止损 bug**:V5 原来的止损参数被杠杆压缩 10 倍,已修复并改为 `trade.leverage` 联动
|
||
3. **趋势空间**:V5 的 15m + 宽止损更适合通道突破策略,给趋势更多运行空间
|
||
4. **鲁棒性**:策略越简单越不容易在意外行情中出问题
|
||
|
||
---
|
||
|
||
## 四、部署信息
|
||
|
||
- **服务器**:Vultr(通过 ecs 跳板访问,SSH config: `vultr`)
|
||
- **路径**:`/opt/freqtrade/user_data/strategies/`
|
||
- **配置**:`/opt/freqtrade/user_data/config.json`
|
||
- **服务**:`systemctl restart freqtrade`
|
||
- **部署详情**:见 `freqtrade-deploy-guide.md`
|
||
- **止损调整记录**:见 `stoploss_leverage_adjustment.md`
|