Files
wiki/quant/README.md
T

210 lines
8.4 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.
# Freqtrade 策略说明与对比
## 文件清单
```
quant/
├── README.md ← 本文档(策略说明与对比)
├── freqtrade-deploy-guide.md ← 部署操作指南
├── stoploss_leverage_adjustment.md ← 止损杠杆调整文档
├── us-stock-trading-evaluation.md ← 美股交易方案评估(券商对比+框架+代币化股票)
├── multi_asset_channel_breakout_v5_stock.py ← V5 美股代币化版(OKX spot
├── 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`