一家深圳私募的交易员收到基金经理的母单:贵州茅台(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 目标最小化预期执行成本加上风险厌恶倍数乘成本方差,两项都相对到达决策价 度量。令 为时刻 剩余持仓,(母单数量,买入为正)、(时间表必须清空)。成交速率 (股/单位时间)。价格过程设为 ,其中 为价格波动率、 为标准布朗运动、 为线性短期冲击系数、 为永久冲击系数。实现成本为
前两项是实施差额:账面组合价值减去实际现金流出。第三项是短期冲击罚——算法每一时刻快速成交都要付的代价。
Almgren–Chriss 目标为
是交易员设定的风险厌恶系数。两项分别可解读: 由短期冲击项 主导(冲击随成交速率平方扩张), 是时间风险 (剩余持仓上的价格波动)。
Formula Explorer
eta * v^2 + lambda * sigma^2 * x^2闭式最优轨迹
常波动率、线性冲击下,Euler-Lagrange 条件给出闭式轨迹
唯一的无量纲参数 决定弯曲度。两个极限:
-
风险中性(,): 。轨迹 关于时间线性——恰好是 TWAP。一个不关心时间风险的交易员应该均匀切片,因为这恰好最小化积分的平方冲击 。
-
风险厌恶( 大, 大): 。轨迹 前置(front-loaded)——算法在前期快速成交以清掉持仓,避免剩余部分继续暴露在波动率风险下。
经济解读干净:Alpha 信号衰减快的交易员要 大(时间风险痛——Alpha 在执行过程中衰减),低紧迫度再平衡的交易员要 接近零(冲击主导,TWAP 是对的)。第 4 课负责把交易意图映射到 值。
针对 600519.SH(沪深300 成分,私募常见标的)的区域锚定(region-anchored)数值算例。下面的 executable Python 片段画出 schedule curvature chart 所需的轨迹,并在不同 下展示市场冲击(market impact)与滑点(slippage)的权衡:取 , 分钟,单日波动率 %(A 股大盘股偏高水平)折算到分钟级 (A 股上午 120 分钟 + 下午 120 分钟共 240 分钟),(来自模块 4.5.2 对 A 股大盘股的线性冲击校准范围),并扫描 。
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]}")
你会看到 时切片趋平(复现 TWAP 的 股 / 分钟), 上行时切片激进前置—— 时第一分钟可达 ~4,000 股,后续分钟显著缩小。弯曲度由「冲击半衰期与风险厌恶乘以方差时间窗」之比这一比率决定。本课在此勾画离散化思路,非常波动率 / 非线性冲击的求解器留给一道编程题。
考虑 A 股的午休断点(11:30–13:00):如果窗口跨越午休,把 11:30–13:00 视为零成交时段,时间表必须在 30 分钟连续段内闭合,否则把母单拆成上午 / 下午两段独立 IS 求解——后者在私募常用,叫「分段实施差额」。
机会型覆盖:订单簿告诉你何时偏离
纯 IS 算法机械跟随 。 流动性搜寻 或 机会型 覆盖读取限价订单簿(limit order book, LOB),当订单簿提供值得抓的机会时偏离时间表——但不放弃覆盖全程的纪律。
买入端的正典模式:每个 tick 检视卖侧明面队列。当一笔显著大于盘口典型量( 顶档常态规模)的卖单出现在算法保留价(reservation price)及以下时,算法可以把后续 分钟的预定持仓拉过来一次性吃掉。节省的成本是这 分钟的半价差加上聚合一次性 lift 节省的冲击;付出的成本是剩余时间表方差变大。一个经验法则:单次机会型动作向前拉过的剩余持仓不超过 30%,并要求明面卖单在一个完整的「观察–开火」延迟(latency)周期内可见,避免报价闪烁陷阱。
这层覆盖是真实 IS 算法与教科书时间表的差别。TCA 报告在 Alpha 单上的输赢多半取决于这条规则的纪律。
智能订单路由:跨场所派单
A 股上一笔子单不会只发给一个场所。智能订单路由(smart order router)把它在明面集合(SSE、SZSE 主板)与暗面集合(私募大宗交易窗口、券商内部撮合网络——CSRC 监管下与美式多边暗池形态不同)之间切分。路由器的损失函数权衡有效价差、信息泄露与逆向选择:
第一项是每笔成交净付出的买卖价差(含手续费)。第二项是信息泄露:每个明面子单泄漏方向,规模大的明面子单引来反向算法抢跑。第三项奖励成交概率——未成交子单是机会成本。路由器求出最小化加权损失的场所组合,并在每个场所最大显示量约束下运行。
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 的逆向选择阻力——中位是净赢,尾部当知情对手坐在另一边时可能是净亏。路由器中的 项就是依据近期毒性读数把暗面分配往上 / 往下推的杠杆。
区分两种风味
两个算法表面像:都偏离静态时间表、都读 LOB、都跨场所派单。区别:
- 流动性搜寻 / 机会型。 时间表 隐式反应;不优化全局轨迹。
- IS + 覆盖。 时间表 显式最优(Almgren–Chriss 闭式);覆盖叠加机会型偏离。
短半衰期 Alpha 单选 IS + 覆盖;「等流动性才成交」的大宗选纯流动性搜寻。
练习
Exercise
你为沪深300 ETF(510300.SH)500,000 股买单运行一个 IS 算法,窗口 20 分钟。线性短期冲击 ,分钟级波动率 。计算 、、 下第 0 分钟与第 19 分钟的切片量。然后说明对以下三种场景你各会取哪个 :(a) 低紧迫度现金流再平衡,(b) 半衰期 10 分钟的 Alpha 驱动建仓,(c) 因合规原因必须在窗口内清空的母单。
提示
提示
提示
与第 4 课的衔接
至此你已有算法家族。剩下的问题是:拿到母单,选哪个家族、参数定多少、盘后 TCA 如何让选择随时间锐化? 第 4 课用 2×2 决策网格、参数调优、TCA 分解、broker-algo 轮盘闭合。本课的 是第 4 课「更紧急」时拨动的旋钮。