第21章 市场操纵与价格发现:幌骗、分层、虚假订单与监管检测
说到价格发现,有个绕不开的话题——市场操纵。
我做了这么多年量化,见过太多人试图钻空子。说白了,他们就是想用虚假信息干扰价格,然后自己获利。今天咱们聊聊最常见的三种手法:幌骗、分层、虚假订单。
21.1 幌骗(Spoofing)——虚晃一枪
幌骗,英文叫Spoofing。什么意思呢?
就是挂一个大单在买一或卖一的位置,看起来像是要大量买入或卖出。但实际上,这个单子根本没打算成交。目的就是吓唬其他交易者,让他们以为市场方向要变了。
核心逻辑: 挂单 → 诱导他人跟单 → 撤单 → 反向成交
举个例子。我在2015年做过一个美股策略,当时就遇到过这种情况。某只股票盘口突然出现一个5000手的卖单,价格比当前卖一低了两分钱。很多散户一看,以为要大跌,纷纷跟着卖。结果呢?那个大单在成交前0.1秒撤掉了。价格反而被砸下去,庄家在低位接货。
嗯,这就是典型的幌骗。
21.2 分层(Layering)——层层设局
分层比幌骗更复杂一些。它不是挂一个单,而是挂多个单,形成多层价格阶梯。
你想想看,如果只在某个价位挂一个大单,太明显了。监管一看就知道有问题。但如果你在多个价位都挂单,看起来就像正常的流动性提供者。
我见过一个案例:某交易员在买一到买五分别挂了100手、200手、300手、400手、500手。看起来像是逐步建仓。但实际上,这些单子都是假的,目的就是制造买盘旺盛的假象,把价格推上去。
| 层级 | 价格 | 挂单量 | 真实意图 |
|---|---|---|---|
| 买一 | 10.00 | 100手 | 诱导 |
| 买二 | 9.99 | 200手 | 诱导 |
| 买三 | 9.98 | 300手 | 诱导 |
| 买四 | 9.97 | 400手 | 诱导 |
| 买五 | 9.96 | 500手 | 诱导 |
等价格真的被推上去,这些单子会全部撤掉,然后在高位卖出。
注意: 分层和幌骗的区别在于,分层是多层虚假订单,幌骗是单层或少量虚假订单。两者都是违法行为。
21.3 虚假订单(Phantom Orders)——幽灵单
虚假订单,说白了就是那些永远不会成交的单子。
有些交易者会挂一个超大单,比如10000手,但价格设得很离谱。比如当前价格是10块,他挂个9块的买单。这种单子永远不会成交,但会出现在盘口数据里,影响其他交易者的判断。
我记得有一次做回测,发现某个股票在收盘前5分钟,盘口突然出现一个巨大的买单。很多算法交易看到这个信号,以为有大资金进场,纷纷跟买。结果收盘后一看,那个单子根本没成交,就是用来骗人的。
21.4 监管与检测——怎么抓这些坏蛋?
监管机构也不是吃素的。这些年,CFTC(美国商品期货交易委员会)和SEC(美国证券交易委员会)抓了不少人。
检测方法主要有以下几种:
- 订单撤销率分析: 如果一个账户的撤单率超过95%,基本可以判定有问题。正常交易者的撤单率一般在30%-50%之间。
- 时间戳分析: 虚假订单通常会在成交前极短时间撤单。比如挂单后0.1秒就撤,这明显不正常。
- 价格关联分析: 如果某个账户的挂单总是出现在关键价位附近,而且频繁撤单,那就要小心了。
- 网络拓扑分析: 有些操纵者会用多个账户协同操作。监管会分析这些账户之间的网络关系。
避坑指南: 我曾经帮一个客户做合规系统,发现他的策略撤单率高达70%。虽然他不是故意的,但监管可不管这些。后来我们优化了算法,把撤单率降到了40%以下。所以,做量化一定要关注撤单率这个指标。
21.5 如何用代码检测异常订单?
下面我给一个简单的Python示例,用来检测幌骗行为。
import pandas as pd
import numpy as np
def detect_spoofing(order_book, threshold=0.95):
"""
检测幌骗行为
:param order_book: DataFrame,包含订单数据
:param threshold: 撤单率阈值
:return: 可疑订单列表
"""
suspicious = []
for account_id, group in order_book.groupby('account_id'):
total_orders = len(group)
cancelled_orders = len(group[group['status'] == 'cancelled'])
cancel_rate = cancelled_orders / total_orders
if cancel_rate > threshold:
suspicious.append({
'account_id': account_id,
'cancel_rate': cancel_rate,
'total_orders': total_orders
})
return suspicious
# 示例数据
data = {
'account_id': ['A001', 'A001', 'A001', 'A002', 'A002'],
'price': [10.00, 10.01, 10.02, 10.00, 10.01],
'quantity': [1000, 2000, 1500, 100, 200],
'status': ['cancelled', 'cancelled', 'cancelled', 'filled', 'cancelled']
}
df = pd.DataFrame(data)
result = detect_spoofing(df)
print(result)
这个代码很简单,就是算每个账户的撤单率。如果超过95%,就标记为可疑。
当然,实际生产中要复杂得多。你还要考虑时间窗口、价格变动、订单大小等因素。
21.6 知识体系图
下面我用一张SVG图来总结本章的核心内容。
21.7 我的几点建议
做量化交易,合规是第一位的。我见过太多人因为一时贪心,最后被罚得倾家荡产。
几点建议送给你:
- 不要碰红线: 幌骗、分层这些行为,一旦被抓,轻则罚款,重则坐牢。2015年,英国交易员Navinder Sarao就因为幌骗被判了7年。
- 做好合规检查: 你的策略上线前,一定要做合规测试。看看撤单率、订单停留时间这些指标是否正常。
- 关注监管动态: 各国的监管规则在变。比如美国2010年通过了《多德-弗兰克法案》,明确把幌骗列为违法行为。
- 用技术保护自己: 我建议在交易系统中加入实时监控模块,一旦发现异常行为,自动报警或暂停交易。
记住: 价格发现的本质是真实供需的博弈。任何试图用虚假信息干扰价格的行为,最终都会被市场惩罚。
好了,这一章就到这里。希望你能理解市场操纵的危害,也能学会如何保护自己。