1. 课程导入与目标设定
在真实交易中,盘口(Order Book)并不是一张静态的报价表,而是一个会随订单流不断被“吃掉”和“补上”的动态结构。很多初学者看盘时只盯着买一卖一,认为“卖一挂了多少手”就是当前最大的抛压。但真正决定一笔大额卖单会造成多大价格冲击的,是它穿透了多少档、每档有多厚、穿完之后上方还有多少承接。本课程要训练的,正是把这种“看不见的穿透过程”变成可计算、可观察、可复盘的模拟能力。
所谓“大额卖单穿透多档盘口模拟”,指的是:给定一个当前盘口的快照(各档价格与挂单量),再给定一笔远超卖一档挂单量的主动卖出委托,按照价格优先、时间优先的撮合规则,逐档消耗买方挂单,推算出成交均价、成交明细、穿透档数、剩余未成交量以及穿透后的新盘口状态。它不是简单地用“卖单量 ÷ 卖一量”做除法,而是要考虑逐档价格递增(对卖方而言是逐档下移成交)、每档容量有限、大单可能分笔成交等真实约束。
本节要建立的三件事
第一章不急于写代码,而是先把“为什么学、学什么、学成什么样”这三件事定清楚,否则后面的建模很容易变成机械地套公式。
第一,理解核心价值。大额卖单穿透模拟至少有三个直接用途:其一,冲击成本预估——在真正下单前估算这笔卖单会把价格打到什么位置、平均成交价偏离盘口中间价多少;其二,策略容量评估——判断某个策略在给定盘口深度下最多能承接多大资金量而不显著恶化成交价;其三,盘口韧性观察——穿透后上方档位是否迅速补量,反映市场对该价位的承接意愿。这三点决定了本课程不是“算一道数学题”,而是服务于交易决策的工具。
第二,明确学习路径。课程整体按“盘口结构 → 撮合规则 → 单笔穿透计算 → 多笔与部分成交 → 冲击成本指标 → 复盘与参数敏感性”递进。第一章建立全局地图,后续章节逐步把地图上的每一块填实。学习者应带着一个问题往下走:给定一份盘口快照和一笔卖单,我能否手算出成交明细,并用代码复现且结果一致?
第三,设定可检验的实战目标。学完本课程,应能独立完成:读取一份包含 5~10 档的盘口数据;对一笔指定数量的市价卖单逐档撮合;输出每档成交量、成交价、剩余量;计算成交量加权平均价(VWAP)与相对中间价的滑点;并能在盘口变化后重新计算,比较不同深度下的冲击差异。
用一个示例把目标“落地”
为避免目标悬空,先看一个简化示例(以下数据为教学假设,非实测)。假设某标的当前买盘五档如下:买一 10.00 元挂 800 手,买二 9.99 元挂 1500 手,买三 9.98 元挂 2200 手,买四 9.97 元挂 3000 手,买五 9.96 元挂 4000 手。现有一笔 6000 手的市价卖单。按逐档撮合:买一成交 800 手,剩余 5200 手;买二成交 1500 手,剩余 3700 手;买三成交 2200 手,剩余 1500 手;买四成交 1500 手后卖单全部成交,买四剩余 1500 手。最终穿透 4 档,成交均价约为 (800×10.00 + 1500×9.99 + 2200×9.98 + 1500×9.97) ÷ 6000 ≈ 9.9815 元。若盘口中间价为 10.005 元,则滑点约为 0.0235 元,约 23.5 个基点。这个数字才是交易者真正关心的“代价”。
可以看到,同样是 6000 手,如果买一挂量更厚,穿透档数会减少、均价会更优;如果买三、买四很薄,卖单会一路下探到更深档位。这正是本课程要反复训练的判断力:结果对盘口形状高度敏感,必须逐档算,不能拍脑袋估。
学习时容易踩的三个坑
坑一:把“穿透档数”当成固定值。穿透档数完全由卖单量与各档挂单量共同决定,同一笔卖单在不同时点可能穿 3 档也可能穿 6 档。模拟时必须用当时的盘口快照,不能沿用旧数据。
坑二:忽略部分成交与剩余量。卖单往往在某一档被“部分吃掉”,该档剩余挂单量会保留在盘口中。示例中买四成交 1500 手后仍剩 1500 手,这个剩余量会影响后续盘口形态,不能简单清零。
坑三:混淆成交价与盘口价。成交价是逐档实际撮合价,成交均价是加权结果,二者都不等于卖一价或中间价。滑点必须相对一个明确的基准(如中间价或到达价)计算,基准不同结论不同,全文需保持一致。
本课程的可交付成果
完成本课程后,学习者应能拿出一份可复用的“穿透模拟记录表”,至少包含:盘口快照时间、各档价格与挂单量、卖单数量、逐档成交量、逐档成交价、成交均价、穿透档数、剩余未成交量、滑点(相对中间价,单位 bp)。这份表既是练习成果,也是后续复盘和参数敏感性分析的输入。第一章的任务,就是先把这张表的“字段含义”和“计算逻辑”在头脑中建立起来,为后续逐章填充细节做好准备。
接下来,请带着一个具体问题进入后续学习:如果我把示例中的卖单从 6000 手改成 3000 手或 9000 手,穿透档数、成交均价和滑点会怎样变化?变化是线性的吗?这个问题的答案,将贯穿整门课程。