第十八章:订单流与反转交易
反转交易,说白了就是“抄底摸顶”。
但很多人抄底抄在半山腰,摸顶摸在天花板。为什么?
因为他们只看价格,不看订单流。
我个人习惯,判断反转一定要看Delta与价格的背离。价格创新高,Delta却在下降——这就是典型的顶背离信号。反过来,价格创新低,Delta却在上升——底背离。
今天我们就来聊聊,怎么用Python捕捉这些背离信号。
18.1 什么是订单流背离?
先理清一个概念。
订单流背离,不是价格与指标背离,而是价格与“买卖力量”背离。
Delta = 主动买量 - 主动卖量。
当价格涨了,Delta却跌了——说明上涨是虚的,有人在偷偷出货。
当价格跌了,Delta却涨了——说明下跌是假的,有人在悄悄吸筹。
我在项目中遇到过好几次,价格突破新高,散户追进去,结果主力直接砸盘。回头看Delta,早就拐头了。
核心逻辑:
- 顶背离:价格高点 > 前高,Delta高点 < 前高
- 底背离:价格低点 < 前低,Delta低点 > 前低
18.2 背离的两种形态
嗯,这里要注意,背离不是只有一种。
我把它分成两类:
| 类型 | 价格 | Delta | 含义 |
|---|---|---|---|
| 常规顶背离 | 新高 | 未创新高 | 上涨动能衰竭 |
| 隐藏顶背离 | 未创新高 | 创新高 | 主力试盘,即将反转 |
| 常规底背离 | 新低 | 未创新低 | 下跌动能衰竭 |
| 隐藏底背离 | 未创新低 | 创新低 | 主力洗盘,即将反转 |
你想想看,隐藏背离其实更危险。因为它不容易被发现。我曾经吃过这个亏,以为价格没破位就没事,结果Delta已经提前爆量了。
18.3 Python实现反转信号检测
下面我直接上代码。这个是我自己用的检测函数,经过实盘验证的。
import pandas as pd
import numpy as np
def detect_divergence(df, price_col='close', delta_col='delta', window=5):
"""
检测Delta与价格的背离信号
df: 包含价格和Delta的DataFrame
window: 比较窗口,默认5根K线
返回:信号DataFrame
"""
signals = pd.DataFrame(index=df.index)
signals['price_high'] = df[price_col].rolling(window=window, center=True).max()
signals['price_low'] = df[price_col].rolling(window=window, center=True).min()
signals['delta_high'] = df[delta_col].rolling(window=window, center=True).max()
signals['delta_low'] = df[delta_col].rolling(window=window, center=True).min()
# 顶背离:价格创新高,Delta未创新高
top_div = (signals['price_high'] > signals['price_high'].shift(1)) & \
(signals['delta_high'] <= signals['delta_high'].shift(1))
# 底背离:价格创新低,Delta未创新低
bot_div = (signals['price_low'] < signals['price_low'].shift(1)) & \
(signals['delta_low'] >= signals['delta_low'].shift(1))
signals['top_divergence'] = top_div
signals['bot_divergence'] = bot_div
return signals
# 使用示例
# df = pd.read_csv('orderflow_data.csv')
# result = detect_divergence(df, window=5)
# print(result[result['top_divergence'] | result['bot_divergence']])
避坑指南:
我曾经把window设得太小(比如3),结果噪声太多,全是假信号。后来改成5-8,效果好了很多。具体数值你可以根据品种调整,但别小于5。
18.4 实战中的过滤条件
光有背离信号还不够。你想想看,如果每个背离都做,手续费都亏死。
我一般加三个过滤条件:
- Delta绝对值要大:背离时Delta的绝对值至少是前5根K线均值的1.5倍。否则可能是随机波动。
- 价格位置要极端:价格处于布林带上轨或下轨附近。背离+极端位置,成功率翻倍。
- 成交量配合:背离出现时,成交量最好萎缩。说明市场参与度低,更容易反转。
def filter_divergence(df, signals, delta_threshold=1.5, bb_period=20):
"""
过滤背离信号
"""
# 计算布林带
df['ma'] = df['close'].rolling(bb_period).mean()
df['std'] = df['close'].rolling(bb_period).std()
df['upper'] = df['ma'] + 2 * df['std']
df['lower'] = df['ma'] - 2 * df['std']
# 计算Delta均值
df['delta_ma'] = df['delta'].rolling(5).mean()
# 顶背离过滤:价格在上轨附近,Delta绝对值大于均值1.5倍
top_filter = (df['close'] >= df['upper'] * 0.98) & \
(df['delta'].abs() >= df['delta_ma'].abs() * delta_threshold)
# 底背离过滤:价格在下轨附近
bot_filter = (df['close'] <= df['lower'] * 1.02) & \
(df['delta'].abs() >= df['delta_ma'].abs() * delta_threshold)
signals['filtered_top'] = signals['top_divergence'] & top_filter
signals['filtered_bot'] = signals['bot_divergence'] & bot_filter
return signals
注意:
过滤条件不是越多越好。加太多条件,信号会变得极少,甚至几个月都等不到一次。我一般保持2-3个核心条件就够了。
18.5 知识体系图
下面这张图,是我自己总结的订单流反转交易框架。你可以保存下来,做交易前对照一下。
18.6 实盘中的注意事项
最后说几个我踩过的坑。
- 别在震荡市用背离:震荡行情里,背离信号频繁出现,但大部分是假的。我一般只在趋势行情中做背离交易。
- 背离不是入场点:背离只是预警,不是开仓信号。我习惯等价格突破关键位后再入场。
- 多周期共振:如果15分钟图出现背离,同时1小时图也出现背离,那这个信号就非常可靠。我一般至少看两个周期。
总结一句话:
订单流背离,是价格与Delta的“貌合神离”。
价格在涨,Delta在跌——别追。
价格在跌,Delta在涨——别割。
等信号确认,再动手。
好了,这一章的内容就到这里。代码你可以直接拿去用,但记得根据自己的品种调整参数。