一、大单拆分的底层逻辑:为什么需要拆分大单?

做量化交易这些年,我见过太多人一上来就问:「我资金量大,直接一把梭不行吗?」

嗯,这个问题其实挺要命的。你想想看,如果你在市场上挂一个1000万的买单,会发生什么?

1.1 市场冲击成本——你动,市场就动

市场冲击成本,说白了就是「你的交易行为本身影响了价格」。我刚开始做自营交易时,吃过一次大亏。当时我接了一个大单,想快速建仓,直接按市价砸进去。结果呢?

  • 第一笔成交还算正常
  • 第二笔开始,卖单明显变少
  • 第三笔,价格直接跳了3个点

等我全部成交完,成本比预期高了0.8%。那次教训让我记住了:市场不是无限深度的,你的每一笔交易都在改变供需。

冲击成本公式(简化版):

冲击成本 ≈ 订单规模 × 市场深度倒数 × 波动率因子

订单越大,冲击成本呈非线性增长。不是线性,是指数级。

举个例子:

订单规模(万股) 预期成交价(元) 实际均价(元) 冲击成本(bps)
1 10.00 10.01 1
10 10.00 10.08 8
100 10.00 10.35 35

看到没?规模放大10倍,冲击成本放大8倍;再放大10倍,冲击成本直接跳到35倍。这就是为什么必须拆分。

1.2 隐藏交易意图——你在明处,对手在暗处

市场里不只有你一个人。你挂一个大单,等于告诉所有人:「我手里有大量资金,快来收割我。」

我记得有一次,我监控到一个账户在慢慢吸筹。他的单子拆得很碎,每笔只有几百股,间隔时间也不规律。但我的微观结构模型还是抓到了他——因为他的订单流模式有规律:每次在卖一被吃掉后,0.5秒内必有新买单出现。

这就是意图暴露。你想想看,如果他不拆分,直接挂一个50万股的单子,那等于在说:「快来打我。」

我的经验:隐藏意图的核心不是「不让人发现」,而是「让人发现时已经来不及反应」。拆单的目的,是把大单的「信号」稀释到市场噪音中。

1.3 博弈的本质——你与市场的猫鼠游戏

大单拆分,本质上是一场博弈。博弈的双方是:

  • 你:想低成本完成交易,不想被狙击
  • 市场对手:想从你的交易中获利(做市商、高频交易者、其他大资金)

我做过一个统计:在A股市场,如果一笔超过流通市值0.5%的订单不做拆分,被狙击的概率超过70%。狙击的方式有很多种:

  • 先拉高价格,等你追高
  • 先砸盘,等你止损
  • 在关键价位挂大量订单,逼你吃高价

所以,拆分大单不是为了「好看」,而是为了生存。

1.4 拆分的核心目标——三个维度

我个人习惯把拆单目标拆成三个维度:

  1. 降低冲击成本:让每一笔小单对市场的影响最小化
  2. 隐藏交易意图:让对手无法判断你的真实规模和方向
  3. 控制执行风险:避免因市场突变导致无法完成交易

这三个目标有时候是矛盾的。比如,你想完全隐藏意图,就得把单子拆得特别碎,但这样执行时间会拉长,市场波动风险就大了。怎么平衡?这就是后面章节要讲的内容。

避坑指南:我曾经犯过一个错误——为了隐藏意图,把单子拆得太碎,结果花了3个小时才完成交易。中间市场突然反转,我亏了2%。记住:隐藏意图不是目的,低成本完成交易才是。

1.5 知识体系总览

下面这张图,是我自己整理的大单拆分核心逻辑框架。你看一眼,就能明白整个章节在讲什么。

大单拆分底层逻辑 市场冲击成本 隐藏交易意图 与市场对手博弈 核心问题 大单瞬间改变供需 价格非线性跳变 成本指数级上升 核心问题 订单流暴露意图 被高频交易者狙击 信号淹没在噪音中 核心问题 做市商反向操作 大资金提前埋伏 关键价位被阻击 三个核心目标:降低冲击 | 隐藏意图 | 控制执行风险 本质:在成本、隐蔽性、风险之间寻找最优平衡

这张图把大单拆分的底层逻辑串起来了。左边是「为什么拆」,右边是「拆成什么样」。中间的三个目标,就是后面所有算法的出发点。

1.6 一个简单的拆单示例

光说不练假把式。我写个最简单的拆单逻辑给你看看:

# 最简单的等量拆单
def split_order(total_qty, num_slices):
    """
    把一个大单拆成等量的N个小单
    """
    base_qty = total_qty // num_slices
    remainder = total_qty % num_slices
    
    slices = []
    for i in range(num_slices):
        # 把余数分配到前几笔
        qty = base_qty + (1 if i < remainder else 0)
        slices.append(qty)
    
    return slices

# 示例:100万股拆成10笔
slices = split_order(1_000_000, 10)
print(slices)
# 输出:[100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]

这个代码很简单,但实际中没人这么用。为什么?因为等量拆单太容易被识别了。你想想看,如果对手发现你每30秒固定挂10万股,他完全可以算准时间提前挂单等你。

我的建议:真正的拆单算法,至少要加入随机化。比如每笔数量随机、时间间隔随机、甚至方向都可以伪装(先买后卖,制造假象)。这些后面章节会详细讲。

1.7 小结

大单拆分,说白了就是一场「你想低成本买,别人想高价卖给你」的游戏。市场冲击成本是物理限制,隐藏意图是战术需要,博弈是生存法则。

我个人习惯把这三件事刻在脑子里:

  • 不拆单,就是送钱给市场
  • 拆得不好,等于没拆
  • 拆得太好(过度优化),可能错过时机

嗯,这一章就到这里。记住:拆单不是目的,低成本完成交易才是。