ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

平方根定律:算法交易中大单执行成本控制的底层逻辑

平方根定律:算法交易中大单执行成本控制的底层逻辑 如果只看K线、消息面和资金流向交易看起来完全是心理学和博弈论的地盘。但真当你把订单规模、市场成交量、波动率放到同一张图上去算账会发现一条拖着根号的曲线比任何玄学都更稳定地描述着市场价格对交易的反应。我早年在做执行算法时反复被为什么大单越拆越亏、快打又滑点超标折磨直到认真啃完市场冲击的平方根定律square-root law才把成本从哪来、怎么控、什么时候该认怂这套逻辑理顺。这篇文章想把它讲透并拆出三个我认为真正影响实盘决策的洞见边际冲击递减、波动率的主导地位、以及参与率归一化思维。不管你偏高频、中线还是大宗交易这套框架都能帮你把执行方案的预期差算得更准。为避免读者被公式劝退先给一个直觉版本你在市场上下一笔规模为 Q 的订单市场日成交量是 V日波动率是 σ那么这笔订单造成的价格冲击大致正比于 σ 乘以 √(Q/V)而不是很多人直觉中的 Q/V。就这么一个不起眼的根号背后藏着一整套关于流动性、为什么拆单有效以及为什么波动率是交易成本的物理量的逻辑。1. 为什么线性成本模型会误导你的大单执行1.1 你下单时真正面对的是什么大多数初入机构交易或自营执行的读者最早接触的成本模型是线性的下单量越大单位滑点越多总成本按比例上升。假设日成交量 2000 万股、股票价格 100 元你想买 1% 的日成交量也就是 20 万股如果认为每买入 1% 日成交量就会推动价格变动 0.05%那么按线性估计买 4% 会产生 0.2% 的成本。听起来符合直觉两倍订单量两倍成本四倍订单量四倍成本。但真实盘口不是这样的。限价订单簿的每一档厚度有限吃掉第一档、第二档之后后面的档位往往会出现缺口和新加入的流动性。你在某一价位消耗的流动性越多做市商和活跃套利者越会意识到有人在囤货于是调整报价。这个过程不是匀速的而是越往深处走边际新增深度越少、价格跳跃越明显。所以成本随订单量线性增长只在极小的参与率范围里近似成立一旦 Q/V 超过 1% 或者 2%线性外推会把成本高估得离谱反过来如果你用线性模型去设计拆单节奏又会把等待风险低估得离谱。1.2 线性模型的深口袋幻觉我一度也认为只要把大单拆成足够多的小单市场就察觉不到总成本应该接近零。这个想法在流动性极好的蓝筹股上似乎成立但放到中小盘股票上就会出问题你拆得太细、周期拖得太长市场每天的统计规律会暴露你的存在更重要的是你持有未执行头寸的每一天都在承担价格波动的风险。这个风险敞口和冲击成本是一对跷跷板线性模型给不出最优解因为它没有风险项这个维度。真正的冲击模型至少分成两部分你交易行为本身造成的价格偏离临时冲击以及你执行完毕之后价格依然回不去的部分永久冲击。线性模型把两者混为一谈也把时间的维度抹掉了。平方根定律虽然是经验规律但它至少指出了正确的标度关系成本随订单规模的增速是递减的。这个凹性意味着把 4% 的订单集中在一天完成实际冲击并不是 1% 订单的四倍而可能只是两倍左右。这在执行策略设计上有非常具体的含义后面展开。1.3 平方根曲线的现实数据学术界对各国股票、期货、外汇市场的实证研究非常多Almgren、Thost、Lillo 等人在不同市场、不同资产上拟合出来的冲击函数指数普遍落在 0.5 到 0.7 之间平方根是最稳定、最常用的基准。你在 Bloomberg 或一些执行分析系统里看到的 ISImplementation Shortfall模型很多就是以此为核心。Barra 的市场冲击模型也直接使用了平方根形式。我自己的经验是在流动性中等偏好的股票上按参与率 1% 下单冲击成本大约等于 0.1 倍日波动率乘以某个系数参与率 4% 下单冲击成本约等于 0.2 倍日波动率而不是 0.4 倍。这个差异在真金白银的执行中意味着你完全不需要为了躲避冲击而把订单拖成老奶奶节奏过度拆单带来的延迟风险往往更贵。2. 平方根定律的数学骨架与它背后的扩散本质2.1 公式、变量与量纲速览先把这个公式写清楚[ C(Q) ;; k \cdot \sigma \cdot \sqrt{\frac{Q}{V}} ]其中C(Q) 是执行 Q 股订单带来的期望价格冲击通常用价格百分比或收益率表示σ 是资产在对应时间尺度上的波动率日波动率或时段波动率Q 是待执行订单数量V 是同期市场成交量等量纲日成交量或时段成交量k 是一个无单位的经验系数不同市场、不同品种差异不小通常在 0.3 到 1.0 之间。为什么它看起来这么物理因为 σ 的量纲是收益率/√时间而 √(Q/V) 是无量纲的参与率开方。日波动率本身就是价格扩散速度的度量所以这个公式本质上是在说你强行往市场里塞入的订单量会通过市场的扩散系数转化为价格位移位移大小不取决于订单和总成交量的比例本身而取决于这个比例的平方根。2.2 推导脉络随机游走与热扩散的类比要理解为什么是根号不用死记公式可以从随机游走切入。假设你连续 N 天每天执行固定金额的小单你的交易行为对价格的影响若每次近似独立且同分布那么累计价格影响的方差会随着 N 线性增长标准差随 √N 增长。当市场上有许多互不知晓的交易者同时进行相似规模的操作时订单流在价格上的印记就像布朗运动中的粒子位移大量独立碰撞叠加后净位移的标准差呈现 √N 尺度。还有一条路径是从执行时间推出的。一单 Q 股的订单日成交量 V以参与率 qQ/V 执行大约需要 T Q/(qV) 天如果把参与率理解为速度。如果你在 T 天内持续暴露在市场中仅仅是波动带来的价格不确定性就是 σ√T。把这个 T 用 Q/V 替代就能看到 σ√(Q/V) 这个组合自然出现。所以这个公式同时承载了你的订单需要多久才能被市场吸收以及这段时间里市场自身会漂移多远这两层含义。这也是为什么我说交易尽头有物理价格在订单流驱动下的响应跟热量在介质中的扩散、花粉在水中的布朗运动共享同一个数学骨架——解的标度行为都带着 1/2 次幂。金融市场不是物理系统但它的微观结构在统计意义上呈现出了惊人的自相似和标度律。2.3 常见误区把平方根定律当成深不可测的流动性源泉一个容易误读的地方是既然边际冲击递减那是不是意味着我可以无限加大订单也不会多花太多成本不是的。根号能压低成本增幅但订单本身还有一个永久冲击成分当你买入的信息被市场解读为聪明钱在吸筹均衡价格会永久上移一部分。永久冲击通常与参与率的更高次幂挂钩甚至有人认为它接近线性。换句话说临时冲击是凹的永久冲击更接近凸的细心的人会警惕不能拿临时冲击的凹性来为裸奔大单手辩护。另一个误区是直接用公式算出的百分比去加总。它是期望值不是保证值在极端行情里实际冲击可以是模型值的 2 到 3 倍。模型给的是基准情形而交易员要给的是缓冲。我通常会把平方根定律预测的冲击成本再乘上一个 1.5 到 2 的不确定性系数来决定是否值得执行。3. 洞见一边际冲击递减第一笔成交永远最贵3.1 凹函数带来什么直觉取两个参与率r₁1%r₂4%。按平方根定律冲击成本之比是 √4:√1 2:1。也就是说订单量放大四倍成本只翻一倍。换成线性模型则是 4:1。这个差别的实操含义藏在边际里对 √(Q/V) 求导你会发现边际成本 dC/dQ 与 1/√Q 成正比。翻译成人话你的第一笔头寸对市场的影响最大后续加仓的边际影响递减。为什么会有这种效果因为市场不是一面刚性墙而是一池可以慢慢吸收流动性的水。第一笔大单打进订单簿会刺激做市商和套利者提供新的流动性、调整库存随着时间推移一部分临时冲击会衰减、价格会部分回归。所以后续的每一笔增量都是在已经被激活的市场上交易边际摩擦更小。这个效应在真实盘面上并不容易直接看见但用 VWAP 和 IS 数据回测时非常明显同样在日内均价附近执行前 10% 成交量的滑点往往是后 50% 成交量的两倍以上。3.2 对执行算法的直接影响前轻后重还是均匀下手很多刚接触 TWAP/VWAP 的交易员以为最优执行就是机械地把订单按时间或按历史成交量曲线均匀分布。如果接受平方根定律的凹性结论会修正为在总执行时间一定的情况下把订单向流动性充裕且市场吸收能力强的时段集中比均匀分布更划算而在日内流动性不确定时开头轻、中间重、结尾收比一上来就重手买入更稳妥。我实际写执行算法时会对日内每个 15 分钟时段单独估计流动性权重 wᵢ再把订单量按 wᵢ 的某种次线性函数分配通常是 wᵢ^0.7 或 wᵢ^0.5 这个量级。逻辑就是流动性好的时段多下一点但不要完全跟着流动性走因为流量曲线峰值处的竞争者也最多、瞬时冲击也会被抬高。如果完全按 VWAP 机械复制反而会在交易量骤增的时段和大量同行撞车。3.3 用数字算一笔账四天拆单 vs 一天干完假设某股票日波动率 σ2%日成交量 V1000 万股你要买入 Q40 万股也就是 4% 日成交量。设 k0.5。一天内执行完冲击 ≈ 0.5 × 2% × √0.04 0.5×2%×0.2 0.2%。拆成四天、每天执行 10 万股也就是每天 1% 日成交量单日冲击 ≈ 0.5×2%×√0.01 0.1%四天合计约 0.4%。看到没有拆成四天临时冲击总成本反而翻倍了。那为什么还要拆单因为一天内硬吃 0.2% 的冲击可能需要你以极快的速度侵入盘口触发永久冲击和对手盘识别实际成本远高于模型而且 4% 的参与率在中小盘股上可能会击穿盘口深度。拆单的真正理由不是降低冲击而是控制永久冲击和信息泄露同时把临时冲击均匀化。这个思想非常重要执行不总是为了让成本最小化而是让成本可控化。4. 洞见二波动率才是交易成本的物理温度4.1 为什么 σ 站在公式中心很多人看平方根定律只盯着 Q/V觉得我少买点就没事。但如果你把公式拆开σ 其实是乘在根号前面的因子对成本的贡献是线性的。也就是说同样 2% 的参与率在日波动率 0.8% 的低波动日下单和在日波动率 3% 的高波动日下单冲击成本相差接近四倍。这个效应往往比多买一点、少买一点还要显著。从微观结构上理解波动率高意味着短期价格不确定性大做市商的库存风险变大因此他们对吸收大单要求的风险补偿就高同时高波动环境下订单簿的恢复速度变慢临时冲击的持续时间更长。用物理类比的话σ 就像介质的温度温度越高分子热运动越剧烈你把一滴墨水滴进去扩散得越快、初始的浓度梯度也消散得越快但在扩散过程中系统对扰动的响应幅度也更大。交易成本的高低衡量的其实是市场这个流体在某个时刻的活跃程度。4.2 实战中如何把 σ 用起来不要直接用年化波动率除以 √252 得到日波动率然后给全天用一个固定值。更实用的做法是用最近 5 个交易日的已实现波动率做基准再叠加开盘后 10 分钟、收盘前 30 分钟的时段调整因子。例如早盘第一个 15 分钟 bar 的已实现波动率经常是全天均值的 1.5 到 2 倍这意味着在这个时段下单的冲击成本也要相应放大。我在实际参数校准中会维护一张小时级别的 σ 曲线表。具体做法是取过去 20 个交易日每个 1 小时窗口的收益率序列计算标准差再除以全天标准差得到日内波动率倍数。下单时先把订单量按流动性分布分配再用这个 σ 倍数对每个时段的预期冲击做加权修正。如果一个时段的 σ 倍数是 1.6 而流动性倍数是 1.2我会把这一时段的目标参与率下调到流动性的 sqrt 比例而不是顶格执行。4.3 高波动期应该如何调整节奏在高波动期很多人本能地想把单拆得更碎、下得更慢因为担心买在半山腰。但平方根定律给了一个稍微反直觉的建议如果波动率来源是市场整体的、非方向性的比如财报、宏观事件那么高 σ 意味着你等待的隐形成本也很高——你晚一天执行价格可能因为市场自身的波动就先跑掉 2% 到 3%。此时最优执行往往是加速执行用一定的冲击成本换取更小的敞口风险。反过来如果波动率来源是标的自身的流动性枯竭比如停牌复牌、消息真空那么较慢的节奏更合理。这个权衡用 Almgren-Chriss 框架的语言说就是冲击成本和风险厌恶项的平衡。风险厌恶系数越高最优执行曲线越偏向尽快完成σ 越高等待的方差成本越大同样偏向尽快完成。所以不要一看到高波动就龟速拆单先把 σ 代进期望成本公式里算一遍再决定节奏。5. 洞见三参与率归一化跨品种横向比较不再失真5.1 用 Q/V 而不是金额来评估订单强度一个常见的经验误区管理规模 10 亿的基金在任何股票上卖出 500 万都觉得这单不大。但如果这只股票日成交只有 2000 万500 万卖出就是 25% 的日成交量冲击成本极高同样 500 万卖到一只日成交 20 亿的股票上参与率 0.25%几乎没有冲击。用金额评估订单强度是拿绝对数去对抗相对数必然失真。平方根定律强制你用参与率 q Q/V 来思考问题。这个归一化思维在组合调仓和指数跟踪里尤其重要。如果你要同时买入 30 只股票用公式逐个计算 √(Q_i/V_i)你会发现某些小盘股的 q 可能是 8%、10% 甚至更高它们贡献了整个组合 80% 以上的预期冲击成本。这时候有两种处理方式要么放弃这单要么把大 q 股票的订单大幅削减、把多余的额度转移到流动性更好的股票上。很多超额收益其实就是从这种成本预算约束下的替代配置里抠出来的。5.2 跨周期设计同一天 vs 同一周参与率归一化还有一个重要场景把执行周期变成统一的成本尺度。按日成交量 V_d 计算一笔 q5% 的订单如果放到一周内执行可以近似看作五个连续日、每个日参与率 1% 的小单序列。虽然前面算过四天拆单的临时冲击总和会大于一天干完但当你真正被流动性约束逼到必须拆时平方根定律告诉你拆成 N 天总成本大约放大 √N 倍。所以决定拆几天本质上是在一个不等式里做取舍日参与率过高超过 5%10%会造成不现实的瞬时冲击拆分过久则带来持仓风险、机会成本和信息暴露。一个朴素但好用的经验是设定你的目标日参与率上限 r_max比如 3%那么最少执行天数 T_min q / r_max。如果 q6%r_max3%T_min2 天如果 q15%r_max3%T_min5 天。这个估算虽然粗糙但能防止你凭感觉把 15% 的大单压到一天执行。5.3 时段流动性曲线的体积系数日内不同时段V 的变化很大。A 股和香港市场比较典型开盘后 30 分钟和收盘前 30 分钟成交占比远高于午盘美股则是开盘和收盘各有高峰午间清淡。如果用全天均匀的 V 来算参与率开盘那一个小时的实际 q 会被严重低估。我的处理方式是把全天切成 13 个 30 分钟窗口分别统计过去 20 日的窗口成交量占比 pᵢ然后每个窗口允许的订单量上限设为 q_max × V_total × pᵢ × 修正系数。修正系数考虑的是高峰时段竞争激烈冲击系数偏高一般取 0.8 到 0.9。按这个逻辑你会在开盘和收盘时段分配更多订单因为那里流动性厚但不会完全按比例分配会稍微向下修正避免和全市场的算法订单挤在一起。6. 实盘落地参数校准与模型不会告诉你的细节6.1 k 系数到底取多少怎么校准公式里的 k 是最让人头疼的参数它不是普适常数。不同市场、不同市值、甚至不同年份k 都在变。我的经验参考值是大盘蓝筹股 k≈0.30.5中小盘股 k≈0.60.9流动性极差的标的 k 可能超过 1。期货和外汇市场的 k 通常比股票低因为做市机制更成熟。校准方法没有捷径只有用历史交易数据回归。取过去 36 个月的逐笔或分钟级数据筛出订单规模显著、且能匹配到具体执行窗口的交易记录把已实现滑点 C 作为因变量对 σ√(Q/V) 做线性回归斜率就是 k。如果机构内部的交易记录不够也可以用 Barra 或第三方执行分析系统的历史样本做先验。注意回归时要去掉开盘跳空、停牌、涨跌停附近的极端样本这些样本对冲击函数形态的干扰极大。6.2 日内时段、方向性交易与冲击的不对称即便同一个 k在不同时段、不同方向上也必须做修正。早盘价格发现阶段信息不对称最严重k 往往较高尾盘做市商要平库存k 也偏高午间清淡时段看似 V 小但此时参与交易的对手方以耐心资金为主实际吸收冲击的能力反而尚可k 适中。方向性不对称也是实盘里大家心照不宣的现象买入冲击往往大于卖出冲击因为在大多数市场里散户天然是净买方卖出方更容易找到自然的流动性对手。这种不对称系数通常不明显但在调仓和减仓场景中值得留意。你可以通过比较同一标的相同规模买单和卖单的平均已实现滑点来估计该系数一般买/卖冲击比在 1.1 到 1.3 之间。6.3 我自己踩过的几个坑和最终建议第一个坑直接用日波动率代替执行时段波动率。有一次我按日 σ1.5% 算好了一个 2% 参与率的单子结果开盘后市场因为一条突发消息直接把 σ 拉到了 3%冲击成本比模型高出将近一倍。后来我把实时波动率监控和预设波动率上限写进了执行流程——一旦当前 15 分钟 bar 的已实现波动率超过预估值的 1.6 倍就自动降低参与率宁可多拆一天。第二个坑以为拆单能无限摊薄成本结果在低波动、低成交的品种上拆到天荒地老。最后成本确实低但仓位建完已经错过行情机会成本远超冲击成本。请一定记住平方根定律说的是冲击成本随 Q 次线性增长这并不等于拆单没有代价代价是时间、风险和信息暴露。第三个坑忽略隔夜跳空。如果你按参与率公式把一单拆成 5 天每天 1%那么这 5 天里任何一天的隔夜跳空都可能淹没你省下的那点冲击成本。用年化波动率推算一下 5 天累计 σ如果这个数值超过预期冲击成本的 3 倍说明拆单的整体风险收益已经不合理。最后一个建议也是我这几年的默认工作流任何交易前的可行性评估都先算出 qQ/V再算预期冲击 Ckσ√q最后把这个 C 折算成执行后的收益减项。如果 C 超过策略单笔期望收益的 20%这笔交易就得在缩小仓位、延长执行周期、放弃交易三个选项里重新决策。这套物理预算思维比任何盘感都更能拦住你犯大错。
返回列表