波動率

尋找累積簡單收益波動率的良好(近似)函式形式

  • January 14, 2019

讓我們考慮一個時期 $ t\in[0,T] $ ,並讓簡單的回報超過一年 $ t $ ( $ 1\le t\le T $ ) 是 $ r_t $ . 認為 $ r_t $ 是 iid 正常。整個時期的累積簡單回報 $ [0,T] $ 是 $$ R_T=\Pi_{t=1}^T(1+r_t)-1. $$ 問題

有沒有很好的函式形式 $ f(T) $ 可以大致捕捉到波動率 $ R_T $ ?

想法

假設iid,不難獲得明確的公式 $ \sigma^2(R_T) $ 如下 $$ \begin{align} \sigma^2(R_T) &=\Bbb E((\Pi_{t=1}^T(1+r_t))^2)-(\Bbb E(\Pi_{t=1}^T(1+r_t)))^2\ &=(1+\Bbb E(r_1^2)+2\Bbb E(r_1))^T-(1+\Bbb E(r_1)^2+2\Bbb E(r_1))^T\ \end{align} $$ 顯然,如果你知道平均值和變異數 $ r_t $ 那麼你就可以完全確定 $ \sigma(R_T) $ 給定任何 $ T $ . 但是,我想要的是一種或多或少“更簡單”的形式(也許是近似的),我們可以輕鬆地擬合曲線,比如 $ \sigma(R_T)\sim aT+b $ 或者 $ \sigma(R_T)\sim aT^\alpha + b $ 等等

到目前為止我只知道當 $ T $ 很小,我們應該期待 $ \sigma(R_T)\sim \sqrt{T}\sigma(r_1) $ ,但這種近似在以下情況下嚴重失敗 $ T $ 很大。

筆記:

確定任何給定收益序列的波動率在計算上很簡單,因此實際上可能不需要這種近似值。


讓我們從年化回報開始 $ r_a $ ,即 $$ r_a = \sqrt[T]{1+R_t}-1 $$

在哪裡 $ R_t $ 是整個時期的累積回報 $ [0,T] $ . 考慮泰勒近似 $$ log(1+y) = y - \frac{1}{2}y^2 + \frac{1}{3}y^3 - \frac{1}{4}y^4 +… $$

取前兩項,你得到: $$ log(1+r_a) \approx r_a - \frac{1}{2}\sigma_{r_a}^2 $$

然而,如果 $ r_a $ 不近似為零,誤差變大。下圖顯示了此錯誤 $ log(1+y) - y $ 區間內 $ y \in [-0.8,0.8] $ : 在此處輸入圖像描述

如果有任何年化回報 $ r_a $ 小於 -39% 或大於 52%,則近似誤差超過 10%!

此外,大多數金融資產收益具有負偏度和尖峰態,因此上述近似值偏向上。實際上,您可以對此進行調整併使用公式 $$ log(1+r_a) \approx r_a - k\frac{1}{2}\sigma_{r_a}^2 $$ ,在哪裡 $ k $ 是一個經驗因子(通常在 5 到 10 之間),請參見此處

重新排列為您提供了收益序列波動率的近似值: $$ \sigma_{r_a} \approx \sqrt{\frac{2r_a - 2log(1+r_a)}{k}} $$

編輯

OP正在詢問如何擬合曲線 $ \sigma(R_T) $ 按照 $ T $ . 讓我為您提供在 R 中執行的模擬結果。我使用正態分佈的 100,000 每日回報 $ N(0.01/252, 0.005) $ ,所以我假設每年的平均回報率為 1%,標準差為 7.94%( $ 0.005 \cdot \sqrt{252} $ ):

set.seed(100)
r = rnorm(100000, .01/252, .005)

## Vector containing the cumulative simple return up to T
cum <- vector(mode = "numeric", length = 100000)

## Vector containing the volatility up to T
vola <- vector(mode = "numeric", length = 100000)

for(i in 1:100000){cum[i] <- prod(1+r[1:i])}
for(i in 1:100000){vola[i] <- sd(cum[1:i])}

## vola[1] is NA due to vola[1] <- sd(cum[1:1]),
## so we set it to zero
vola[1] <- 0

summary(cum)
Min.    1st Qu.  Median   Mean    3rd Qu.  Max. 
0.8405  1.2581   2.1961   5.1116  5.0303   36.2721

summary(vola)
Min.    1st Qu.  Median   Mean    3rd Qu.  Max. 
0.0000  0.1775   0.4096   1.1516  1.1164   6.3274

下圖顯示了變數vola,即 $ \sigma (R_T) $ 為了 $ T \in [0; 100,000] $ : 在此處輸入圖像描述

我們看到,那 $ \sigma (R_T) $ 是非線性的並且隨時間增加。我實現了你建議的回歸$$ \sigma(R_T)\sim aT^\alpha + b $$使用時間 $ T $ 單步 $ \frac{1}{100,000} $ ,這導致:

## set up variable time
time <- seq(0, 1, 0.00001)

## eliminate first value of time which is zero,
## so we have single time steps of 1/100,000
time <- time[-1]

reg <- nls(vola ~ a*(time^alpha)+b, start = list(a=1, alpha=1, b=1))
summary(reg)

Parameters:
      Estimate  Std. Error t value  Pr(>|t|)
a      5.914458   0.003736  1582.9   <2e-16 ***  
b      0.208985   0.001096   190.7   <2e-16 ***
alpha  5.274693   0.006115   862.6   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.245 on 99997 degrees of freedom

Number of iterations to convergence: 7 
Achieved convergence tolerance: 1.396e-06

總之,您建議的非線性回歸模型似乎很有用。但是,我的起始值是隨機選擇的,因此您可以嘗試評估其他配置是否不會嚴重影響結果。您可能想嘗試使用 (Generalized) Linear Models實現此自動模型選擇的glmulti R-package 。

引用自:https://quant.stackexchange.com/questions/43429