Strategy001 - 谐波背离策略使用指南
一套基于多指标背离识别的量化交易策略,通过捕捉价格与动量指标之间的分歧来发现潜在的反转机会。
目录
策略概述
策略定位
Strategy001 是一套趋势反转捕捉策略,其核心理念源于经典的技术分析理论——背离是趋势反转的先行信号。当价格走势与技术指标走势出现分歧时,往往预示着当前趋势即将结束,新的趋势即将开始。
适用场景
| 场景 | 适用性 | 说明 |
|---|---|---|
| 震荡行情 | ⭐⭐⭐⭐⭐ | 最佳适用场景,背离信号在震荡中最为可靠 |
| 趋势行情 | ⭐⭐⭐ | 需配合趋势过滤器使用,避免逆势交易 |
| 高波动市场 | ⭐⭐⭐⭐ | 通道突破条件可有效过滤假信号 |
| 低波动市场 | ⭐⭐ | 信号较少,需耐心等待 |
时间周期
策略默认使用 1小时周期 (1h),这个周期既能捕捉到足够的价格波动形成有效的背离信号,又能过滤掉短周期中的噪音干扰。
核心原理
什么是背离?
背离是指价格走势与技术指标走势出现不一致的现象。在技术分析中,背离被视为趋势可能反转的重要预警信号。
看涨背离(底背离)
价格: 低点1 → 低点2(更低) ↘️
指标: 低点1 → 低点2(更高) ↗️
含义:价格创出新低,但动量指标未能创出新低,说明下跌动能正在衰竭,可能即将反转上涨。
看跌背离(顶背离)
价格: 高点1 → 高点2(更高) ↗️
指标: 高点1 → 高点2(更低) ↘️
含义:价格创出新高,但动量指标未能创出新高,说明上涨动能正在衰竭,可能即将反转下跌。
枢轴点识别
策略使用滑动窗口算法来识别价格的枢轴点(极值点):
# 枢轴点识别逻辑
窗口大小 = 3 # 左右各需要 3 根 K 线确认
枢轴高点:中心 K 线的高点 > 左侧 3 根 K 线高点 且 > 右侧 3 根 K 线高点
枢轴低点:中心 K 线的低点 < 左侧 3 根 K 线低点 且 < 右侧 3 根 K 线低点
重要特性:枢轴点识别采用延迟确认机制,确保不会使用未来数据,避免回测中的"未来函数"问题。
多指标共振
策略同时监测 11 个技术指标 的背离情况,只有当多个指标同时出现背离时才会触发交易信号:
| 指标 | 类型 | 背离特点 |
|---|---|---|
| RSI | 动量震荡 | 经典背离指标,反应灵敏 |
| Stochastic | 动量震荡 | 对超买超卖区域背离特别有效 |
| ROC | 变动率 | 衡量价格变化速度 |
| Ultimate Oscillator | 综合震荡 | 结合多周期,减少假信号 |
| Awesome Oscillator | 动量 | Bill Williams 经典指标 |
| MACD | 趋势动量 | 零轴附近背离最有效 |
| CCI | 通道指标 | 超过 ±100 时背离有效 |
| CMF | 资金流量 | 结合量价的背离分析 |
| OBV | 成交量 | 量价背离的典型指标 |
| MFI | 资金流量 | 结合价格和成交量的震荡 |
| ADX | 趋势强度 | 趋势转折时的背离信号 |
技术指标详解
1. 枢轴点计算
枢轴点是背离检测的基础,策略通过以下方式识别:
def compute_pivot_points(dataframe, window=3):
"""
延迟确认版本的枢轴点计算
原理:
- 枢轴点需要左右各 window 根 K 线确认
- 在 index 位置,只能确认 index - window 位置的枢轴点
- 延迟了 window 根 K 线,但完全无未来函数
"""
示例(window=3):
- 在 i=10 时,确认 i=7 位置的枢轴点(需要 i=4-6 和 i=8-10 的数据)
- 这确保了信号的真实性和可交易性
2. 背离检测算法
def detect_divergences(dataframe, indicator_name, pivot_window=3):
"""
核心背离检测逻辑
关键点:
1. 只遍历极值点,不遍历所有 K 线(性能优化)
2. 在确认极值点的同一根 K 线完成背离检测
3. 信号记录在 index + pivot_window 位置(延迟确认)
4. 支持多指标同时背离的累加计数
"""
背离判定条件:
# 看涨背离(底背离)
if (price_curr < price_prev and ind_curr > ind_prev) or \
(price_curr > price_prev and ind_curr < ind_prev):
return 看涨背离信号
# 看跌背离(顶背离)
if (price_curr < price_prev and ind_curr > ind_prev) or \
(price_curr > price_prev and ind_curr < ind_prev):
return 看跌背离信号
3. 通道指标
策略使用 Keltner 通道 和 Bollinger 带 双重通道系统:
# Keltner 通道(基于 ATR)
中轨 = EMA(20)
上轨 = EMA(20) + ATR(10)
下轨 = EMA(20) - ATR(10)
# Bollinger 带(基于标准差)
中轨 = SMA(20)
上轨 = SMA(20) + 2 * StdDev(20)
下轨 = SMA(20) - 2 * StdDev(20)
通道作用:
- 过滤假背离信号
- 确认价格处于极端位置
- 提供额外的支撑/阻力参考
信号生成逻辑
入场信号
做多条件
入场做多 = (
看涨背离计数 > 0 AND
价格穿透通道(Keltner 或 Bollinger) AND
成交量 > 0
)
信号解读:
- 看涨背离:至少有一个指标出现底背离,预示下跌动能衰竭
- 通道穿透:价格触及或穿透通道下轨,确认价格处于极端位置
- 成交量确认:确保有足够的市场参与
做空条件
入场做空 = (
看跌背离计数 > 0 AND
价格穿透通道(Keltner 或 Bollinger) AND
成交量 > 0
)
信号解读:
- 看跌背离:至少有一个指标出现顶背离,预示上涨动能衰竭
- 通道穿透:价格触及或穿透通道上轨,确认价格处于极端位置
- 成交量确认:确保有足够的市场参与
滚动窗口确认
策略使用 3 根 K 线滚动窗口 来确认信号:
# 检查最近 3 根 K 线是否有任意一根满足所有条件
long_condition = long_condition_base.rolling(window=3, min_periods=1).max() > 0
目的:避免单根 K 线的噪音干扰,提高信号可靠性。
出场信号
# 平多条件:出现多个看跌背离
exit_long = 看跌背离计数 > 2
# 平空条件:出现多个看涨背离
exit_short = 看涨背离计数 > 2
出场逻辑:当出现多个反向背离信号时,认为趋势可能已经反转,及时止盈/止损出场。
风险管理
止损策略
策略采用动态止损系统,根据盈利情况自动调整止损位置:
┌─────────────────────────────────────────────────────────────┐
│ 动态止损阶梯 │
├─────────────────────────────────────────────────────────────┤
│ 亏损阶段 (<0%) │ 固定 5% 止损 │
│ 微利阶段 (0-3%) │ 保本止损(保护 70% 利润) │
│ 盈利阶段 (3-8%) │ 保护 70% 利润 │
│ 较高盈利 (8-15%) │ 保护 70% 利润 │
│ 高盈利 (>15%) │ 保护 80% 利润 │
└─────────────────────────────────────────────────────────────┘
止损计算示例:
# 假设入场价 100,当前价格 110,盈利 10%
# 保护 70% 利润 = 保护 7% 盈利
# 止损价位 = 100 + (110-100) * 0.7 = 107
# 实际止损 = (107 - 110) / 110 = -2.73%
ROI 止盈表
策略配置了分阶段止盈,让利润有足够空间奔跑:
| 时间(分钟) | 止盈目标 | 说明 |
|---|---|---|
| 0 | 25% | 极强行情立即止盈 |
| 30 | 18% | 30分钟内达到18%止盈 |
| 60 | 12% | 1小时内达到12%止盈 |
| 120 | 8% | 2小时内达到8%止盈 |
| 300 | 5% | 5小时内达到5%止盈 |
| 600 | 2% | 10小时后保底止盈 |
仓位管理
def custom_stake_amount(self, pair, current_time, current_rate,
proposed_stake, min_stake, max_stake, ...):
max_limit = 10000.0 # 最大仓位限制
return min(proposed_stake, max_limit)
参数配置
可优化参数
策略支持通过 Hyperopt 进行参数优化:
| 参数 | 范围 | 默认值 | 说明 |
|---|---|---|---|
| trailing_stop_positive | 8%-15% | 10% | 追踪止损激活点 |
| trailing_stop_positive_offset | 10%-20% | 15% | 追踪止损偏移量 |
固定参数
| 参数 | 值 | 说明 |
|---|---|---|
| timeframe | 1h | 时间周期 |
| startup_candle_count | 100 | 启动所需 K 线数 |
| stoploss | -5% | 硬止损 |
| PIVOT_WINDOW | 3 | 枢轴点窗口大小 |
Hyperopt 优化示例
# 优化止损参数
freqtrade hyperopt --hyperopt-loss SharpeHyperOptLoss \
--strategy Strategy001 \
--epochs 100 \
--spaces sell
# 优化入场参数
freqtrade hyperopt --hyperopt-loss WinRatioLoss \
--strategy Strategy001 \
--epochs 100 \
--spaces buy
使用建议
回测建议
# 下载历史数据
freqtrade download-data --exchange binance \
--pairs BTC/USDT ETH/USDT \
--timeframe 1h \
--timerange 20230101-20240101
# 运行回测
freqtrade backtesting --strategy Strategy001 \
--timeframe 1h \
--timerange 20230101-20240101
实盘建议
-
资金管理:
- 单笔交易不超过总资金的 2%-5%
- 同时持仓不超过 3-5 个交易对
- 预留足够的保证金应对波动
-
交易对选择:
- 选择流动性好的主流币种
- 避免选择波动过大的小币种
- 建议从 BTC/USDT、ETH/USDT 开始
-
监控要点:
- 关注背离信号的强度(计数越高越可靠)
- 注意通道穿透的有效性
- 观察成交量是否配合
策略组合建议
Strategy001 可以与其他策略组合使用:
| 组合策略 | 效果 |
|---|---|
| 趋势跟踪策略 | 背离策略负责反转,趋势策略负责顺势 |
| 网格策略 | 背离信号触发网格启动/停止 |
| 套利策略 | 背离信号作为入场时机参考 |
常见问题
Q1: 为什么信号出现后没有立即成交?
A: 策略使用延迟确认机制,枢轴点需要等待 3 根 K 线确认。这是为了避免使用未来数据,确保信号的真实可交易性。
Q2: 背离信号准确率如何?
A: 背离信号在震荡行情中准确率较高,但在强趋势行情中可能出现连续背离。建议:
- 配合趋势过滤器使用
- 等待多个指标共振
- 结合通道穿透确认
Q3: 如何调整信号敏感度?
A: 可以通过以下方式调整:
# 方法1:调整枢轴点窗口
check_window = 3 # 增大窗口减少信号,减小窗口增加信号
# 方法2:调整出场阈值
exit_long = 看跌背离计数 > 2 # 增大阈值减少出场,减小阈值增加出场
# 方法3:调整通道条件
# 当前:穿透任一通道即可
# 可改为:必须同时穿透两个通道
Q4: 策略支持哪些交易所?
A: 策略基于 Freqtrade 框架,支持所有主流交易所:
- Binance(推荐)
- Bybit
- OKX
- Kraken
- Gate.io
- Hyperliquid
Q5: 如何查看策略的可视化分析?
A: 使用 Freqtrade 的绘图功能:
# 生成图表
freqtrade plot-dataframe --strategy Strategy001 \
--pairs BTC/USDT \
--timerange 20240101-20240201
图表将显示:
- K 线和通道指标
- EMA 均线
- 背离信号标记(绿色钻石=看涨,红色钻石=看跌)
- 背离计数和指标名称
总结
Strategy001 是一套经过精心设计的谐波背离策略,其核心优势在于:
- 多指标共振:同时监测 11 个技术指标,提高信号可靠性
- 无未来函数:采用延迟确认机制,确保回测结果真实可信
- 动态风控:根据盈利情况自动调整止损,平衡风险与收益
- 可视化支持:提供完整的图表标记,便于分析和优化
策略适合有一定交易经验的用户,建议在实盘前进行充分的回测验证,并根据个人风险偏好调整参数。
免责声明:本策略仅供学习和研究使用,不构成任何投资建议。市场风险较高,请谨慎投资,风险自担。