# 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`