Univariate Volatilty¶

Kevin Sheppard¶

Today¶

  • Realized Variance
  • Bid-Ask Bounce
  • Volatility Signature Plots
  • Alternative Estimators
  • Modeling and Forecasting $RV$
  • Implied Variance

Realized Variance¶

  • Use UHF data to precisely estimate variance over a given period
    • Typically 1 day
    • Avoids diurnal effects
$$ RV_{t}^{(m)}=\sum_{i=1}^{m}\left(p_{i,t}-p_{i-1,t}\right)^{2}=\sum_{i=1}^{m}r_{i,t}^{2} $$
  • Like variance estimator except no need to demean
  • Assumption is that $m\rightarrow\infty$
  • Estimated integrated variance
$$ \lim_{m\rightarrow\infty} RV_{t}^{(m)} = \int_{t}^{t+1}\sigma_{s}^{2}ds $$

Simulated Brownian Motion¶

  • Assume $\mu$ and $\sigma$ are annualized $$r_{i,t} \stackrel{iid}{\sim} N\left(\frac{\mu}{252 m},\frac{\sigma^2}{252 m}\right) $$
$$ p_{i,t} = p_{i-1,t} + r_{i,t} $$
  • $p_{0,t} = \ln(100)$

The price path¶

In [3]:
plot(p)

Implementing $RV$¶

In [4]:
rv = {}

for i in (13,39,78,390,1560,23400):
    step = m // i
    rets = p.iloc[::step].diff().dropna()
    _rv = (rets**2).sum()
    rv[step] = _rv
np.sqrt(252 * pd.Series(rv))
Out[4]:
1800    0.210890
600     0.242003
300     0.209546
60      0.180562
15      0.197455
1       0.200257
dtype: float64

$RV$ estimation error¶

In [6]:
plot_rv()

Bid-Ask Bounce¶

  • Primary challenge of $RV$ implementation
  • Not one price, but two
    • Bid
    • Ask or Offer
  • Transactions tend to bound between these two prices
  • Creates many high-frequency noise returns
  • Observed return is $$ r_{i,t} = r^\star_{i,t} + \epsilon_{i,t} $$
  • $r^\star_{i,t}$ is the return we would like see
  • $\epsilon_{i,t}$ follows an MA(1) $$RV_{t}^{(m)}\approx\widehat{RV}_{t}+m\tau^{2}$$

Realistic UHF Asset Price¶

In [8]:
plot_trans()

Transaction, Bid, and Ask Prices¶

In [9]:
plot_trans(zoom=True)