《Volatility Trading》 by Euan Sinclair

  • Chapter 4 预测波动率
    • 波动率是否可以被预测?
      • 无摩擦交易市场(交易费用为零)
      • 信息有效(完美信息流)
      • 理性人(对信息的价格影响力的共识)
    • 预测波动率
      • EWMA(Exponentially Weighted Moving Average)
      • GARCH(Generalized Auto-Regressive Conditional Heteroskedasticity)
      • MLE(Maximum Likelihood Estimation)
        • 似然函数(Likelihood Function)
        • 最大似然估计(Maximum Likelihood Estimation)
          • 例1:离散分布(以伯努利试验(Bernoulli trial)为例)
          • 例2:连续分布(以高斯分布(Gaussian Distribution)为例)
      • 波动率锥
      • 使用基本面信息来预测波动率
    • 方差溢价

Chapter 4 预测波动率

《波动率交易》一书阅读笔记,交叉参照英文原版及机械工业出版社翻译版。
Chapter4勘误:在解释EWMA模型的不足时,“为什么使用指数递减的方式会有道理?……”这两句。结合上下文,原文表达的含义是由于公司不会在一次业绩公告后再进行一个小的业绩公告,因此指数递减的方式是无理的。这段的翻译则将这个行为前加上了“因为”两字变成使用EWMA的解释,容易引起误解。

第二章的讨论主要着眼于如何对当前的波动率进行估计,但是在实际交易中,成功的交易取决于成功的预测。在期权存续期内对波动率的预测更加重要,但也更难。

波动率是否可以被预测?

首先要确定的一点是,波动率到底是不是可预测的。尤金法玛(Eugene F. Fama)给出的有效市场假说(EMH)中,有几个显而易见的严格假设,从这几个假设的实现效果着手可以挖掘预测波动率的可能性。

无摩擦交易市场(交易费用为零)

显然,在真实交易中,交易费用并非为零(这让我一直认为衍生品交易是负和交易而非零和交易)。波动率交易中的佣金、买卖价差、税收、交易所费用,清算费用都需要考虑在内。此外,通过期权来交易波动率需要进行动态对冲,这会产生很大的交易费用,同时包含可观的与风险监控有关的间接费用。

信息有效(完美信息流)

所有信息能快速且无成本地传递给所有市场参与者。在现在这个条件是最容易达成的,但是内幕交易仍然被证明是有利可图的,个股期权基于内幕消息的交易尤为多。

理性人(对信息的价格影响力的共识)

EMH认为在有效市场中,一旦消息达到市场,价格就会立刻对消息做出反应。但是实际上,期权价格并不会立即对公开信息进行反应。某些情况下,价格调整需要话费数周的时间。这意味着此时市场各方对该消息的影响存在某种分歧。

综合这些来看,有效市场假说的假设条件并不完全符合。但是这不意味着市场是无效的,只是市场存在着足以让交易员赚钱的低效率,但这已经足够了。

预测波动率

第三章说明了波动率的基本特征:

  • 波动率的大幅变化中,向上变化多于向下变化
  • 波动率在局部上均值复归

最简单的预测方法就是假设未来N天的波动率和过去N天的一致。那么过去N天的波动率就是未来N天波动率的预测值。目前来看,似乎业界最基础的算法都是这样的。这种方法也被称为移动窗口法(Moving Window Method)。但是这个方法存在的明显问题是:股票价格的大幅变动,比如良好业绩的公布带来的利好,会在波动率估计的序列中保留N天后突然消失。 很明显,当股价向上跳空,波动率的预测是有偏的。这个波动率的跳跃是由某个大事件引发的,而这个大事件在短期内如果不会再发生,那波动率的预测就是不准确的。注意,这并没有给当前的波动率的估计带来偏差,因为当前的波动率确实是非常高的。

EWMA(Exponentially Weighted Moving Average)

解决这个问题的标准方法是使用指数加权移动平均(EWMA)模型,这个模型的表达式为:
σt2=λσt−12+(1−λ)r2\sigma_t^2=\lambda\sigma_{t-1}^2+(1-\lambda)r^2 σt2​=λσt−12​+(1−λ)r2
EWMA对当前的平方收益率和前一期方差的加权平均来估计方差。常见的时间序列都是估计的方差。λ\lambdaλ越小,意味着越早期的波动率对当前波动率的影响越小,而越近期的波动率对当前波动率的影响越大。λ\lambdaλ通常取0.9-0.99,FRM考试里这个数被定为0.94。

EWMA简单易用,便于理解,但是不够灵敏。如果一个事件是异常事件,那在预测波动率时,应当直接将这个事件的影响剔除。指数加权确实可以在波动率预测中平滑价格跳空的影响,但是处理的方式过于简单粗暴。理论来说,应该让交易员对事件进行主观判断,如果是异常事件则直接剔除,如果是后续有可能发生的特殊事件,则对其赋予一定的权重后预测波动率。而在EWMA中,模型假设了事件的影响是指数递减的,这种方式是对这个问题的简单回避。书中举例为:如果公布业绩导致价格跳空,那公布业绩应该被认定为是异常事件,因此在预测未来波动率时,这个事件所带来的影响应当被直接剔除。但是,EWMA是将其做了指数递减。这显然是不够合理的。业绩公告只是一个一次性事件,公司不会在公布业绩随后再公布一个小点的业绩,再后再公布一个更小的业绩。所以面对这种问题,EWMA的处理是无理的。

EWMA的另一个问题是没有考虑到波动率估计量所处的市场环境。由于波动率是均值复归的,在高波动率后通常会有一个阶段的低波动率,vice versa。这里波动率的均值复归和波动率的聚类并不冲突,都是在局部体现的波动率的规律。EWMA没有把均值复归这一因素考虑进去。

GARCH(Generalized Auto-Regressive Conditional Heteroskedasticity)

广义自回归条件异方差(GARCH)模型可以解决这类问题。GARCH引入了长期均值水平,因此如果当前方差处于高位,尽管短期和EWMA一样会维持一定程度的高位,但是最终会回归到正常水平。GARCH(1,1)的表达式为:
σt2=γV+αrt−12+βσt−12\sigma_t^2=\gamma V+\alpha r_{t-1}^2+\beta\sigma_{t-1}^2 σt2​=γV+αrt−12​+βσt−12​
其中V为长期方差。显然α+β+γ=1\alpha+\beta+\gamma=1α+β+γ=1。当γ=0,α=1−λ,β=λ\gamma=0, \alpha=1-\lambda, \beta=\lambdaγ=0,α=1−λ,β=λ时,就得到了GARCH的特例EWMA。
GARCH模型的一般表达式为:
σt2=ω+αrt−12+βσt−12\sigma_t^2=\omega+\alpha r_{t-1}^2+\beta \sigma_{t-1}^2 σt2​=ω+αrt−12​+βσt−12​
长期方差等于:
V=ω1−α−βV=\frac{\omega}{1-\alpha-\beta} V=1−α−βω​
这段没有给出证明,个人理解为,由于存在均值复归,则σt2=σt−12\sigma_t^2=\sigma_{t-1}^2σt2​=σt−12​,同时,在长期来看,收益率的期望为0可以推出:
σt2=E[(rt−μ)2]=E(rt2−2rtμ+μ2)=E(rt2)−μ2=E(rt2)\sigma_t^2=\mathbb{E}[(r_t-\mu)^2]=\mathbb{E}(r_t^2-2r_t\mu+\mu^2)=\mathbb{E}(r_t^2)-\mu^2=\mathbb{E}(r_t^2) σt2​=E[(rt​−μ)2]=E(rt2​−2rt​μ+μ2)=E(rt2​)−μ2=E(rt2​)
对GARCH两边求期望可以推导出:
E(σt2)=E(ω)+E(αrt−12)+E(βσt−12)\mathbb{E}(\sigma_t^2)=\mathbb{E}(\omega)+\mathbb{E}(\alpha r_{t-1}^2)+\mathbb{E}(\beta \sigma_{t-1}^2) E(σt2​)=E(ω)+E(αrt−12​)+E(βσt−12​)
长期来看V=E(σt2)V=E(\sigma_t^2)V=E(σt2​),从而推导出:
V=ω+αV+βVV=\omega+\alpha V+\beta V V=ω+αV+βV
同样,可以对GARCH做进一步修正,加入过去ppp期的收益率和过去qqq期的方差带来的影响,从而得到GARCH(p,q)模型为:
σt2=ω+α1rt−12+⋯+αpr1−p2+β1σt−12+⋯+βqσ1−q2\sigma_t^2=\omega+\alpha_1r_{t-1}^2+\dots+\alpha_pr_{1-p}^2+\beta_1\sigma_{t-1}^2+\dots+\beta_q\sigma_{1-q}^2σt2​=ω+α1​rt−12​+⋯+αp​r1−p2​+β1​σt−12​+⋯+βq​σ1−q2​
在用GARCH估计波动率时一般使用迭代的方法计算。在未来某个时点:
σt+τ2=ω+αrt+τ−12+βσt+τ−12\sigma_{t+\tau}^2=\omega+\alpha r_{t+\tau-1}^2+\beta\sigma_{t+\tau-1}^2 σt+τ2​=ω+αrt+τ−12​+βσt+τ−12​
或者使用V可以写作:
σt+τ2=(1−α−β)V+αrt+τ−12+βσt+τ−12\sigma_{t+\tau}^2=(1-\alpha-\beta)V+\alpha r_{t+\tau-1}^2+\beta\sigma_{t+\tau-1}^2 σt+τ2​=(1−α−β)V+αrt+τ−12​+βσt+τ−12​
所以有:
σt+τ2−V=α(rt+τ−12−V)+β(σt+τ−12−V)\sigma_{t+\tau}^2-V=\alpha(r_{t+\tau-1}^2-V)+\beta(\sigma_{t+\tau-1}^2-V) σt+τ2​−V=α(rt+τ−12​−V)+β(σt+τ−12​−V)
上文已经推导过E(rt2)=σt2\mathbb{E}(r_t^2)=\sigma_t^2E(rt2​)=σt2​,因此两边取期望可以得到:
E(σt+τ2−V)=(α+β)E(σt+τ−12−V)\mathbb{E}(\sigma_{t+\tau}^2-V)=(\alpha+\beta)\mathbb{E}(\sigma_{t+\tau-1}^2-V) E(σt+τ2​−V)=(α+β)E(σt+τ−12​−V)
通过迭代可以得出:
E(σt+τ2−V)=(α+β)τE(σt2−V)\mathbb{E}(\sigma_{t+\tau}^2-V)=(\alpha+\beta)^{\tau}\mathbb{E}(\sigma_{t}^2-V) E(σt+τ2​−V)=(α+β)τE(σt2​−V)
即:
E(σt+τ2)=V+(α+β)τ(σt2−V)\mathbb{E}(\sigma_{t+\tau}^2)=V+(\alpha+\beta)^{\tau}(\sigma_{t}^2-V) E(σt+τ2​)=V+(α+β)τ(σt2​−V)
上式给出了波动率预测的期限结构。但是GARCH模型只能得到以指数形式收敛至长期均值的期限结构,也就是说整体来说是平滑的,无法得到市场上常见的有峰的波动率期限结构,因此GARCH模型也不能完全适用于期权市场。

MLE(Maximum Likelihood Estimation)

无论是使用EWMA还是GARCH模型对波动率进行预测,参数的选择都是非常重要的。一般来说,交易员会根据经验或者直觉选择自己使用的参数,这种方式是可行的。但同样,也可以使用极大似然估计来估计GARCH过程中的参数。
书中给出了关于MLE的直观解释,在这篇博文中,我将试图结合更多的资料,在兼顾严谨和直观的条件下对极大似然估计做一个更为系统且易于理解的证明和阐释。

参考资料:

Wikipedia: Likelihood Function https://en.wikipedia.org/wiki/Likelihood_function
Wikipedia: Maximum Likelihood Estimation https://en.wikipedia.org/wiki/Maximum_likelihood_estimation
知乎:如何理解似然函数? https://www.zhihu.com/question/54082000
Maximum Likelihood Estimation and Forecasting for GARCH, Markov Switching, and Locally Stationary Wavelet Processes by Yingfu Xie https://pdfs.semanticscholar.org/e3f5/90f5614a25b688c3d8bea67aad21c6840bc0.pdf
Properties and Estimation of GARCH(1,1) Model by Oetra Posedel https://www.stat-d.si/mz/mz2.1/posedel.pdf

似然函数(Likelihood Function)

首先要区分的是似然和概率的区别。概率是在给定一定参数的情况下,预测接下来观测所得的结果;似然则是在已有某些观测结果的条件下,对事件参数的估计。也就是说,当已知了一定的样本结果时,根据这些样本去推断最有可能(概率最大)导致这个样本结果的参数。在这个层面上,似然函数可以理解为条件概率的逆反。

用数学语言表达如下:
在已知参数θ\thetaθ时,事件XXX发生的概率为:P(X∣θ)\mathbb{P}(X|\theta)P(X∣θ)。假定若干次实验后,事件XXX已经有了一个样本xxx,而现在需要估计的是什么情况(参数)下,会让这个事件发生的概率最大。对应的似然函数即为L(θ∣X=x)\mathcal{L}(\theta|X=x)L(θ∣X=x)。
换句话说,对于一个事件XXX和这个事件分布的参数θ\thetaθ,如果将θ\thetaθ设为常量,则会得到概率函数(关于XXX的函数),如果将XXX设为常量,则会得到似然函数(关于θ\thetaθ的函数)。因此,似然函数可以写为:
L(θ∣X)=f(X∣θ)\mathbb{L}(\theta|X)=\mathcal{f}(X|\theta) L(θ∣X)=f(X∣θ)
这里的f(X∣θ)\mathcal{f}(X|\theta)f(X∣θ)就是事件XXX的概率函数。这样就将两个不同的函数(概率函数和似然函数)通过数值相同的方式联系在一起。

最大似然估计(Maximum Likelihood Estimation)

在理解似然函数之后,就可以通过最大似然估计对参数进行推断。由上文可以看出,要进行最大似然估计,显然要对事件的概率函数做出假设。一旦选定了事件的概率函数,且假设每次事件都是独立同分布(i.i.d)的,那么似然函数就可以通过构建一系列事件的联合概率函数得出。

即在样本空间XXX中,X={x1,x2,…,xn}X=\{x_1, x_2,\dots,x_n\}X={x1​,x2​,…,xn​}有对应的估计参数向量θ=(θ1,θ2,… )\theta=(\theta_1,\theta_2,\dots)θ=(θ1​,θ2​,…),似然函数L(θ)\mathcal{L}(\theta)L(θ)可用联合概率函数f(x1,…,xn∣θ)f(x_1,\dots,x_n|\theta)f(x1​,…,xn​∣θ)表示。求解θ\thetaθ的过程即为求解f(x1,…,xn∣θ)f(x_1,\dots,x_n|\theta)f(x1​,…,xn​∣θ)极值的过程。

很多资料(包括本书)都是直接给出了一个模型的似然函数而没有加以推导。在这里分别以在连续参数空间下的一个离散分布和一个连续分布为例,尝试推导其对应的似然函数,并得出对应的最大似然估计,从而能够直观地理解得出似然函数和最大似然估计参数的过程。

例1:离散分布(以伯努利试验(Bernoulli trial)为例)

如果进行nnn次独立伯努利试验,每次成功概率为ppp,那么整个试验的和(即联合概率质量函数)构成一个二项分布(Binomial Distribution)的概率质量函数,也即为似然函数:
L(θ)=B(k,n,p)=Cnkpk(1−p)n−k=n!k!(n−k)!pk(1−p)n−k\mathbb{L}(\theta)=\mathbb{B}(k, n, p)=C_n^kp^k(1-p)^{n-k}=\frac{n!}{k!(n-k)!}p^k(1-p)^{n-k} L(θ)=B(k,n,p)=Cnk​pk(1−p)n−k=k!(n−k)!n!​pk(1−p)n−k
给定试验次数nnn和成功次数kkk,在这里需要估计的参数θ\thetaθ即为概率ppp。因此最大似然估计即转换为求ppp取何值时,L(θ)\mathcal{L}(\theta)L(θ)取最大值。因此:
∂L(θ)∂p=n!k!(n−k)!(kpk−1(1−p)n−k−pk(n−k)(1−p)n−k−1)=0\frac{\partial\mathbb{L}(\theta)}{\partial p}=\frac{n!}{k!(n-k)!}(kp^{k-1}(1-p)^{n-k}-p^k(n-k)(1-p)^{n-k-1})=0 ∂p∂L(θ)​=k!(n−k)!n!​(kpk−1(1−p)n−k−pk(n−k)(1−p)n−k−1)=0
即:
kpk−1(1−p)n−k−pk(n−k)(1−p)n−k−1=pk−1(1−p)n−k−1(k(1−p)−p(n−k))=0kp^{k-1}(1-p)^{n-k}-p^k(n-k)(1-p)^{n-k-1} \\ =p^{k-1}(1-p)^{n-k-1}(k(1-p)-p(n-k))=0 kpk−1(1−p)n−k−pk(n−k)(1−p)n−k−1=pk−1(1−p)n−k−1(k(1−p)−p(n−k))=0
即:
k(1−p)−p(n−k)=0k(1-p)-p(n-k)=0 k(1−p)−p(n−k)=0
从而得出:
p^=kn\hat{p}=\frac{k}{n} p^​=nk​
这个概率参数p^\hat{p}p^​就是在给定试验次数和成功次数后的最大似然估计。

例2:连续分布(以高斯分布(Gaussian Distribution)为例)

正态分布的概率密度函数为:
f(x∣μ,σ2)=12πσe−(x−μ)22σ2f(x|\mu,\sigma^2)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x∣μ,σ2)=2π​σ1​e−2σ2(x−μ)2​
那么抽取nnn个服从正态分布的独立同分布的随机变量,其联合概率密度函数即为似然函数,表达式为:
L(θ)=f(x1,…,xn∣μ,σ2)=∏i=1nf(xi∣μ,σ2)\mathbb{L}(\theta)=f(x_1,\dots,x_n|\mu,\sigma^2)=\prod_{i=1}^{n}f(x_i|\mu,\sigma^2) L(θ)=f(x1​,…,xn​∣μ,σ2)=i=1∏n​f(xi​∣μ,σ2)
需要估计的参数向量θ=(μ,σ2)\theta=(\mu,\sigma^2)θ=(μ,σ2),因此只要让L(θ)\mathcal{L}(\theta)L(θ)在两个参数上取极值即可,即对两个参数分别求偏导。
首先得出似然函数的表达式:
L(θ)=(12πσ2)n2e−∑i=1n(xi−μ)22σ2\mathbb{L}(\theta)=(\frac{1}{2\pi\sigma^2})^{\frac{n}{2}}e^{-\frac{\sum_{i=1}^{n}(x_i-\mu)^2}{2\sigma^2}} L(θ)=(2πσ21​)2n​e−2σ2∑i=1n​(xi​−μ)2​
两边取对数得到对数似然函数:
ln⁡L(θ)=n2ln⁡12πσ2−∑i=1n(xi−μ)22σ2\ln\mathbb{L}(\theta)=\frac{n}{2}\ln\frac{1}{2\pi\sigma^2}-\frac{\sum_{i=1}^{n}(x_i-\mu)^2}{2\sigma^2} lnL(θ)=2n​ln2πσ21​−2σ2∑i=1n​(xi​−μ)2​
在这里分解∑i=1n(xi−μ)2\sum_{i=1}^{n}(x_i-\mu)^2∑i=1n​(xi​−μ)2:
∑i=1n(xi−μ)2=∑i=1n(xi−μ+xˉ−xˉ)2=∑i=1n[(xi−xˉ)+(xˉ−μ)]2=∑i=1n(xi−xˉ)2+∑i=1n(xˉ−μ)2+2∑i=1n(xi−xˉ)(xˉ−μ)\sum_{i=1}^{n}(x_i-\mu)^2=\sum_{i=1}^{n}(x_i-\mu+\bar{x}-\bar{x})^2\\ =\sum_{i=1}^{n}[(x_i-\bar{x})+(\bar{x}-\mu)]^2\\ =\sum_{i=1}^{n}(x_i-\bar{x})^2+\sum_{i=1}^{n}(\bar{x}-\mu)^2+2\sum_{i=1}^{n}(x_i-\bar{x})(\bar{x}-\mu) i=1∑n​(xi​−μ)2=i=1∑n​(xi​−μ+xˉ−xˉ)2=i=1∑n​[(xi​−xˉ)+(xˉ−μ)]2=i=1∑n​(xi​−xˉ)2+i=1∑n​(xˉ−μ)2+2i=1∑n​(xi​−xˉ)(xˉ−μ)
由于xˉ,μ\bar{x}, \muxˉ,μ均为常数,因此上式可以转换为:
∑i=1n(xi−μ)2=∑i=1n(xi−xˉ)2+n(xˉ−μ)2+2(xˉ−μ)∑i=1n(xi−xˉ)\sum_{i=1}^{n}(x_i-\mu)^2=\sum_{i=1}^{n}(x_i-\bar{x})^2+n(\bar{x}-\mu)^2+2(\bar{x}-\mu)\sum_{i=1}^{n}(x_i-\bar{x}) i=1∑n​(xi​−μ)2=i=1∑n​(xi​−xˉ)2+n(xˉ−μ)2+2(xˉ−μ)i=1∑n​(xi​−xˉ)
由于xˉ\bar{x}xˉ是样本均值,因此∑i=1n(xi−xˉ)=0\sum_{i=1}^{n}(x_i-\bar{x})=0∑i=1n​(xi​−xˉ)=0,所以消去上式最后一项得到:
∑i=1n(xi−μ)2=∑i=1n(xi−xˉ)2+n(xˉ−μ)2\sum_{i=1}^{n}(x_i-\mu)^2=\sum_{i=1}^{n}(x_i-\bar{x})^2+n(\bar{x}-\mu)^2 i=1∑n​(xi​−μ)2=i=1∑n​(xi​−xˉ)2+n(xˉ−μ)2
代回对数似然函数ln⁡L(θ)\ln\mathcal{L}(\theta)lnL(θ)得出:
ln⁡L(θ)=n2ln⁡12πσ2−12σ2(∑i=1n(xi−xˉ)2+n(xˉ−μ)2)\ln\mathbb{L}(\theta)=\frac{n}{2}\ln\frac{1}{2\pi\sigma^2}-\frac{1}{2\sigma^2}(\sum_{i=1}^{n}(x_i-\bar{x})^2+n(\bar{x}-\mu)^2) lnL(θ)=2n​ln2πσ21​−2σ21​(i=1∑n​(xi​−xˉ)2+n(xˉ−μ)2)
对μ\muμ求偏导可以得出:
∂∂μ=−2n(xˉ−μ)=0\frac{\partial}{\partial\mu}=-2n(\bar{x}-\mu)=0 ∂μ∂​=−2n(xˉ−μ)=0
因此
μ^=xˉ=1n∑i=1nxi\hat{\mu}=\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i μ^​=xˉ=n1​i=1∑n​xi​
对σ\sigmaσ求偏导可以得出:
∂∂σ=σ−3(∑i=1n(xi−xˉ)2+n(xˉ−μ)2)−nσ=0\frac{\partial}{\partial\sigma}=\sigma^{-3}(\sum_{i=1}^{n}(x_i-\bar{x})^2+n(\bar{x}-\mu)^2)-\frac{n}{\sigma}=0 ∂σ∂​=σ−3(i=1∑n​(xi​−xˉ)2+n(xˉ−μ)2)−σn​=0
因此:
σ^2=1n(∑i=1n(xi−xˉ)2+n(xˉ−μ)2)\hat{\sigma}^2=\frac{1}{n}(\sum_{i=1}^{n}(x_i-\bar{x})^2+n(\bar{x}-\mu)^2) σ^2=n1​(i=1∑n​(xi​−xˉ)2+n(xˉ−μ)2)
由于之前已经证明μ^=xˉ\hat{\mu}=\bar{x}μ^​=xˉ,所以:
σ^2=1n∑i=1n(xi−xˉ)2\hat{\sigma}^2=\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2 σ^2=n1​i=1∑n​(xi​−xˉ)2
从而得出参数θ\thetaθ的最大似然估计为θ^=(μ^,σ^2)\hat{\theta}=(\hat{\mu},\hat{\sigma}^2)θ^=(μ^​,σ^2)。

在两个例子理解后,可以用类似方法得出GARCH(1,1)模型下的似然函数,书中直接给出,此处不再证明。
似然函数:
L=∏i=1t(12ψi2e−ri22σi2)\mathbb{L}=\prod_{i=1}^{t}(\frac{1}{\sqrt{2\psi_i^2}}e^{\frac{-r_i^2}{2\sigma_i^2}}) L=i=1∏t​(2ψi2​​1​e2σi2​−ri2​​)
对数似然函数:
ln⁡L=∑i=1t(−ln⁡(σi2)−ri2σi2)\ln\mathbb{L}=\sum_{i=1}^{t}(-\ln(\sigma_i^2)-\frac{r_i^2}{\sigma_i^2}) lnL=i=1∑t​(−ln(σi2​)−σi2​ri2​​)
书中仅给出了公式的形式,并没有给出有效的运用方法。stats.stackexchange上提出了类似的实用性问题,有人给出了相关的解释和reference如下:

https://stats.stackexchange.com/questions/367722/fitting-a-garch1-1-model
https://rady.ucsd.edu/faculty/directory/valkanov/pub/classes/mfe/docs/lecture6_2010.pdf
https://quant.stackexchange.com/questions/9351/algorithm-to-fit-ar1-garch1-1-model-of-log-returns/28427#28427

另:似然函数和最大似然估计建立在频率学派之下,尽管都是用事件进行参数估计,但是频率学派认为参数并不是随机变量,因此参数不存在分布和概率,这和贝叶斯学派的理念有所出入。因此,用贝叶斯定理推导似然函数(如中文维基下的似然函数词条)的想法是有一定问题的。

尽管GARCH模型有诸多优点,但是很多原因会导致模型拟合的效果出现问题。主要原因有:

  • 数据不足。显然,时间序列数据分析非常依赖于数据量,数据量不足时很容易出现参数估计失真。但是这个问题其实并不严重,因为本身GARCH对数据的拟合性没有非常优秀。
  • 参数的初始值设置的不好。
  • 数据存在季节性。
  • 模型选择错误。这个应该是最为严重的问题。特别的,因为收益率存在的厚尾可能并不是来自GARCH,因此在GARCH中使用正态分布就不能体现这个问题。

尽管后续有很对对GARCH的改良,如EGARCH, GJR-GARCH, IGARCH, TGARCH, AGARCH, CGARCH等等,但是GARCH模型族内并没有相较于其他模型更优的模型。同时,如果用MLE对参数进行估计,不同时间进行的参数估计也并不稳定,因此模型的准确性也就大打折扣。

构建模型的初衷不是为了描述,而是为了预测。如果一个模型的预测效果并不好,那这个模型的实用性就存疑。同时,使用GARCH模型预测出的是波动率的点估计,点估计的实际意义也没有预测的分布或者区间有价值。

波动率锥

由于预测波动率本身并没有预测波动率的变化区间(即波动率的分布)重要,因此,为了实现预测波动率的变化区间,引入波动率锥的概念。

简单来说,波动率锥就是计算出不同的交易窗口下,波动率的分位数构成的图像。以平安银行股票为例,代码如下:、

import numpy as np
import pandas as pd
import tushare as ts
import matplotlib.pyplot as plt# 使用收盘价-收盘价计算波动率
df = ts.get_hist_data('000001')[['close']]
df['return'] = np.log(df['close']/df['close'].shift(-1))
df['vol_21'] = df['return'].rolling(21).std().shift(-20)*np.sqrt(252)
df['vol_42'] = df['return'].rolling(42).std().shift(-41)*np.sqrt(252)
df['vol_63'] = df['return'].rolling(63).std().shift(-62)*np.sqrt(252)
df['vol_126'] = df['return'].rolling(126).std().shift(-125)*np.sqrt(252)
df['vol_252'] = df['return'].rolling(252).std().shift(-251)*np.sqrt(252)
df.dropna(how='any', inplace=True)# 计算对应的分位数
quantile = df[['vol_21', 'vol_42', 'vol_63', 'vol_126','vol_252']].quantile([0.1, 0.25, 0.5, 0.75, 0.9])# 画出波动率锥
plt.title('Volatility Cones')
plt.xlabel('Time Horizon')
plt.ylabel('Volatility')
plt.plot(quantile.transpose())
plt.legend(quantile.index)
# plt.savefig('volatility cones.png')
plt.show()

结果如下,即所谓的波动率锥:

显然,由于大的波动会在更长的时间内被平滑,同时抽样误差会对短期波动率的度量产生更明显的影响。从图中也可以清楚看出,短期波动率比长期波动率的变化区间更大,相同分位点对应的波动率区间更宽。同时波动率存在均值复归现象,短期波动率向长期波动率收敛。

需要注意的是,由于价格序列是采用的移动窗口数据,所以会有使用很多重叠数据,这在波动率估计中,显然人为增加了数据相关性,从而对数据估计带来偏差。为了调整这个偏差,通过由重叠收益率序列估计出的波动率乘以调整系数,可以得到更加优质的估计结果。调整系数给出如下:
m=11−hn+h2−13n2m=\frac{1}{1-\frac{h}{n}+\frac{h^2-1}{3n^2}} m=1−nh​+3n2h2−1​1​
其中hhh是序列长度(比如21天,42天等),T是总的观测点(比如1000个观测数据),n=T−h+1n=T-h+1n=T−h+1就是可获得的不重复的子序列的个数。

在引入了调整因子之后,采用移动窗口数据对波动率进行估计就会更加准确,从而使波动率锥成为一个有效的交易工具。显然,根据波动率锥得到的估计区间来决定交易,会比用GARCH模型预测出的点估计值来决定交易更为合理。

波动率锥将当前的市场信息(已实现波动率,隐含波动率及价差)置于历史背景中观察,但是无法将市场信息放置于整齐的市场背景下进行观察。考虑波动率交易时既要考虑隐含波动率/已实现波动率的比例,也要考虑隐含波动率-已实现波动率的价差。

书中同时提出,波动率锥对于做市商或者活跃的交易员来说并不十分有用。原因是当波动率锥显示当前波动率处于高位时,可能交易员已经在这个期间随着波动率的上涨持续做空了,并且正处于亏损状态。因此及时隐含波动率处于高位,但是并不一定是做空的最好时机,对于做市商来说也是这样。

使用基本面信息来预测波动率

显然,预测股票不能只靠时间序列的方法,股票的基本面数据可能更加直观且对股价有同样重要的影响。由于基本面信息发生的频率要比价格信息缓慢,因此用基本面应当做更长期的预测。这种方法也更适合用来预测股票之间的相对波动率,而非预测单个股票的绝对波动率。可以理解为股票估值中的相对估值法和绝对估值法。

以下总结了市场会低估上市公司波动率的情形:

  • 高研发费用
  • 高现金流波动率
  • 业绩管理

而市场会高估上市公司波动率的情形:

  • 大公司
  • 资产收益率高
  • 高杠杆

这些基本面指标对于波动率的影响是相对直观的。有趣的是,高杠杆会导致市场高估未来波动率,因此尽管高杠杆带来高的潜在违约可能,但是仍然可以考虑倾向于做多高杠杆公司的波动率。

方差溢价

在对波动率进行预测的时候,进场会发现隐含波动率等于或显著大于预测波动率。BSM中隐含波动率的估计一般是上偏的。根据市场报价计算出的隐含波动率高于预测值30%并不罕见,但很少有预测波动率高于隐含波动率的情况。究其原因,有如下几点:

  • 卖出隐含波动率,本质是卖出一个保险,因此这部分的风险会产生溢价。
  • 历史数据无法反应未来可能的事件。如果有一个事件未来很可能发生,但是历史上从未发生,那么使用历史数据对波动率的预测就会缺失这个事件对波动率产生的影响。
  • 市场的微观结构助长了隐含波动率偏高这一现象。因为对于做市商来说,主要利润来自于买卖价差,因此在提供市场报价时会提高报价来保护业务。

书中给出了Bakshi和Madan (2006)开发的预测价差的模型。这篇论文相当的有趣,标题为《A Theory of Volatility Spreads》,可以在网上免费下载该论文。这篇论文将隐含波动率和预测波动率的价差与其高阶矩相关联,并引入了市场的整体风险厌恶系数。在这个模型中,假定了市场的风险厌恶的估计值是identical的,那么使用同样的风险厌恶系数可以得出相对的隐含波动率,从而和市场的隐含波动率进行对比。总而言之,这是一种类似于使用相对估值法进行错误定价捕捉的一种模型。模型的另一个假定是交易员是风险厌恶型,从而预测波动率价差为正,实体波动率的分布从而是负偏和厚尾的。
论文中给出的幂效用函数为:
U(W)∝exp⁡(−γW)U(W) \propto\exp(-\gamma W) U(W)∝exp(−γW)
从而推导出波动率价差和实体分布矩之间的关系:
σrn2−σ2σ2≈−γσ×skewness+γ22σ2×(kurtosis−3)\frac{\sigma_{rn}^2-\sigma^2}{\sigma^2}\approx-\gamma\sigma\times skewness+\frac{\gamma^2}{2}\sigma^2\times(kurtosis-3) σ2σrn2​−σ2​≈−γσ×skewness+2γ2​σ2×(kurtosis−3)
利用这个公式可以找出在给定的风险厌恶水平下,确定特定的价差是高于还是低于某个相对基准。
注意,书中这里写的容易引起误会,σrn\sigma_{rn}σrn​指risk-neutral volatility即风险中性波动率,但是实际上这个表示的是隐含波动率,隐含波动率可以和风险中性波动率等价吗?此处存疑。σ\sigmaσ指实体波动率,实际上就是预测的波动率的值,也就是已实现的历史波动率对未来的预测。在理解了这个概念后就可以继续看书中给出的例子。

作者基于历史数据分别预测了SPY和EEM收益率矩的估计值,即收益率的波动率,偏度和峰度。同时也知道了SPY和EEM的隐含波动率。根据SPY的隐含波动率,结合公式,可以算出SPY对应的市场的风险厌恶系数的估计值γ^\hat{\gamma}γ^​,如果认为这个γ^\hat{\gamma}γ^​能够反映市场总体的风险厌恶程度,且不同指数中的γ^\hat{\gamma}γ^​都是identical的,那么将这个γ^\hat{\gamma}γ^​代回公式,可以求出这个风险厌恶指标下EEM的隐含波动率。将这个隐含波动率和市场上实际观测到EEM的隐含波动率比较,可以发现不同市场下错误定价的相对程度还是比较接近的。Vice versa。

当期权的空头方变得更加风险厌恶的时候,价差会进一步扩大,因为需要更多的溢价来保护交易。在更高阶矩上,价差也同样应该是扩大的。
然而根据实证研究,这个模型计算出的方差溢价(波动率溢价/价差)反而在波动率指数(VIX)上涨时变窄,这与逻辑产生了冲突。导致这个问题的原因有很多方面,可能是由于真实市场的复杂性,导致任何时间内大量的效应之间互相影响,甚至产生冲突。当波动率水平很高时,对波动率预期的均值复归效应成为主导,从而驱动价差的变小,这点模型显然没有考虑在内。换句话说,波动率水平与实体波动率的更高阶矩相关(而非仅有二阶矩方差,三阶矩偏度和四阶矩峰度),而这个更高阶矩对价差的影响超过了风险厌恶程度的影响。

作者同样认可这个模型是很有趣的,但是由于和实证结果的不符,所以这个模型还有可以改良的空间。

如果我们认为隐含波动率总是存在着方差(波动率)溢价,那么卖出隐含波动率将总是可以带来收益,这个结论显然是错误的。但是承认价差的存在,可以让交易员在预测波动率的结果中做出相应的调整,从而判断一个期权的价格是否真的被高估或是低估。比如S&P500的已实现/隐含波动率价差可以通过S&P500的滚动波动率减去VIX指数得到。这个方法在中国波动率指数iVIX成熟后可以提供一些借鉴。

根据以上方法,加入市场状态调整后的波动率锥对于交易员来说就是一个有用的监测手段,结合波动率锥,根据市场的状态考虑特定的隐含波动率是否处于极端水平,从而在波动率达到高点时建仓。

[The Path to QUANT] 《Volatility Trading》by Euan Sinclair 读书笔记 Chapter 4相关推荐

  1. [The Path to QUANT] 《Volatility Trading》by Euan Sinclair 读书笔记 Chapter 3

    <Volatility Trading> by Euan Sinclair Chapter 3 收益率和波动率的典型事实 典型事实列表 波动率并非常数 收益率分布 成交量和波动率 波动率分 ...

  2. 取证导论 Volatility入门使用——ctf公开课笔记记录

    取证导论: 电子数据取证技术 是 对电子数据源里的电子数据证据进行发现.固定.提取.分析.检验.鉴定.出示.存档的全过程, 可以应用在 网络攻击窃密.反欺诈调查.内部审计.失泄密痕迹发现.恶意网站查处 ...

  3. 《Gans in Action》第一章 对抗神经网络介绍

    此为<Gans in Action>(对抗神经网络实战)第一章读书笔记 Chapter 1. Introduction to GANs 对抗神经网络介绍 This chapter cove ...

  4. 《Gans in Action》第三章 用GAN生成手写数字

    此为<Gans in Action>(对抗神经网络实战)第三章读书笔记 Chapter 3. Your first GAN: Generating handwritten digits 用 ...

  5. Python3-笔记-E-006-库-路径os.path

    import os path = os.getcwd() # 获取当前目录print("路径: {}".format(path)) # 路径: E:\python\练习\笔记 di ...

  6. linux 添加path变量,linux下添加PATH环境变量

    添加PATH环境变量,第1种方法: [root@lx_web_s1 ~]# export PATH=/usr/local/webserver/mysql/bin:$PATH 再次查看: [root@l ...

  7. python 量化交易 库_Quant-trading:Python量化交易策略库

    Quant-trading Intro We're right 50.75 percent of the time... but we're 100 percent right 50.75 perce ...

  8. FinancialQuantopian(不断更新中)

    Financial&Quantopian(不断更新中) 基本理论&术语 Alpha或者(额外收益Excess Return) 超过最好回报的收益.最好回报我们一般用股票指数作参考线. ...

  9. 学习笔记 - CFA 衍生品 3

    这小节聚焦currency,本质就是汇率问题,先简介一些基本概念: FX swap transaction是买spot卖forward或相反,与字面的互换不是很一样 they are used to ...

最新文章

  1. lftp压缩对方服务器文件,lftp 贴心好友 备份服务器bash脚本
  2. 会议容易中吗_运放电路设计中容易出现的细节问题,你都搞懂了吗?
  3. 使用docker安装Mongodb
  4. java重载中this的作用_Java2:构造方法、方法重载和this关键字
  5. Could not reload resource bundles java.lang.NoS...
  6. 实时统计分析技术浅谈
  7. lambda表达式python_python lambda表达式用法
  8. python cpk计算器_CPK公式
  9. 超越竞争对手的秘密武器-技术重用
  10. excel复习-数据透视表
  11. 初中英语语法(019)-连词
  12. Android NDK开发之旅17 NDK Apk增量更新
  13. android 使用ios字体大小,ios和android上的字体大小不同
  14. 三步破解IntelliJ IDEA2017
  15. (转)美国FBI的变态心理学测试
  16. Sequence II(HDU - 5919)
  17. 硬件知识:如何快速挑选一款好的固态硬盘?
  18. 离散数学-趣味题之一
  19. LCD 和 OLED 简要介绍
  20. js动态添加页面元素

热门文章

  1. java虚拟机出现问题解决,java虚拟机故障处理工具
  2. swagger无法正确显示属性描述缺失或者错误显示
  3. 已知坐标求方位角_【干货】RTK视频实操 | 求转换参数详解和七点注意事项!
  4. linux mint 桌面录屏工具SimpleScreenRecorder
  5. Unity之ASE 顶点偏移实现心电图
  6. sci-hub:一个神奇的免费下载文献的网站(使用技巧),免费论文下载方法
  7. JSP 水费管理系统计算机程序设计myeclipse编程mysql数据库
  8. 国家测绘地理信息局黑龙江基础地理信息中心----网站访问情况
  9. easyexcel和poi是否有版本冲突_记使用EasyPoi导出Excel遇到的问题
  10. 关于嘉立创拼板加工和三种拼板方法