19、交易量与市场操纵:虚假交易量(Wash Trading)。如何识别异常交易量。

各位,咱们今天聊一个比较“脏”的话题——市场操纵。

做量化这些年,我见过不少花招。但最让我头疼的,其实是虚假交易量,也就是业内常说的 Wash Trading。说白了,就是左手倒右手,自己跟自己买卖。目的很简单:制造交易活跃的假象,引诱你进场接盘。

嗯,这玩意儿在加密货币市场尤其猖獗。我在2020年监控一个山寨币对时,就亲眼见过一个交易对,24小时成交量突然暴增300%,但价格纹丝不动。当时我就警觉了——这不对劲。

什么是Wash Trading?

Wash Trading,也叫“对倒交易”。就是同一个实体(或几个串通好的账户),同时挂出买单和卖单,然后自己成交。这样,交易所的成交量统计里就多了一笔记录,但实际所有权并没有发生变化。

你想想看,这跟刷单有什么区别?

我习惯把这种行为比作“注水猪肉”。表面上看着肉很多,实际上全是水分。交易量也一样,看着热闹,其实都是假的。

核心特征: 交易量巨大,但价格几乎不变,或者呈现无规律的窄幅震荡。

为什么有人要搞Wash Trading?

动机其实很直接:

  • 吸引流动性: 很多量化策略会盯着交易量大的品种做。假交易量能骗来真资金。
  • 抬高排名: 一些交易所或项目方,为了上“涨幅榜”或“热门榜”,会自己刷量。
  • 制造FOMO情绪: 散户看到成交量暴增,容易冲动追涨。我见过不少新手就是被这种假量骗进去的。
  • 配合出货: 先刷量制造繁荣假象,等散户跟风买入后,庄家悄悄派发筹码。

如何识别异常交易量?

识别Wash Trading,不能只看成交量绝对值。我总结了几个实战中比较管用的方法:

1. 量价背离检测

这是最直观的。正常情况下,成交量放大,价格应该有明显波动。如果成交量放大但价格纹丝不动,或者波动极小,那就要小心了。

我曾经监控过一个币种,成交量在10分钟内翻了5倍,但价格只波动了0.1%。我当时就判断这是典型的Wash Trading。后来查链上数据,果然发现两个地址在反复互转。

我的经验: 设定一个阈值。比如,成交量变化超过3倍,但价格变化小于0.5%,就触发警报。

2. 订单簿深度分析

Wash Trading的订单簿往往有规律。比如,买单和卖单的挂单量非常接近,而且频繁撤单、重新挂单。我习惯用以下指标:

  • 买卖挂单比: 如果长期维持在1:1附近,且挂单量巨大,可能是对倒。
  • 撤单率: 正常交易撤单率在20%-40%之间。如果超过60%,甚至80%,那大概率在刷量。
  • 挂单时间: 很多Wash Trading的挂单只存在几秒钟,成交后立刻撤单。

3. 交易时间模式

Wash Trading往往发生在流动性较低的时段,比如凌晨2点到5点。因为这时候真实交易者少,不容易被发现。

我记得有一次,一个交易对在凌晨3点突然爆出天量,但白天交易量却很低。这种“夜猫子”行为,基本可以判定为异常。

4. 链上数据交叉验证

如果你做的是加密货币,一定要看链上数据。交易所的成交量可以造假,但链上的转账记录造不了假。

我常用的方法是:

  • 对比交易所的成交量与链上转账量。如果交易所成交量远大于链上转账量,说明有水分。
  • 查看大额转账地址。如果两个地址频繁互转,且金额相近,基本就是Wash Trading。

实战代码示例:检测Wash Trading

下面是我写的一个简单检测脚本。它通过分析成交量与价格波动的比值,来标记异常时段。

import pandas as pd
import numpy as np

def detect_wash_trading(df, volume_col='volume', price_col='close', 
                        volume_threshold=3.0, price_threshold=0.005):
    """
    检测Wash Trading的简单方法
    df: 包含成交量与价格的DataFrame
    volume_threshold: 成交量变化倍数阈值
    price_threshold: 价格变化百分比阈值
    """
    # 计算成交量变化率
    df['volume_change'] = df[volume_col].pct_change()
    # 计算价格变化率
    df['price_change'] = df[price_col].pct_change().abs()
    
    # 标记异常:成交量暴增但价格几乎不变
    df['suspicious'] = (df['volume_change'] > volume_threshold) & \
                       (df['price_change'] < price_threshold)
    
    return df[df['suspicious'] == True]

# 使用示例
# suspicious_trades = detect_wash_trading(ohlc_data)
# print(f"发现 {len(suspicious_trades)} 个可疑时段")
注意: 这个代码只是一个基础版本。实际生产中,你需要结合订单簿数据、链上数据等多维度信息。单靠量价关系,误报率会比较高。

一张图看懂Wash Trading的识别逻辑

下面这张SVG图,是我梳理的识别流程。你可以把它当作一个检查清单。

Wash Trading 识别流程图 获取交易数据 判断1:量价是否背离? 成交量暴增 & 价格几乎不变 判断2:订单簿异常? 高撤单率 / 挂单比1:1 判断3:时间模式? 凌晨交易量异常放大 综合判断:疑似Wash Trading 建议结合链上数据进一步验证 输出预警信号

避坑指南

我曾经踩过一个坑。当时发现一个交易对成交量异常,就立刻下了结论是Wash Trading。结果后来发现,那是一个做市商在调整仓位,并不是恶意操纵。

所以,识别Wash Trading不能只看单一指标。我建议你:

  • 多维度交叉验证: 量价、订单簿、时间、链上数据,至少满足2-3个条件再下结论。
  • 注意市场环境: 重大新闻发布时,成交量放大是正常的。别把正常波动当成操纵。
  • 别只看交易所数据: 交易所的成交量统计口径可能不同。有些交易所会把“吃单”和“挂单”都算进去,导致数据虚高。
我的习惯: 每次发现疑似Wash Trading,我都会先截图保存订单簿和成交记录。万一后续需要举证,这些就是铁证。

好了,关于Wash Trading的识别,今天就聊这么多。记住,交易量是市场的“氧气”,但别被注过氧气的假象骗了。保持警惕,多留个心眼,总没错。

无相订单流研究社 微信Lucian808555