五年前,我曾在知乎上发布过一篇关于trading cost和market impact的帖子,详细阐述了当时我对于execution上所谓implementation shortfall现象的研究。惭愧的是,现在的我并不比当年对于这一话题有更深的研究。只是我觉得我能够以更统一的视角来系统总结这一块的理论和方向,同时我对从这一话题延申出来的算法交易也有愈来愈深的兴趣,是以为记。

从动机上来说,在市场越来越有效,alpha signal越来越难找的今天。桌上的面包屑也成了完全不能忽视的收益来源。且不论以吃进bid-ask spread谋生的高频做市商,transaction cost或者是市场微结构的研究是他们的立身之本。哪怕对于传统的多因子量化策略来说,transaction cost在近年来也成了炙手可热的台面上的课题。

解构Transaction Cost (交易成本)

transaction cost是一个很笼统的概念,可以从固定/浮动,显性/隐性两个象限来详细定义transaction cost的各项组成部分

固定 浮动
显性 Commission Fee Bid-Ask Spreads, Taxes
隐性 Market Impact, Price Movement Risk, Opportunity Cost

流动性和整体的transaction cost息息相关,流动性越高的市场里大宗交易产生的transaction cost越低。流动性的一个直观体现就是bid ask spread,两者也同样是负相关。同样和bid ask spread负相关的是交易体量,交易体量越大就会往深处触及order book的挂单(这里我们假设order book由不同价位的limit order主导)。综合起来说,决定transaction cost的两大灵魂要素就是市场的流动性和交易体量。

有一句有名的祷词“用勇气改变可以改变的事情,用胸怀接受不能改变的事情,并用智慧分辨二者的不同”。固定的transaction cost不随交易量和市场形势变化,而显性的transaction cost也是事先规定的,所以他们属于“不能改变的事情”;我们的勇气要用在“可以改变的事情”上,即那些浮动的隐性的transaction cost-- Market Impact, Price Movement Risk和Opportunity Cost

简单来说,Market Impact是指交易执行后价格相比于未执行交易前价格的变化。而Market impact可以进一步被分为暂时性impact的和永久性impact。暂时性impact指交易执行过程中资产价格的暂时性变化(买单执行后资产价格短暂变高,卖单执行后资产价格短暂变低),而这样的暂时性impact可以被认为是做市商提供流动性所需要的补偿。永久性impact指交易完成后资产价格的永久性变化(买单执行后资产价格永久变高,反之永久变低),这可以被看作是市场对于交易中所含信息量的反应(买单意味着有投资者认为资产被低估,因而价格会适当上升,反之亦然)。Market impact对于买卖双向通常是不对称的,当然也有学者认为买卖双向的Market impact孰大孰小取决于当时的市场是上升还是下降。为了减小Market Impact,最常见也最有效的办法是slice and dice,将大单切分成小单分时分批处理,这样减少了对市场的“惊扰”但同时也增大了Price Movement Risk和Opportunity Cost

除了交易执行本身会影响资产价格,市场的一般性波动也会影响价格。这就属于Price Movement Risk的范畴,通常这也很难区分于我们刚提到的Market Impact(但并非不可能)。Opportunity Cost即是不交易的风险。当你有一个大单要执行,由于市场波动或其他原因,并非每一股都能被买入或卖出,等到事后资产价格开始上升或下降,那些未被执行的交易所带来的潜在损失就是你的Opportunity Cost。

计算Market Impact (市场冲击)

前文中的分类能让我们更好的解构transaction cost,并意识到我们的建模应该从隐性的transaction cost尤其是market impact出发。之所以一笔交易会产生market impact,是缘于市场bid-ask挂单的机制,交易者自身对于流动性的要求和市场内其他交易者对于同一资产的交易所共同产生的价格差异。简单来说,market impact就是价格差,是实际执行价格和理想执行价格的差异。理想的执行价格并不能直接观测到,那么我需要一个fair market benchmark来替代它。这个benchmark我们一般就使用该资产的当日开盘价或前日收盘价 当然如果想要更精细地定义benchmark,我们可以使用VWAP(volume weighted average price) ,那么market impact就可以直接表示为

MIb=Pex/Pb1MI_{b} = P^{ex}/P^{b}-1

这是一个很粗浅的完全忽略当日Price Movement的表达式,因此我们可以进一步改进为

MIb=Pex/PbPMex/PMpreMI_{b} = P^{ex}/P^{b}-P^{ex}_M/P^{pre}_M

这里的M表示市场指数价格 基于对market impact的定义,我们可以量化地分析交易过程对于投资收益的影响。因为我们在回测投资策略时往往使用上述fair market benchmark来计算纸面上的投资收益,对比起实际交易的收益,纸面收益往往更高,之间的差值就是market impact。而这种现象我们就称之为Implementation Shortfall

铺陈定义是为了ex post可以计算market impact,从而投资表现在策略和执行层面上划分开来,但光有定义还不够,为了达到在执行层面的优化,我们还需要能ex ante去预测market impact。作为quant,不论是以传统的计量经济学方法还是当下盛行的机器学习手段建立预测模型,我们首先需要识别能够左右market impact的影响因素。

我们可以大致将market impact的影响因素分为交易类和资产类,交易类的因素有:

  • 交易量 (绝对体量或相对体量)
  • 投资者风格 (长期还是短期,技术还是价值,战略投资还是财务投资等)
  • 交易时点 (开市还是尾盘,周一还是周五,月初还是月末,是否临近节假日等)
  • 交易类型 (买还是卖,market order还是limit order)
  • 市场流动性
  • 市场其他属性

资产类的因素有:

  • 价格动量 (价格处于上升区间时买入会有更大的market impact)
  • 价格波动率 (和market impact正相关)
  • 市值 (和market impact负相关)
  • 资产风格 (价值股还是成长股,类似于投资者风格)
  • 资产所处行业板块

一. 搜集好了影响因素,我们首要的建模选择自然是线性回归:

MIt=α+Σi=1Iβixi+ɛtMI_{t} = \alpha + \Sigma_{i=1}^{I}\beta_{i}x_i+ɛ_t

但其中的影响因素x不尽然都与market impact都呈线性关联,我们大可以对这些因素先做非线性变换。典型的例子是交易量,经验表明交易量的平方根和market impact成正比,于是我们可以将V1/2V^{1/2}带入左边的自变量,甚至我们可以假设VλV^{\lambda}正比于market impact,然后通过数字模拟求解λ\lambda。另一种常见的转换是将市值MCap变为ln(MCap)ln(MCap)带入表达式左侧。而上文中提到的交易时点,交易类型,市场属性以及行业板块都可以通过dummy variable的形式带入。

我们知道在使用线性回归模型时需要控制自变量的数目,一是降低多重共线性的影响,二是防止过拟合出现。所以真正对market impact影响较大的因素大概也就是交易量,价格动量,市值,市场流动性这几项。我们也可以通过regularization来让模型自身选取重要的自变量。

二. 拥有了影响因素,我们也可以使用机器学历的思路来建模。使用支持向量机(SVM)或随机森林等等监督性学习模型直接建模,或是使用聚类分析(cluster analysis)将不同market impact的资产先行归类都是业界在尝试的方法。

业界有许多知名厂商比如Barra和ITG提供商用的market impact model,他们的模型其实也不外乎是使用了这些因素构建的稍复杂的回归模型。但能让他们脱颖而出的是底层数据,他们会使用高质量的日内和tick-level的交易数据来计算这些影响因素,这保证了他们模型的精确和稳定。这大概也是quant界的一条普遍真理,all models are wrong but some are useful数据的质量决定了模型的质量

整合portfolio optimization(组合优化)

单纯计算和预测market impact并不是我们的最终目的,如果将减少transaction cost(以下我们混用了transaction cost和market impact,因为这是我们唯一的可控因素)作为超额收益的来源之一的话,那将transaction cost整合到portfolio optimization的目标函数中才能最大化我们的收益风险比,当我们采用最简单的mean-variance optimization架构时,目标函数会调整为:

maxwwμλwΣwλTCTCmax_w w'\mu - \lambda w'\Sigma w - \lambda_{TC}TC

但真正求解这一优化问题时我们发现事情并不是多了一个transaction cost的惩罚项那么简单,因为transaction cost里往往隐含了复杂的非线性部分,使得优化求解变得困难。当然非线性因素的加入对于quant来说属于家常便饭,最直接的解决办法是使用多项式去简化近似。比如我们只保留交易体量这单一因子来描述transaction cost,可以将transaction cost(单个security i)表示为:

TCi(x)=αi+βixi+γixi2TC_i(x) = \alpha _i + \beta _i|x_i| + \gamma _i|x_i|^2

从而mean-variance optimization的目标函数变为:

maxwwμλwΣwλTC(βx+xΓx)max_w w'\mu - \lambda w'\Sigma w - \lambda_{TC}(\beta ' |x|+|x|'\Gamma |x|)

至此目标函数就变成了一个经典的quadratic optimization问题了。

Barra在它的market impact model白皮书中写下了如下的投资策略分析框架

  1. 构建真实收益预期
  2. 控制投资组合风险
  3. 有效控制交易成本
  4. 实时监控整体表现

私以为这虽然是无用的套话,但确实奠定了transaction cost在投资管理中的地位。如开头所说,如果quant的工作是压路机前捡硬币,那桌上的面包屑这种风险收益比客观的alpha更加值得人们的青睐。