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