尋找累積簡單收益波動率的良好(近似)函式形式
讓我們考慮一個時期 $ 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 。