第十七章:订单流与动量指标——RSI、MACD与订单流数据的背离共振
做交易这么多年,我越来越觉得,单一指标就像闭着一只眼睛看盘。你看到价格涨了,但不知道背后是谁在推动。今天咱们聊聊怎么把订单流数据和两个经典动量指标——RSI和MACD结合起来,找到真正的背离共振点。
说白了,背离就是价格和指标“闹别扭”。价格创新高,指标却走弱,这就是顶背离。但传统背离有个致命问题——它只看价格,不看成交量背后的资金意图。订单流数据恰好能补上这块短板。
为什么订单流能提升背离的准确性?
我刚开始做量化那会儿,也吃过传统背离的亏。RSI出现顶背离,我果断做空,结果价格继续拉升,直接打爆我的止损。后来复盘才发现,虽然价格创新高,但订单流显示大单一直在主动买入,Delta持续为正。这哪是背离?这是主力在洗盘啊。
订单流数据给了我们三个传统指标没有的维度:
- Delta(买卖量差):实时反映主动买卖力量的对比
- 大单成交占比:识别机构资金的真实意图
- 累积Delta:判断资金是在积累还是派发
当RSI或MACD出现背离时,如果订单流数据也给出同样的信号,那这个背离的可靠性会大幅提升。我管这叫“双重确认”。
核心逻辑:价格可以骗人,但真金白银的订单流很难造假。背离+订单流共振,才是高胜率的入场信号。
RSI背离 + 订单流Delta背离
RSI背离大家应该都熟悉。价格创新高,RSI没创新高,这就是顶背离。但问题在于,RSI背离后价格可能继续涨很久。怎么过滤掉这些假信号?
我的做法是:在RSI出现背离的同时,检查订单流的Delta是否也出现背离。
具体来说:
- 价格创新高 → 检查RSI是否没创新高
- 同时检查Delta → 如果Delta也在下降,甚至转负,说明上涨缺乏主动买盘支撑
- 两个背离同时出现 → 做空信号,止损设在近期高点上方
反过来,价格创新低,RSI没创新低,同时Delta开始回升甚至转正,这就是底背离共振,做多信号。
个人经验:我习惯用5分钟或15分钟K线做RSI背离,配合逐笔成交的Delta数据。时间周期太短噪音多,太长又滞后。15分钟是我觉得性价比最高的周期。
MACD背离 + 订单流累积Delta背离
MACD的背离判断和RSI类似,但MACD更平滑,适合判断趋势的转折。我一般用MACD的柱状线(Histogram)来做背离判断,因为它比快慢线更敏感。
订单流这边,我用的不是单根K线的Delta,而是累积Delta。累积Delta就像MACD的平滑线,能过滤掉单根K线的噪音,看清资金的整体流向。
判断逻辑:
- 价格创新高,MACD柱状线没创新高 → MACD顶背离
- 同时,累积Delta也在下降,甚至跌破零轴 → 订单流顶背离
- 两个背离共振 → 趋势反转概率极高
我记得有一次做ETH的交易,日线级别MACD出现顶背离,但累积Delta还在创新高。我当时犹豫了一下,没做空。结果价格又涨了20%才见顶。嗯,那次之后我就更坚定了——订单流数据必须和价格、指标一起看,缺一不可。
代码实现:RSI背离 + Delta背离检测
下面是我写的一个简单检测函数,用于识别RSI和Delta的双重背离。代码不复杂,但实战中很实用。
import pandas as pd
import numpy as np
def detect_rsi_delta_divergence(df, rsi_period=14, delta_col='delta'):
"""
检测RSI与Delta的双重背离
df: 包含'high','low','close','delta'的DataFrame
返回: 1=底背离共振, -1=顶背离共振, 0=无信号
"""
# 计算RSI
delta = df['close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=rsi_period).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=rsi_period).mean()
rs = gain / loss
df['rsi'] = 100 - (100 / (1 + rs))
# 寻找最近的两个高点/低点
# 这里简化处理,实际需要更复杂的峰谷检测
last_high_idx = df['high'].rolling(5).max().idxmax()
prev_high_idx = df['high'][:last_high_idx].rolling(5).max().idxmax()
# 检查价格新高但RSI未新高
price_higher = df.loc[last_high_idx, 'high'] > df.loc[prev_high_idx, 'high']
rsi_lower = df.loc[last_high_idx, 'rsi'] < df.loc[prev_high_idx, 'rsi']
# 检查Delta是否也在下降
delta_lower = df.loc[last_high_idx, delta_col] < df.loc[prev_high_idx, delta_col]
if price_higher and rsi_lower and delta_lower:
return -1 # 顶背离共振
# 底背离检测逻辑类似,略
return 0
注意:上面的代码是简化版,实际使用时需要加入峰谷检测算法(比如用scipy.signal的argrelextrema)。另外,Delta数据需要从交易所的逐笔成交数据中聚合计算,不同交易所的数据格式可能不同。
实战中的避坑指南
我曾经踩过一个坑:在震荡行情中,背离共振信号频繁出现,但价格就是不突破。后来我加了一个过滤条件——只有当累积Delta和价格形成明显趋势背离时,才考虑入场。
具体来说,我总结了三个必须检查的条件:
- 趋势确认:价格处于明显的上升或下降趋势中,背离才有意义。横盘震荡时背离信号基本没用。
- 时间周期匹配:RSI/MACD的背离周期要和订单流的聚合周期一致。比如用15分钟K线,Delta也要用15分钟聚合。
- 成交量验证:背离出现时,如果成交量萎缩,说明市场参与度低,信号可靠性下降。
一个小技巧:我习惯在背离共振信号出现后,等一根K线确认。比如出现顶背离共振,等下一根K线收盘价低于信号K线的最低价再入场。虽然会错过一些利润,但能过滤掉很多假突破。
知识体系结构图
下面这张图展示了订单流与动量指标背离共振的核心逻辑。你可以把它当作一个决策流程图来用。
你看,整个流程其实不复杂。关键是把三个维度的数据对齐,找到它们同时发出信号的时刻。我个人的经验是,这种共振信号一个月可能就出现几次,但每次出现,胜率都相当高。
最后说一句,背离共振不是万能钥匙。它更适合在趋势行情中做反转交易,震荡市里还是少用为妙。嗯,今天就聊到这儿,希望对你有帮助。