第12节 EWMA估计日波动率
12.1 简介
EWMA模型
考虑一市场变量,如股票,我们有其从第0天至第
N
N
N天每天末的数据
S
0
,
S
1
,
.
.
.
,
S
N
S_0, S_1, ..., S_N
S0,S1,...,SN。定义
σ
n
\sigma_n
σn 为于第
n
−
1
n-1
n−1天末所估计的市场变量在第
n
n
n天的波动率,
σ
n
2
\sigma_n^2
σn2为方差率。定义连续复利收益率
u
n
=
ln
S
n
S
n
−
1
≈
S
n
−
S
n
−
1
S
n
u_n =\ln{\frac{S_n}{S_{n-1}}}\approx \frac{S_n-S_{n-1}}{S_n}
un=lnSn−1Sn≈SnSn−Sn−1。
则在指数加权移动平均模型 Exponentially Weighted Moving Average (EWMA) 模型下,
σ
n
2
\sigma_n^2
σn2的变化过程为:
σ
n
2
=
λ
σ
n
−
1
2
+
(
1
−
λ
)
u
n
−
1
2
,
0
<
λ
<
1
.
\sigma_n^2 = \lambda \sigma_{n-1}^2+(1-\lambda)u_{n-1}^2, \;\; \; 0 < \lambda < 1\;.
σn2=λσn−12+(1−λ)un−12,0<λ<1.
σ
n
2
\sigma_n^2
σn2也可以直接由
u
i
2
u_i^2
ui2表示为:
σ
n
2
=
(
1
−
λ
)
∑
i
=
1
m
λ
i
−
1
u
n
−
i
2
+
λ
m
σ
n
−
m
2
,
1
<
m
<
n
.
\sigma_n^2 = (1-\lambda)\sum_{i=1}^m\lambda^{i-1}u_{n-i}^2+\lambda^m\sigma_{n-m}^2, \;\;\;1<m<n\; .
σn2=(1−λ)i=1∑mλi−1un−i2+λmσn−m2,1<m<n.
相对于
σ
n
2
\sigma_n^2
σn2的简单估计
σ
n
2
=
1
m
∑
i
=
1
m
u
n
−
i
2
\sigma_n^2 = \frac{1}{m}\sum_{i=1}^mu_{n-i}^2
σn2=m1∑i=1mun−i2,EWMA模型下,
σ
n
2
\sigma_n^2
σn2中每个
u
i
2
u_i^2
ui2的权重随时间距离的增加而指数衰减。这里的
m
m
m都为一选定的截断距离。
所以给定
S
0
,
S
1
,
.
.
.
,
S
N
S_0, S_1, ..., S_N
S0,S1,...,SN,我们可以先由
u
n
=
S
n
−
S
n
−
1
S
n
u_n=\frac{S_n-S_{n-1}}{S_n}
un=SnSn−Sn−1计算出
u
1
,
u
2
,
.
.
.
,
u
N
u_1, u_2, ..., u_N
u1,u2,...,uN,然后设初始日方差率
σ
2
2
=
u
1
2
\sigma_2^2 = u_1^2
σ22=u12,由
σ
n
2
=
λ
σ
i
−
1
2
+
(
1
−
λ
)
u
i
−
1
2
\sigma_n^2 = \lambda \sigma_{i-1}^2 +(1-\lambda)u_{i-1}^2
σn2=λσi−12+(1−λ)ui−12,计算出
σ
2
2
,
σ
3
2
,
.
.
.
,
σ
N
+
1
2
\sigma_2^2, \sigma_3^2, ..., \sigma_{N+1}^2
σ22,σ32,...,σN+12。即为EWMA模型给出的每天方差率/波动率的估计结果。
最大似然估计确定最佳 λ \lambda λ
在EWMA模型中只有一个自由未确定的变量
λ
\lambda
λ,我们希望
λ
\lambda
λ的选取可以使得
{
σ
i
2
}
\{\sigma_i^2\}
{σi2}的估计在某种定义下最优。这里我们假设每天的连续复利收益率
u
i
u_i
ui的数据抽样取值在给定当天隐含方差率为
σ
i
∗
2
{\sigma_i^\ast}^2
σi∗2的情况下服从正态分布,对应概率密度函数
f
(
u
i
)
=
1
σ
i
∗
2
π
exp
−
u
i
2
2
σ
i
∗
2
=
P
(
u
i
∣
σ
i
∗
)
=
p
i
f(u_i)= \frac{1}{\sigma_i^\ast\sqrt{2\pi}}\exp{-\frac{u_i^2}{2{\sigma_i^\ast}^2}}=\mathbb P(u_i\vert \sigma_i^\ast) = p_i
f(ui)=σi∗2π1exp−2σi∗2ui2=P(ui∣σi∗)=pi。考虑我们选取一个具体的
λ
\lambda
λ数值,由已知市场变量数据
S
0
,
S
1
,
.
.
.
,
S
N
S_0, S_1, ..., S_N
S0,S1,...,SN,我们先用EWMA模型计算出
σ
2
(
λ
)
,
σ
3
(
λ
)
,
.
.
.
,
σ
N
+
1
(
λ
)
\sigma_2(\lambda), \sigma_3(\lambda), ..., \sigma_{N+1}(\lambda)
σ2(λ),σ3(λ),...,σN+1(λ),然后假如这些波动率即为对应日期隐含波动率
σ
i
∗
\sigma_i^\ast
σi∗,就可以计算出
p
2
,
p
3
,
.
.
.
,
p
N
p_2, p_3, ..., p_N
p2,p3,...,pN。
记:
P
(
λ
)
=
∏
i
=
2
N
p
i
(
λ
)
=
∏
i
=
2
N
P
(
u
i
∣
σ
i
(
λ
)
)
.
P(\lambda) = \prod_{i=2}^N p_i(\lambda) = \prod_{i=2}^N \mathbb P(u_i\vert \sigma_i(\lambda))\;.
P(λ)=i=2∏Npi(λ)=i=2∏NP(ui∣σi(λ)).
这里的
P
(
λ
)
P(\lambda)
P(λ)可以解释为,在每天的
u
i
u_i
ui服从独立正态分布的假设下,考虑EWMA模型时,当选取该
λ
\lambda
λ和初始条件
σ
2
=
u
1
\sigma_2 = u_1
σ2=u1后,市场变量的连续复利收益率的历史数据正好为
u
1
,
u
2
,
.
.
.
,
u
N
u_1, u_2, ..., u_N
u1,u2,...,uN的概率,也可以记为
P
(
u
1
,
.
.
.
,
u
N
∣
λ
)
\mathbb P(u_1, ..., u_N\vert \lambda)
P(u1,...,uN∣λ)。
最大似然估计法的想法是选取使得该
P
(
λ
)
P(\lambda)
P(λ)达到极大值的
λ
\lambda
λ作为模型的最优参数估计。即
λ
=
A
r
g
max
λ
P
(
λ
)
.
\lambda = Arg\max_\lambda{P(\lambda)}\; .
λ=ArgλmaxP(λ).
其中Arg max
是"return the arguments that maximize the function",即指计算出可以使后面方程值达到最大的参数。具体表示为
λ
=
A
r
g
max
λ
∏
i
=
2
N
1
σ
i
2
π
exp
−
u
i
2
2
σ
i
2
.
\lambda = Arg\max_\lambda {\prod_{i=2}^N\frac{1}{\sigma_i\sqrt{2\pi}}\exp{-\frac{u_i^2}{2\sigma_i^2}}}\;.
λ=Argλmaxi=2∏Nσi2π1exp−2σi2ui2.
等价于,
λ
=
A
r
g
min
λ
∑
i
=
2
N
[
ln
σ
i
2
+
u
i
2
σ
i
2
]
.
\lambda = Arg\min_\lambda {\sum_{i=2}^N\left[\ln{\sigma_i^2}+\frac{u_i^2}{\sigma_i^2}\right]}\;.
λ=Argλmini=2∑N[lnσi2+σi2ui2].
并记
L
(
λ
)
=
∑
i
=
2
N
[
ln
σ
i
2
+
u
i
2
σ
i
2
]
.
\mathcal L (\lambda) = {\sum_{i=2}^N\left[\ln{\sigma_i^2}+\frac{u_i^2}{\sigma_i^2}\right]}\;.
L(λ)=i=2∑N[lnσi2+σi2ui2].
由于这里希望确定的参数只有一个,我们可以通过穷举法简单地求出其最优值。
12.2 EWMA估计波动率算法
- 由已知数据 S 0 , S 1 , . . . , S N S_0, S_1, ..., S_N S0,S1,...,SN,按 u i = S i − S i − 1 S i − 1 u_i =\frac{S_i-S_{i-1}}{S_{i-1}} ui=Si−1Si−Si−1计算出 u 1 , u 2 , . . . , u N u_1, u_2, ..., u_N u1,u2,...,uN。
- 在 [ 0 , 1 ] [0, 1] [0,1]区间内均匀地取 M M M个点,作为 λ \lambda λ的尝试取值, λ i = i M \lambda_i = \frac{i}{M} λi=Mi。
- 计算出每个
λ
i
\lambda_i
λi对应的
L
(
λ
i
)
\mathcal L(\lambda_i)
L(λi):
- 设 σ 2 2 = u 1 2 \sigma_2^2=u_1^2 σ22=u12,由 λ i \lambda_i λi和 u 1 , u 2 , . . . , u N u_1, u_2, ..., u_N u1,u2,...,uN,按照EWMA模型 σ n 2 = λ i σ n − 1 2 + ( 1 − λ i ) u n − 1 2 \sigma_n^2 = \lambda_i \sigma_{n-1}^2+(1-\lambda_i)u_{n-1}^2 σn2=λiσn−12+(1−λi)un−12计算出 σ 2 , σ 3 , . . . , σ N \sigma_2, \sigma_3, ..., \sigma_N σ2,σ3,...,σN。
- 由 L ( λ i ) = ∑ j = 2 N ( ln σ j 2 + u j 2 σ j 2 ) \mathcal L(\lambda_i) = \sum_{j=2}^N(\ln{\sigma_j^2}+\frac{u_j^2}{\sigma_j^2}) L(λi)=∑j=2N(lnσj2+σj2uj2)计算出 L ( λ i ) \mathcal L(\lambda_i) L(λi)。
- λ \lambda λ的最优估计值即为最小的 L ( λ i ) \mathcal L(\lambda_i) L(λi)所对应的 λ i \lambda_i λi。
12.3 算法Python代码实现
import numpy as np
def EWMA(values, precision=1.e-3):
# 由给定精确度确定划分格点数。
M = int(1/precision)
values = np.array(values)
# 计算 {u_i}
U = (values[1:]-values[:-1])/values[:-1]
U_squared = U*U
opt_lbd = None
min_loss = float("inf")
# 穷举找最优lambda
for i in range(1, M):
lbd = float(i)/M
sigma_squared = U_squared[0]
loss = 0
for j in range(1, len(U_squared)):
loss += np.log(sigma_squared)+U_squared[j]/sigma_squared
sigma_squared = lbd * sigma_squared + (1-lbd)*U_squared[j]
if loss < min_loss:
min_loss = loss
opt_lbd = lbd
# 用最优lambda再计算出日方差率估计值。
Vars = [0, U_squared[0]]
for i in range(1, len(U_squared)):
Vars.append(Vars[-1]*opt_lbd+(1-opt_lbd)*U_squared[i])
return (Vars, opt_lbd)
12.4 计算示例
我们考虑John Hull网站上的示例数据(欧元/美元汇率),原数据地址为John Hull网站上的原始示例数据 。这里用的是简化后的,欧元/美元汇率(在github, 可下载)。
data = np.genfromtxt("EURUSDExchangerates.txt", skip_header=1, usecols=(1))
Vars, lbd = EWMA(data, precision=1.e-3)
print("EWMA最优lambda:", lbd)
EWMA最优lambda: 0.958
12.5 参考资料
- 《期权、期货及其他衍生产品》,John C. Hull 著,王勇、索吾林译。