第十八章:订单流与反转交易

反转交易,说白了就是“抄底摸顶”。

但很多人抄底抄在半山腰,摸顶摸在天花板。为什么?

因为他们只看价格,不看订单流。

我个人习惯,判断反转一定要看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 实战中的过滤条件

光有背离信号还不够。你想想看,如果每个背离都做,手续费都亏死。

我一般加三个过滤条件:

  1. Delta绝对值要大:背离时Delta的绝对值至少是前5根K线均值的1.5倍。否则可能是随机波动。
  2. 价格位置要极端:价格处于布林带上轨或下轨附近。背离+极端位置,成功率翻倍。
  3. 成交量配合:背离出现时,成交量最好萎缩。说明市场参与度低,更容易反转。
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 知识体系图

下面这张图,是我自己总结的订单流反转交易框架。你可以保存下来,做交易前对照一下。

订单流反转交易框架 原始数据 计算Delta与价格极值 检测顶背离 / 底背离 / 隐藏背离 过滤条件:Delta绝对值 / 布林带位置 / 成交量 反转信号(做多/做空) 输入层 计算层 过滤层 输出层

18.6 实盘中的注意事项

最后说几个我踩过的坑。

  • 别在震荡市用背离:震荡行情里,背离信号频繁出现,但大部分是假的。我一般只在趋势行情中做背离交易。
  • 背离不是入场点:背离只是预警,不是开仓信号。我习惯等价格突破关键位后再入场。
  • 多周期共振:如果15分钟图出现背离,同时1小时图也出现背离,那这个信号就非常可靠。我一般至少看两个周期。

总结一句话:

订单流背离,是价格与Delta的“貌合神离”。

价格在涨,Delta在跌——别追。

价格在跌,Delta在涨——别割。

等信号确认,再动手。

好了,这一章的内容就到这里。代码你可以直接拿去用,但记得根据自己的品种调整参数。

无相订单流研究社 微信Lucian808555