3、冰山订单识别:冰山订单的特征、如何从订单簿数据中识别冰山订单、冰山订单对价格的影响。
做量化交易这些年,我见过不少新手一上来就盯着订单簿猛看,觉得能看到「全部」的挂单。其实不然。订单簿上显示的东西,很多时候只是冰山一角——字面意义上的冰山一角。
今天我们就来聊聊这个让很多人吃过亏的东西:冰山订单。
3.1 冰山订单长什么样?
冰山订单,说白了就是大资金不想暴露自己真实意图时用的手法。挂单只显示一小部分,剩下的藏在下面。就像冰山,水面上的只是尖尖,底下才是大头。
它的核心特征就三个:
- 显示量小,总量大:比如你想买100万股,但只挂出1万股。吃掉这1万股后,系统自动再补1万股上来。
- 价格固定:所有隐藏部分都在同一个价位上,不会变来变去。
- 持续补充:只要没成交完,就会一直补单,直到总量全部成交或被撤销。
我在项目中遇到过一个大户,用冰山订单在某个价位上挂了整整2000手。订单簿上只显示50手。当时很多散户看到这个价位支撑很强,纷纷跟单。结果呢?大户慢慢撤单,散户全被挂在了山顶上。嗯,这就是冰山订单的威力。
重要特征总结:
- 显示量 = 冰山参数(比如每次只露10%)
- 总量 = 显示量 × 冰山层数(可能10层、20层)
- 价格不变,但挂单量会「复活」
3.2 怎么从订单簿数据里揪出冰山订单?
你可能会问:订单簿上只显示一小部分,我怎么知道底下还有?
其实是有痕迹的。我总结了几条实战经验:
方法一:盯住「复活」的挂单
正常情况下,一个价位的挂单被吃掉就没了。但如果某个价位的挂单被吃掉后,同样的价格、同样的量又冒出来了——这就是冰山订单最明显的特征。
举个例子:
# 伪代码示意
def detect_iceberg(order_book, price_level):
"""
检测某个价位是否存在冰山订单
"""
# 记录该价位的历史挂单量
history = order_book.get_history(price_level)
# 如果挂单被吃掉后又恢复原样
if history[-1] == 0 and history[-2] > 0:
# 检查是否恢复到了之前的量
if history[-3] == history[-1]: # 注意:这里需要更严谨的逻辑
return True
return False
当然,实际代码要复杂得多。你需要考虑时间窗口、成交量阈值、价格变动等因素。但核心逻辑就是这个——死而复生。
方法二:看成交量的「异常堆积」
冰山订单还有一个特征:在某个价位上,累计成交量会远远超过订单簿上显示的量。
比如订单簿上显示买一价有100手,但一天下来这个价位成交了500手。你想想看,这多出来的400手是哪来的?
| 价位 | 显示挂单量 | 累计成交量 | 疑似冰山? |
|---|---|---|---|
| 10.00 | 100手 | 450手 | ✅ 是 |
| 10.02 | 200手 | 210手 | ❌ 否 |
| 10.05 | 50手 | 380手 | ✅ 是 |
我曾经用这个办法抓出过一个持续了整整一周的冰山订单。那个大户每天在同一个价位挂500手,但实际每天成交超过3000手。嗯,一周下来,我跟着吃了不少肉。
方法三:分析订单簿的「深度异常」
冰山订单还会造成一个现象:某个价位的挂单量突然变大,但相邻价位却没什么变化。
正常情况下的挂单分布应该是比较平滑的。如果出现一个「尖峰」,而且这个尖峰在被吃掉后反复出现——基本可以确定是冰山。
实战小技巧:
我个人习惯用5档深度的数据来做检测。太浅了看不到全貌,太深了噪音太多。5档刚刚好。
3.3 冰山订单对价格的影响
冰山订单对价格的影响,说白了就是两个字:误导。
影响一:制造虚假的支撑/阻力
一个大买家在10.00元挂冰山订单,每次只露100手。你看到的是「10.00有100手支撑」。但实际上,底下可能藏着10000手。
这时候如果你做空,就会感觉「怎么砸都砸不下去」。因为每次吃掉100手,马上又补100手。你以为支撑很弱,其实强得离谱。
影响二:引发跟风盘
冰山订单还有一个副作用:它会吸引散户跟单。散户看到某个价位反复出现大单,会觉得「有大资金在护盘」,于是纷纷跟进去。
这就形成了一个正反馈:冰山订单 → 散户跟单 → 价格更稳 → 更多散户跟单。等大户想撤的时候,嘿嘿,你懂的。
影响三:价格突破时的「真空地带」
这一点很多人容易忽略。冰山订单一旦被完全吃掉(总量耗尽),那个价位会瞬间变成真空。因为之前积累的跟风盘也会同时消失。
结果就是:价格会快速穿过这个价位,往下一个支撑/阻力位狂奔。
避坑指南:
我曾经在交易中吃过这个亏。看到一个价位支撑很强,就重仓做多。结果那个冰山订单的总量刚好被吃完,价格瞬间跳水。嗯,那次亏得我一个月没睡好觉。
所以我的建议是:不要只看订单簿的当前状态,要结合成交量分析来判断是不是冰山。
3.4 一个简单的冰山检测框架
最后,我分享一个我自己在用的检测框架。不复杂,但很实用。
class IcebergDetector:
def __init__(self, window_size=10, volume_ratio=3):
self.window = window_size # 检测窗口
self.ratio = volume_ratio # 成交量/挂单量阈值
def check_price_level(self, price, order_book, trade_history):
"""
检测某个价位是否存在冰山订单
"""
# 1. 获取该价位的挂单量
display_volume = order_book.get_volume(price)
# 2. 获取最近N笔在该价位的成交量
recent_volume = sum(
t.volume for t in trade_history[-self.window:]
if t.price == price
)
# 3. 如果成交量远大于挂单量,疑似冰山
if display_volume > 0 and recent_volume > display_volume * self.ratio:
return True
# 4. 检查挂单是否「复活」
if self._check_resurrection(price, order_book):
return True
return False
def _check_resurrection(self, price, order_book):
# 检查历史记录中该价位是否被吃掉后又恢复
# 具体实现略...
pass
这个框架的核心逻辑就两个:成交量异常和挂单复活。你可以在自己的策略里加上这个检测,能避开不少坑。
好了,冰山订单这块就聊到这儿。记住一句话:订单簿上看到的,不一定是真的。尤其是那些反复出现的「大单」,多留个心眼。
公众号:蓝海资料掘金营,微信 deep3321