← 返回模块
lesson-4-5-3-3-opportunistic-and-implementation-shortfall-algosbeta 可读 · 未来付费校验通过内容版本 2026-05-28

机会型与实施缺口(IS)算法

4.5.3 · 执行算法 · 量化全流程

一家深圳私募的交易员收到基金经理的母单:贵州茅台(600519.SH)30,000 股买入,约占 600519.SH 5% ADV,目标窗口 30 分钟,到达价(arrival price)基准。基金经理备注「Alpha 驱动,半衰期小于一小时」。第 2 课的 VWAP 会追着成交量曲线走,把时间风险全部吞下;第 1 课已经告诉你:在到达价基准下,每一基点的时间风险都会出现在 TCA 报告里。本课要搭的,就是适配这张单子的算法家族——Almgren–Chriss 风格的实施差额(implementation shortfall, IS)算法——以及当执行跨出单一场所之后,子单分发的场所树。

学完本课你会拥有:IS 目标与常波动率 / 线性冲击下的闭式轨迹、一次风险厌恶扫描(零极限恢复 TWAP,大极限前置)、订单簿请你偏离时的机会型覆盖规则、在明面与暗面场所之间分发的智能订单路由(SOR)——并把暗池逆向选择讲清楚。算法选型在第 4 课;冲击系数标定在模块 4.5.2;本课直接消费它们。

实施差额(IS)目标函数

IS 目标最小化预期执行成本加上风险厌恶倍数乘成本方差,两项都相对到达决策价 S0S_0 度量。令 xtx_t 为时刻 tt 剩余持仓,x0=Qx_0 = Q(母单数量,买入为正)、xT=0x_T = 0(时间表必须清空)。成交速率 vt=x˙tv_t = -\dot x_t(股/单位时间)。价格过程设为 St=S0+σWtγ(Qxt)S_t = S_0 + \sigma W_t - \gamma (Q - x_t),其中 σ\sigma 为价格波动率、WtW_t 为标准布朗运动、η\eta 为线性短期冲击系数、γ\gamma 为永久冲击系数。实现成本为

C=S0Q0TStvtdt+η0Tvt2dt.C = S_0 Q - \int_0^T S_t v_t \, dt + \eta \int_0^T v_t^2 \, dt.

前两项是实施差额:账面组合价值减去实际现金流出。第三项是短期冲击罚——算法每一时刻快速成交都要付的代价。

Almgren–Chriss 目标为

minvt E[C]+λVar[C],\min_{v_t} \ \mathbb{E}[C] + \lambda \cdot \text{Var}[C],

λ0\lambda \geq 0 是交易员设定的风险厌恶系数。两项分别可解读:E[C]\mathbb{E}[C] 由短期冲击项 ηvt2dt\eta \int v_t^2 dt 主导(冲击随成交速率平方扩张),Var[C]\text{Var}[C] 是时间风险 σ2xt2dt\sigma^2 \int x_t^2 \, dt(剩余持仓上的价格波动)。

Formula Explorer

eta * v^2 + lambda * sigma^2 * x^2

闭式最优轨迹

常波动率、线性冲击下,Euler-Lagrange 条件给出闭式轨迹

x(t)=Qsinh(κ(Tt))sinh(κT),κ=λσ2/η.x^*(t) = Q \cdot \frac{\sinh(\kappa (T - t))}{\sinh(\kappa T)}, \qquad \kappa = \sqrt{\lambda \sigma^2 / \eta}.

唯一的无量纲参数 κT\kappa T 决定弯曲度。两个极限:

  1. ​风险中性(λ0\lambda \to 0κT0\kappa T \to 0):​ sinh(κ(Tt))/sinh(κT)(Tt)/T\sinh(\kappa (T - t)) / \sinh(\kappa T) \to (T - t) / T。轨迹 ​关于时间线性——恰好是 TWAP​​。一个不关心时间风险的交易员应该均匀切片,因为这恰好最小化积分的平方冲击 ηv2dt\eta \int v^2 dt

  2. ​风险厌恶(λ\lambda 大,κT\kappa T 大):​ sinh(κ(Tt))/sinh(κT)eκt\sinh(\kappa (T - t)) / \sinh(\kappa T) \approx e^{-\kappa t}。轨迹 ​前置(front-loaded)​​——算法在前期快速成交以清掉持仓,避免剩余部分继续暴露在波动率风险下。

经济解读干净:Alpha 信号衰减快的交易员要 λ\lambda 大(时间风险痛——Alpha 在执行过程中衰减),低紧迫度再平衡的交易员要 λ\lambda 接近零(冲击主导,TWAP 是对的)。第 4 课负责把交易意图映射到 λ\lambda 值。

针对 600519.SH(沪深300 成分,私募常见标的)的区域锚定(region-anchored)数值算例。下面的 executable Python 片段画出 schedule curvature chart 所需的轨迹,并在不同 λ\lambda 下展示市场冲击(market impact)与滑点(slippage)的权衡:取 Q=30,000Q = 30{,}000T=30T = 30 分钟,单日波动率 σd=2.0\sigma_d = 2.0%(A 股大盘股偏高水平)折算到分钟级 σmin=0.020/240\sigma_{\text{min}} = 0.020 / \sqrt{240}(A 股上午 120 分钟 + 下午 120 分钟共 240 分钟),η=2.0×107\eta = 2.0 \times 10^{-7}(来自模块 4.5.2 对 A 股大盘股的线性冲击校准范围),并扫描 λ{0,109,107,105}\lambda \in \{0, 10^{-9}, 10^{-7}, 10^{-5}\}

import numpy as np

Q = 30_000
T_min = 30
N = 30  # 1 分钟桶
sigma_min = 0.020 / np.sqrt(240)
eta = 2.0e-7
S0 = 1720.0  # 到达中价

def trajectory(lam):
    kappa = np.sqrt(lam * sigma_min**2 / eta)
    t = np.arange(N + 1)
    if kappa * T_min < 1e-6:  # 风险中性极限
        x = Q * (1 - t / N)
    else:
        x = Q * np.sinh(kappa * (T_min - t)) / np.sinh(kappa * T_min)
    return x

for lam in [0, 1e-9, 1e-7, 1e-5]:
    x = trajectory(lam)
    sched = -np.diff(x).astype(int)
    print(f"lambda={lam:.0e}: 前 5 个切片 = {sched[:5]}")

你会看到 λ0\lambda \to 0 时切片趋平(复现 TWAP 的 Q/N=1,000Q/N = 1{,}000 股 / 分钟),λ\lambda 上行时切片激进前置——λ=105\lambda = 10^{-5} 时第一分钟可达 ~4,000 股,后续分钟显著缩小。弯曲度由「冲击半衰期与风险厌恶乘以方差时间窗」之比这一比率决定。本课在此勾画离散化思路,非常波动率 / 非线性冲击的求解器留给一道编程题。

考虑 A 股的午休断点(11:30–13:00):如果窗口跨越午休,把 11:30–13:00 视为零成交时段,时间表必须在 30 分钟连续段内闭合,否则把母单拆成上午 / 下午两段独立 IS 求解——后者在私募常用,叫「分段实施差额」。

机会型覆盖:订单簿告诉你何时偏离

纯 IS 算法机械跟随 x(t)x^*(t)流动性搜寻机会型 覆盖读取限价订单簿(limit order book, LOB),当订单簿提供值得抓的机会时偏离时间表——但不放弃覆盖全程的纪律。

买入端的正典模式:每个 tick 检视卖侧明面队列。当一笔显著大于盘口典型量(5×\geq 5 \times 顶档常态规模)的卖单出现在算法保留价(reservation price)及以下时,算法可以把后续 kk 分钟的预定持仓拉过来一次性吃掉。节省的成本是这 kk 分钟的半价差加上聚合一次性 lift 节省的冲击;付出的成本是剩余时间表方差变大。一个经验法则:单次机会型动作向前拉过的剩余持仓不超过 30%,并要求明面卖单在一个完整的「观察–开火」延迟(latency)周期内可见,避免报价闪烁陷阱。

这层覆盖是真实 IS 算法与教科书时间表的差别。TCA 报告在 Alpha 单上的输赢多半取决于这条规则的纪律。

智能订单路由:跨场所派单

A 股上一笔子单不会只发给一个场所。智能订单路由(smart order router)把它在明面集合(SSE、SZSE 主板)与暗面集合(私募大宗交易窗口、券商内部撮合网络——CSRC 监管下与美式多边暗池形态不同)之间切分。路由器的损失函数权衡有效价差、信息泄露与逆向选择:

LSOR=E[effective spread]+μVar[leakage]βpfill.\mathcal{L}_{\text{SOR}} = \mathbb{E}[\text{effective spread}] + \mu \cdot \text{Var}[\text{leakage}] - \beta \cdot p_{\text{fill}}.

第一项是每笔成交净付出的买卖价差(含手续费)。第二项是信息泄露:每个明面子单泄漏方向,规模大的明面子单引来反向算法抢跑。第三项奖励成交概率——未成交子单是机会成本。路由器求出最小化加权损失的场所组合,并在每个场所最大显示量约束下运行。

A 股的明面 / 暗面切分与美股差别大:SSE 与 SZSE 是主导明面;暗面侧最贴近的形态是 ETF(如 510300.SH)与个股的 ​大宗交易窗口​​(盘后 15:00 后撮合),用作私募块单的暗面落点。CSRC 对疑似报价填塞的机会型模式有约束——这是边界条件,不展开。

暗池 / 大宗交易:均值便宜,尾部被逆向选择

一个暗池(dark pool,A 股语境下的大宗交易窗口与之最接近)在不展示报价的前提下匹配买卖单,价位通常落在中价或国家最优买卖(在 A 股语境下为上证 / 深证盘口)。这降低了信息泄露——对手方看不到你的规模——并降低了有效价差,因为中价定义上夹在买卖之间。这部分省钱。

代价是 ​逆向选择​​。在暗面成交的对手方不是随机的:一部分是被动挂单等自然流(无害),一部分是知情交易者等价格反向后扫单(有害)。在尾部,暗面成交聚集在价格随后向你反向移动的时刻。盘前分析用 ​暗池毒性评分(toxicity score)​ 度量——通常是 5 秒或 30 秒成交后 markout 的平均。-1 bp/5s 的评分意味着暗面成交后 5 秒内价格平均反向移动 1 bp。某些场所稳定地更低毒、某些稳定更高毒;路由器据此分配权重。

值得点名的权衡:30% 暗面分配在 A 股 510300.SH 上典型节省 0.5–1.0 bp 有效价差,但反吃 0.3–0.7 bp 的逆向选择阻力——中位是净赢,尾部当知情对手坐在另一边时可能是净亏。路由器中的 μVar[leakage]\mu \cdot \text{Var}[\text{leakage}] 项就是依据近期毒性读数把暗面分配往上 / 往下推的杠杆。

区分两种风味

两个算法表面像:都偏离静态时间表、都读 LOB、都跨场所派单。区别:

  • ​流动性搜寻 / 机会型。​ 时间表 隐式反应;不优化全局轨迹。
  • ​IS + 覆盖。​ 时间表 显式最优(Almgren–Chriss 闭式);覆盖叠加机会型偏离。

短半衰期 Alpha 单选 IS + 覆盖;「等流动性才成交」的大宗选纯流动性搜寻。

练习

Exercise

你为沪深300 ETF(510300.SH)500,000 股买单运行一个 IS 算法,窗口 20 分钟。线性短期冲击 η=1.0×107\eta = 1.0 \times 10^{-7},分钟级波动率 σmin=6×104\sigma_{\text{min}} = 6 \times 10^{-4}。计算 λ=0\lambda = 0λ=108\lambda = 10^{-8}λ=106\lambda = 10^{-6} 下第 0 分钟与第 19 分钟的切片量。然后说明对以下三种场景你各会取哪个 λ\lambda:(a) 低紧迫度现金流再平衡,(b) 半衰期 10 分钟的 Alpha 驱动建仓,(c) 因合规原因必须在窗口内清空的母单。

提示
κ=λσ2/η\kappa = \sqrt{\lambda \sigma^2 / \eta}λ=0\lambda = 0κ=0\kappa = 0,轨迹线性(TWAP),每个切片 Q/N=25,000Q/N = 25{,}000
提示
较大 λ\lambda 时用 x(t)=Qsinh(κ(Tt))/sinh(κT)x(t) = Q \sinh(\kappa(T-t))/\sinh(\kappa T) 取差分得切片大小。第一个切片最大。
提示
从紧迫度反推 λ\lambda。(a) 取风险中性 λ=0\lambda = 0;(b) 取产生显著前置的 λ\lambda;(c) 把 λ\lambda 推得更大——残量留存的代价压过冲击代价。

与第 4 课的衔接

至此你已有算法家族。剩下的问题是:拿到母单,选哪个家族、参数定多少、盘后 TCA 如何让选择随时间锐化? 第 4 课用 2×2 决策网格、参数调优、TCA 分解、broker-algo 轮盘闭合。本课的 λ\lambda 是第 4 课「更紧急」时拨动的旋钮。