第二十六章:市场操纵检测——幌骗、分层、虚假申报与模式识别

市场操纵,说白了就是有人用资金或订单优势,故意扭曲价格。我做了这么多年量化,见过太多花招了。今天咱们就聊聊最常见的几种:幌骗、分层、虚假申报,以及怎么用代码把它们揪出来。

26.1 什么是幌骗(Spoofing)?

幌骗,英文叫 Spoofing。手法很简单:挂一个大单在买一或卖一,但不打算成交。目的就是吓唬其他交易者,让他们以为这里有很强的支撑或压力。

举个例子:

  • 有人在卖一挂了 1000 手卖单
  • 价格开始下跌,其他散户慌了,跟着卖
  • 等价格跌到目标位,他迅速撤单,然后低价买入

我在项目中遇到过一个大户,每天下午 2:55 准时在股指期货上挂 500 手卖单,然后 2:59 撤单。连续一周,我盯盘盯得眼睛都花了。后来用代码一跑,发现他的撤单率高达 97%。嗯,这基本就是幌骗没跑了。

核心特征:

  • 大单挂单后快速撤单(撤单率 > 90%)
  • 挂单时间极短(通常 < 3 秒)
  • 挂单方向与最终成交方向相反

26.2 分层(Layering)是什么?

分层是幌骗的升级版。不是只挂一层,而是挂多层。比如:

  • 在卖一到卖五,每层都挂上大单
  • 制造出「上方压力重重」的假象
  • 等价格被打下来,他再撤单买入

你想想看,如果只是卖一有压力,散户可能还会扛一扛。但卖一到卖五全是巨量,谁看了不慌?这就是分层的心理战术。

我记得有一次做回测,发现某只股票每天开盘前 5 分钟,盘口深度异常。卖一到卖五的总量是正常水平的 8 倍,但成交率不到 2%。后来查了一下,那段时间正好有监管处罚案例——就是分层操纵。

26.3 虚假申报

虚假申报比幌骗更隐蔽。它不是挂大单,而是频繁地挂单、撤单、再挂单。目的不是吓人,而是制造交易活跃的假象,吸引跟风盘。

特征:

  • 申报量很大,但成交极少
  • 撤单频率极高(每分钟撤单几十次)
  • 挂单价格紧贴对手盘(比如买一挂 10.01,卖一挂 10.02)

我的经验:虚假申报的识别,关键看「申报成交比」。如果一个人申报了 1000 万,但只成交了 5 万,那基本就是在刷单。我曾经用这个指标抓出过好几个高频刷单账户。

26.4 操纵模式识别——代码实现

光说不练假把式。咱们直接上代码。下面是一个检测幌骗和分层的 Python 示例:

import pandas as pd
import numpy as np

def detect_spoofing(orderbook_df, threshold_ratio=0.9, time_window=3):
    """
    检测幌骗行为
    :param orderbook_df: DataFrame,包含时间、价格、挂单量、撤单量
    :param threshold_ratio: 撤单率阈值
    :param time_window: 挂单存活时间阈值(秒)
    """
    # 计算撤单率
    orderbook_df['cancel_ratio'] = (
        orderbook_df['cancel_volume'] / 
        (orderbook_df['order_volume'] + 1e-8)
    )
    
    # 计算挂单存活时间
    orderbook_df['order_lifetime'] = (
        orderbook_df['cancel_time'] - orderbook_df['order_time']
    ).dt.total_seconds()
    
    # 标记可疑订单
    suspicious = (
        (orderbook_df['cancel_ratio'] > threshold_ratio) & 
        (orderbook_df['order_lifetime'] < time_window) &
        (orderbook_df['order_volume'] > orderbook_df['order_volume'].quantile(0.95))
    )
    
    return orderbook_df[suspicious]

# 使用示例
# df = pd.read_csv('orderbook_data.csv')
# spoofing_orders = detect_spoofing(df)
# print(f"发现 {len(spoofing_orders)} 笔可疑幌骗订单")

这段代码的核心逻辑:

  • 撤单率 > 90%
  • 挂单存活时间 < 3 秒
  • 挂单量在当天属于前 5% 的大单

三个条件同时满足,基本就是幌骗了。

26.5 分层检测的进阶方法

分层检测比幌骗复杂一点。我们需要看的是「订单簿的斜率变化」。正常市场里,从买一到买五,价格越低挂单量越大。但分层操纵会打破这个规律。

def detect_layering(orderbook_df, depth_levels=5):
    """
    检测分层操纵
    :param orderbook_df: 包含各档位挂单量的 DataFrame
    :param depth_levels: 检测的深度层数
    """
    # 计算每层的挂单量占比
    for i in range(1, depth_levels+1):
        orderbook_df[f'level_{i}_ratio'] = (
            orderbook_df[f'ask_volume_{i}'] / 
            orderbook_df['total_ask_volume']
        )
    
    # 分层特征:前两层占比异常高
    orderbook_df['layering_score'] = (
        orderbook_df['level_1_ratio'] + 
        orderbook_df['level_2_ratio']
    )
    
    # 标记异常
    threshold = orderbook_df['layering_score'].quantile(0.99)
    return orderbook_df[orderbook_df['layering_score'] > threshold]

避坑指南:我曾经犯过一个错误——只盯着大单看。结果发现很多正常的大户也是高撤单率,因为他们用的是算法交易,会频繁调整订单。后来我加了一个条件:挂单方向与最终成交方向必须相反。这才把误报率降下来。

26.6 知识体系总览

下面这张图,是我自己梳理的市场操纵检测框架。你可以把它当作一个检查清单:

市场操纵检测框架 幌骗 (Spoofing) 分层 (Layering) 虚假申报 检测指标 • 撤单率 > 90% • 挂单存活时间 < 3s • 大单占比 > 95%分位 检测指标 • 多层挂单量异常 • 订单簿斜率突变 • 前两层占比 > 99%分位 检测指标 • 申报成交比极低 • 撤单频率 > 30次/分 • 挂单紧贴对手盘 综合判定与报警 输出:可疑账户列表 + 操纵时间段 + 置信度评分

26.7 实战中的注意事项

做操纵检测,有几个坑我踩过,分享给你:

  1. 别只看单一指标。撤单率高不一定是幌骗,也可能是算法交易在调整。一定要结合方向判断。
  2. 注意时间窗口。开盘和收盘前 5 分钟,操纵行为最集中。我一般会在这两个时段提高检测灵敏度。
  3. 小心误报。有些做市商也会频繁挂撤单,但人家是合规的。你需要一个白名单过滤掉做市商账户。

一个小技巧:如果你没有完整的订单簿数据,可以用逐笔成交数据反推。比如,看到连续大单成交后价格没怎么动,那大概率有人在挂单托市。我写过一套基于逐笔成交的检测逻辑,准确率大概在 75% 左右,够用了。

26.8 总结

市场操纵检测,说白了就是跟聪明钱斗智斗勇。幌骗、分层、虚假申报,这三招是散户最容易被割韭菜的地方。但只要你掌握了撤单率、挂单存活时间、申报成交比这几个核心指标,再配合代码自动化监控,就能把大部分操纵行为揪出来。

我个人习惯是每天收盘后跑一遍全市场检测,生成可疑名单。第二天开盘前再看一眼,心里有数。嗯,这套流程我用了三年,效果还不错。

无相订单流研究社 微信Lucian808555