技术博客

量化接入:API 柜台与算法交易——TWAP/VWAP 的执行端实现

第 39 / 141 篇 · 2026-09-12 · secfin · 量化交易算法交易订单执行

一笔要卖 100 万股的单,直接挂出去会怎样?它会在盘口上形成一个巨大的卖压信号,对手方看到后往后撤,成交价格一路被自己的卖单砸下去——大单自身就是市场冲击的制造者。算法交易要解决的问题:在可接受的时间内完成大母单,同时把冲击成本压到最低。这篇讲执行端的两个基准算法(TWAP/VWAP)和它们的系统实现。

从人工拆单到算法母单

散户拆单手忙脚乱,机构的做法是把"怎么拆"标准化成算法。系统建模上引入母单-子单两层:母单持有客户的原始意图(方向、总量、时间窗、约束条件),执行引擎把母单切成一串子单按节奏释放到柜台。柜台看到的是普通委托,算法引擎看到的是状态机——这个分层让柜台对算法无感知,算法引擎可以独立迭代。

TWAP(时间加权平均价格)的目标最朴素:在时间窗内均匀释放。把总时长分成 $n$ 个切片,每切片成交量:

$$ q_i = \frac{Q}{n} $$

VWAP(成交量加权平均价格)的目标是按市场的成交分布来释放:成交量高的时段多放、清淡的时段少放。用历史成交量曲线 $v(t)$(通常是过去 20 日的平均日内分布)做权重:

$$ q_i = Q \cdot \frac{v_i}{\sum_j v_j} $$

A 股的日内分布有个稳定的 U 形:开盘半小时和收盘半小时占全天成交的三到四成,午间清淡。VWAP 切片的节奏就是这个 U 形的采样。

两个算法的共同点:它们优化的都不是"最低价",而是成交均价贴近基准(TWAP 贴近时间均价,VWAP 贴近成交量均价)。为什么要贴近基准而不是追求最优?因为基准可审计、可解释——执行算法的服务对象是机构合规,"我跑赢了 VWAP 基准 3 个基点"是一句能在风控委员会上交代的话,"我买到了当天最低价"不是。

执行引擎:状态机加反馈环

子单的释放不是无脑的定时任务,每条子单发出去之后要接回报,回报驱动母单状态机迁移。一个 VWAP 母单的生命周期:

  1. 参数校验:时间窗合法、母单量是手数整数倍、参与率上限合理(通常不超过当日预估成交量的 10%~20%,超过就是自己制造冲击);
  2. 切片调度:按 VWAP 曲线生成子单序列,首片通常提前或加重——开盘流动性最好,首片冲量降低后续压力;
  3. 逐片执行:每片是一个"限价单 + 超时"的小状态机。片内未成交的部分到点撤掉,剩余量滚入后续切片(工程量向后平移,保持总进度对齐曲线);
  4. 进度对账:每分钟对比"计划累计量"和"实际累计量",偏差超阈值(比如 5%)就加速后续切片或放宽限价;
  5. 终态处理:全部完成、时间窗耗尽(剩余量按收盘价规则处理或滚入次日)、或人工干预终止。

第 3、4 步的反馈环是算法的灵魂。静态切片遇到突发行情(临停、闪崩)会机械地继续挂单,反馈环让算法感知执行质量:当前切片成交率骤降,说明限价偏离市场太远或流动性消失,该追价还是该停下来,是策略参数决定的——激进参数追价保进度,保守参数暂停保价格。

滑点:算法质量的唯一度量

算法好不好,看滑点(Slippage)。基准定义是决策价(发母单时的中间价)与实际成交均价的差:

$$ \text{IS} = \frac{VWAP_{\text{exec}} - P_{\text{decision}}}{P_{\text{decision}}} \times 10^4 \quad (\text{单位:bps}) $$

执行缺口(Implementation Shortfall)框架把它分解:滑点 = 冲击成本(自己的单子推动价格的部分)+ 机会成本(没成交的部分偏离的部分)+ 费用。其中冲击成本有个经验规律——平方根定律:交易规模占市场成交量的比例越大,单位冲击成本越高,且按平方根增长:

$$ \text{冲击} \propto \sigma \sqrt{\frac{Q}{V}} $$

$\sigma$ 是日内波动率,$Q/V$ 是参与率。平方根定律的工程含义直接决定算法参数:参与率翻倍,冲击成本只增 41%($\sqrt{2}$),但完成时间减半——所以激进与保守的权衡不是线性的,存在参与率的甜点区,这也是各大执行 algo 的核心调参机密。

另一个度量维度是 POV(Percent of Volume,成交量跟随):子单速率绑定实时成交速率("始终占市场成交量的 3%"),不吃历史曲线,完全跟随当下流动性。POV 在行情清淡时自动放慢,火爆时自动加快,缺点是完成时间不可预期——母单可能拖到最后也没完成。实务中常做 VWAP 加 POV 的混合:以 VWAP 曲线为主计划,以 POV 速率封顶。

对柜台系统的延伸要求

算法交易把压力传回柜台:一个母单产生数百倍于母单笔数的委托流量,撤单率同步飙升(没成交的子单到点就撤)。这正是撤单篇"撤单风暴是容量攻击"的正规军版本——算法引擎自己就是最大的撤单来源。极速柜台对算法客户的支持,本质是队列容量和撤单吞吐的容量规划问题;而算法引擎对柜台的要求反过来塑造了柜台的接口设计(批量报单、母单级状态查询、切片级回报聚合),这是交易技术里需求双向塑造的典型案例。

VWAP 执行:母单状态机驱动子单按日内 U 形曲线释放母单:卖出 100 万股时间窗 9:30 ~ 15:00执行引擎(切片调度)9:30 开盘重14:57 尾盘重切片大小 ∝ 历史成交量曲线(日内 U 形)反馈环:逐片接回报,偏差超阈值则追价或暂停冲击成本 ∝ σ√(Q/V)参与率翻倍仅 +41%