Implied Volatility
PortfolioOptimisers.ImpliedVolatilityAlgorithm — Type
abstract type ImpliedVolatilityAlgorithm <: AbstractAlgorithmAbstract supertype for all implied volatility algorithms.
All concrete and/or abstract types implementing implied volatility estimation algorithms should be subtypes of ImpliedVolatilityAlgorithm.
Interfaces
In order to implement a new concrete type that works seamlessly with the library, subtype ImpliedVolatilityAlgorithm and implement the following method:
Required method name
predict_realised_vols(alg::ImpliedVolatilityAlgorithm, iv::MatNum, X::MatNum, ivpa::Any): Predict the realised volatility of the period that follows the sample, one value per asset.
Arguments
The implied volatilities are the second positional argument and the returns the third. The two are matrices of the same size, so a call that swaps them is well typed and silently wrong.
alg: The concrete subtype instance.iv: Implied volatility matrixobservations × assets, already divided by $\sqrt{\mathrm{af}}$ by the caller.X: Asset returns matrixobservations × assets.ivpa: Implied volatility premium adjustment factor. It isnothingwhen the caller supplies none, so an algorithm that needs one raises on that method.
Returns
rv_p::VecNum: Predicted realised volatility, one entry per asset, in the units ofX.
Examples
julia> struct MyImpliedVolatilityAlgorithm <: PortfolioOptimisers.ImpliedVolatilityAlgorithm endjulia> function PortfolioOptimisers.predict_realised_vols(::MyImpliedVolatilityAlgorithm, iv::PortfolioOptimisers.MatNum, ::Any, ::Any) return vec(iv[end, :]) endjulia> cov(ImpliedVolatility(; alg = MyImpliedVolatilityAlgorithm(), af = 1), [0.1 0.2; 0.3 0.1; 0.2 0.4]; iv = [0.5 0.6; 0.4 0.7; 0.3 0.8])2×2 Matrix{Float64}: 0.09 -0.0785584 -0.0785584 0.64Related
AbstractAlgorithmImpliedVolatilityRegressionImpliedVolatilityPremiumImpliedVolatilitypredict_realised_vols
References
- [39] T. G. Andersen, T. Bollerslev, P. F. Christoffersen and F. X. Diebold. Volatility and correlation forecasting. In: Handbook of Economic Forecasting, Vol. 1, edited by G. Elliott, C. W. Granger and A. Timmermann (North-Holland, 2006); Chapter 15, pp. 777–878.
PortfolioOptimisers.ImpliedVolatilityRegression — Type
struct ImpliedVolatilityRegression{__T_ve, __T_ws, __T_re} <: ImpliedVolatilityAlgorithmImplied volatility algorithm that predicts realised volatility via regression on implied volatility.
ImpliedVolatilityRegression fits a regression model relating implied and realised volatility over rolling windows, then uses the fitted model to predict the next period's realised volatility from the most recent implied volatility observation. The model, the steps that fit it and the number of windows it needs are stated by predict_realised_vols, which is the method this tag selects.
Fields
ve: Variance estimator.
ws: Window size for computing rolling realised volatility. It also sets the number of windows,div(size(X, 1), ws), and the regression needs more than two of them.
re: Regression model target.
Constructors
ImpliedVolatilityRegression(; ve::AbstractVarianceEstimator = SimpleVariance(), ws::Number = 20, re::AbstractRegressionTarget = LinearModel()) -> ImpliedVolatilityRegressionKeywords correspond to the struct's fields.
Validation
ws > 2.
Propagated parameters
When factory is called on this type, the following @fprop-tagged fields are automatically propagated:
ve: Recursively updated viafactory.
Examples
julia> ImpliedVolatilityRegression()ImpliedVolatilityRegression ve ┼ SimpleVariance │ me ┼ SimpleExpectedReturns │ │ w ┴ nothing │ w ┼ nothing │ corrected ┴ Bool: true ws ┼ Int64: 20 re ┼ LinearModel │ kwargs ┴ @NamedTuple{}: NamedTuple()Related
ImpliedVolatilityAlgorithmImpliedVolatilityPremiumImpliedVolatilitypredict_realised_vols: the model and the steps of the branch this tag selects.realised_volimplied_volfactory
References
- [40] B. J. Christensen and N. R. Prabhala. The relation between implied and realized volatility. Journal of Financial Economics 50, 125–150 (1998).
- [41] B. J. Christensen and C. S. Hansen. New evidence on the implied-realized volatility relation. The European Journal of Finance 8, 187–205 (2002).
- [39] T. G. Andersen, T. Bollerslev, P. F. Christoffersen and F. X. Diebold. Volatility and correlation forecasting. In: Handbook of Economic Forecasting, Vol. 1, edited by G. Elliott, C. W. Granger and A. Timmermann (North-Holland, 2006); Chapter 15, pp. 777–878.
PortfolioOptimisers.ImpliedVolatilityPremium — Type
struct ImpliedVolatilityPremium <: ImpliedVolatilityAlgorithmImplied volatility algorithm that divides the latest implied volatility by a volatility risk premium adjustment.
The adjustment factor is not a field of this type. The caller passes it as the ivpa keyword of the cov and cor methods of ImpliedVolatility, as a scalar or as one value per asset. The factor is mandatory: ivpa = nothing raises an ArgumentError. Every entry of it must be finite and strictly positive, and one that is not raises a DomainError, because a non-positive factor makes a negative volatility whose sign StatsBase.cor2cov! then hides. The closed form of the branch, and the rules it enforces, are stated by predict_realised_vols, which is the method this tag selects.
Constructors
ImpliedVolatilityPremium() -> ImpliedVolatilityPremiumExamples
julia> ImpliedVolatilityPremium()ImpliedVolatilityPremium()Related
ImpliedVolatilityAlgorithmImpliedVolatilityRegressionImpliedVolatilitypredict_realised_vols: the closed form of the branch this tag selects.
References
- [42] T. Egbers and L. Swinkels. Can implied volatility predict returns on the currency carry trade?. Journal of Banking & Finance 59, 14–26 (2015).
PortfolioOptimisers.ImpliedVolatility — Type
struct ImpliedVolatility{__T_ce, __T_mp, __T_alg, __T_af} <: AbstractCovarianceEstimatorCovariance estimator based on implied volatility scaling.
ImpliedVolatility computes a covariance matrix by combining a base correlation estimator with predicted realised volatilities derived from implied volatility data. It supports two algorithms: ImpliedVolatilityRegression, which fits a regression model to predict realised volatility from implied volatility, and ImpliedVolatilityPremium, which scales implied volatility by a user-supplied factor.
Fields
ce: Covariance estimator.
mp: Matrix processing estimator.
alg: Implied volatility algorithm for predicting realised volatility.
af: Annualisation factor for converting annualised implied volatility to the data frequency. Thecovandcormethods divide the implied volatilities bysqrt(af)before the algorithm reads them.
Constructors
ImpliedVolatility(; ce::StatsBase.CovarianceEstimator = Covariance(), mp::AbstractMatrixProcessingEstimator = MatrixProcessing(), alg::ImpliedVolatilityAlgorithm = ImpliedVolatilityRegression(), af::Number = 252) -> ImpliedVolatilityKeywords correspond to the struct's fields.
Validation
af > 0.
Propagated parameters
When factory is called on this type, the following @fprop-tagged fields are automatically propagated:
View parameters
When port_opt_view is called on this type, the following @vprop-tagged fields are automatically subset to the selected indices:
ce: Recursively viewed viaport_opt_view.
Examples
julia> ImpliedVolatility()ImpliedVolatility ce ┼ Covariance │ me ┼ SimpleExpectedReturns │ │ w ┴ nothing │ ce ┼ GeneralCovariance │ │ ce ┼ StatsBase.SimpleCovariance: StatsBase.SimpleCovariance(true) │ │ w ┴ nothing │ alg ┼ FullMoment() │ w ┴ nothing mp ┼ MatrixProcessing │ pdm ┼ Posdef │ │ alg ┼ UnionAll: NearestCorrelationMatrix.Newton │ │ kwargs ┴ @NamedTuple{}: NamedTuple() │ dn ┼ nothing │ dt ┼ nothing │ alg ┼ nothing │ order ┴ NTuple{4, Symbol}: (:pdm, :dn, :dt, :alg) alg ┼ ImpliedVolatilityRegression │ ve ┼ SimpleVariance │ │ me ┼ SimpleExpectedReturns │ │ │ w ┴ nothing │ │ w ┼ nothing │ │ corrected ┴ Bool: true │ ws ┼ Int64: 20 │ re ┼ LinearModel │ │ kwargs ┴ @NamedTuple{}: NamedTuple() af ┴ Int64: 252Related
AbstractCovarianceEstimatorImpliedVolatilityAlgorithmImpliedVolatilityRegressionImpliedVolatilityPremiumAbstractMatrixProcessingEstimatorfactoryport_opt_view
References
- [39] T. G. Andersen, T. Bollerslev, P. F. Christoffersen and F. X. Diebold. Volatility and correlation forecasting. In: Handbook of Economic Forecasting, Vol. 1, edited by G. Elliott, C. W. Granger and A. Timmermann (North-Holland, 2006); Chapter 15, pp. 777–878.
PortfolioOptimisers.predict_realised_vols — Method
predict_realised_vols(::ImpliedVolatilityPremium, iv::MatNum, ::Any, ivpa::Nothing)Error method: ImpliedVolatilityPremium requires an implied volatility premium adjustment factor.
The adjustment factor is not a field of ImpliedVolatilityPremium, so a caller that selects that algorithm and passes no ivpa reaches this method.
Arguments
The implied volatilities are the second positional argument and the returns the third.
::ImpliedVolatilityPremium: Implied volatility premium algorithm.iv: Implied volatility matrix (unused).::Any: Asset returns matrix (unused).ivpa::Nothing: Implied volatility premium adjustment (must not benothing).
Validation
ivpais notnothing. This method is the failing branch, and it raises anArgumentError.
Related
PortfolioOptimisers.predict_realised_vols — Method
predict_realised_vols(::ImpliedVolatilityPremium, iv::MatNum, ::Any,
ivpa::Num_VecNum)Predict realised volatilities by scaling the latest implied volatility row by the premium adjustment factor.
The row read is the last row of iv itself, not the last row of a window, so this method needs no window size and no returns.
Mathematical definition
\[\begin{align} \hat{\sigma}^{\mathrm{rv}}_i &= \frac{\sigma^{\mathrm{iv}}_{T,\,i}}{\mathrm{ivpa}_i}\,. \end{align}\]
Where:
- $\hat{\sigma}^{\mathrm{rv}}_i$: Predicted realised volatility of asset $i$ for the period that follows the sample.
- $\sigma^{\mathrm{iv}}_{T,\,i}$: Implied volatility of asset $i$ at the last observation.
- $\mathrm{ivpa}_i$: Implied volatility premium adjustment factor for asset $i$. A scalar applies to every asset.
- $T$: Number of observations.
Arguments
The implied volatilities are the second positional argument and the returns the third.
::ImpliedVolatilityPremium: Implied volatility premium algorithm.iv: Implied volatility matrix (observations × assets); the last row is used.::Any: Asset returns matrix (unused).ivpa: Implied volatility premium adjustment factor (scalar or vector).
Validation
- Every entry of
ivpais finite and strictly positive. A non-positive factor turns a volatility negative, andStatsBase.cor2cov!hides the sign: it squares the factor on the diagonal, so a negative scalar returns the matrix its absolute value returns, and a negative entry of a vector flips the sign of every covariance of that asset alone. Both answers stay positive definite, somatrix_processing!finds nothing to repair and no later step sees the defect. - A vector
ivpacarries one entry per asset. A wrong length raises aDimensionMismatchfrom the broadcast.
Returns
rv::AbstractArray: Predicted realised volatilities (last row ofivdivided byivpa).
Examples
julia> PortfolioOptimisers.predict_realised_vols(ImpliedVolatilityPremium(), [0.1 0.2; 0.3 0.1; 0.2 0.4; 0.1 0.1; 0.4 0.2; 0.2 0.3], nothing, 1.25)2-element Vector{Float64}: 0.16 0.24Related
References
- [42] T. Egbers and L. Swinkels. Can implied volatility predict returns on the currency carry trade?. Journal of Banking & Finance 59, 14–26 (2015).
PortfolioOptimisers.predict_realised_vols — Method
predict_realised_vols(alg::ImpliedVolatilityRegression, iv::MatNum, X::MatNum, ::Any)Predict realised volatilities using a regression model fitted on implied and realised volatility.
For each asset, this function fits a regression model relating the implied volatility and the realised volatility of one window to the realised volatility of the next window, then predicts from the last window. The windows are the blocks of realised_vol and the rows of implied_vol, so both series are read over the same rows of the sample.
Mathematical definition
Write $C$ for the number of windows, $\mathrm{div}(T, w_s)$. For asset $i$, fit the log-linear model over the windows $c = 1, \ldots, C-1$:
\[\begin{align} \ln \sigma^{\mathrm{rv}}_{c+1,\,i} &= \beta_0 + \beta_1 \ln \sigma^{\mathrm{iv}}_{c,\,i} + \beta_2 \ln \sigma^{\mathrm{rv}}_{c,\,i} + \varepsilon_c\,. \end{align}\]
Then predict from the last window:
\[\begin{align} \hat{\sigma}^{\mathrm{rv}}_i &= \exp\!\left(\hat{\beta}_0 + \hat{\beta}_1 \ln \sigma^{\mathrm{iv}}_{C,\,i} + \hat{\beta}_2 \ln \sigma^{\mathrm{rv}}_{C,\,i}\right)\,. \end{align}\]
Where:
- $\hat{\sigma}^{\mathrm{rv}}_i$: Predicted realised volatility of asset $i$ for the period that follows the sample.
- $\sigma^{\mathrm{rv}}_{c,\,i}$: Realised volatility of asset $i$ over window $c$.
- $\sigma^{\mathrm{iv}}_{c,\,i}$: Implied volatility of asset $i$ at the last row of window $c$.
- $\beta_0, \beta_1, \beta_2$: Regression coefficients.
- $\varepsilon_c$: Regression residual.
- $T$: Number of observations.
The fit takes $C - 1$ rows, so $C$ must exceed two for the model to have more rows than coefficients.
Algorithm
- Read
TandNfromsize(X), and setchunktodiv(T, alg.ws). - Check that
chunkexceeds two. - Call
realised_volwithalg.ve, givingrv, the realised volatility of every window. - Call
implied_voloniv, givingiv, the implied volatility at the last row of every window. The window count comes fromX, soivis read over the rows of the returns sample. - Check that
rvandivhave the same size. - Replace
rvandivby their natural logarithms. - Build
ovec, the intercept column of ones, of lengthT2 - 1. - For each asset
i, build the design matrixX_tfromovecand the firstT2 - 1rows ofivandrv, the responsey_tfrom rows2:T2ofrv, and the prediction rowX_pfrom rowT2. - Fit
alg.reonX_tandy_t, givingfri, then predict fromX_pand exponentiate, givingrv_p[i]. - Return
rv_p.
Arguments
The implied volatilities are the second positional argument and the returns the third. Both are matrices of the same size, so a call that swaps them is well typed and silently wrong.
alg: Implied volatility regression algorithm specifying the variance estimator, the window size and the regression target.iv: Implied volatility matrix (observations × assets).X: Asset returns matrix (observations × assets) used to compute realised volatility. It also fixes the window count, soivmust have as many rows asX.::Any: Ignored (placeholder forivpa).
Validation
chunk > 2(i.e., there must be more than 2 windows of data to fit the regression).size(rv) == size(iv), one realised volatility per implied volatility.
Returns
rv_p::Vector{<:Number}: Predicted next-period realised volatilities (one per asset).
Related
References
- [40] B. J. Christensen and N. R. Prabhala. The relation between implied and realized volatility. Journal of Financial Economics 50, 125–150 (1998).
- [41] B. J. Christensen and C. S. Hansen. New evidence on the implied-realized volatility relation. The European Journal of Finance 8, 187–205 (2002).
- [39] T. G. Andersen, T. Bollerslev, P. F. Christoffersen and F. X. Diebold. Volatility and correlation forecasting. In: Handbook of Economic Forecasting, Vol. 1, edited by G. Elliott, C. W. Granger and A. Timmermann (North-Holland, 2006); Chapter 15, pp. 777–878.
Statistics.cov — Method
Statistics.cov(ce::ImpliedVolatility, X::MatNum; dims::Int = 1, mean = nothing,
iv::MatNum, ivpa::Option{<:Num_VecNum} = nothing, kwargs...)Compute the covariance matrix using implied volatility scaling.
This method computes the correlation matrix of X using the base estimator in ce, then predicts realised volatilities from iv using the implied volatility algorithm in ce.alg. The predicted realised volatilities are used to convert the correlation matrix to a covariance matrix, which is then post-processed by the matrix processing estimator ce.mp.
Mathematical definition
\[\begin{align} \hat{\mathbf{\Sigma}} &= \mathrm{diag}(\hat{\boldsymbol{\sigma}}^{\mathrm{rv}}) \hat{\boldsymbol{\rho}} \,\mathrm{diag}(\hat{\boldsymbol{\sigma}}^{\mathrm{rv}})\,. \end{align}\]
Where:
- $\hat{\mathbf{\Sigma}}$: Estimated covariance matrix.
- $\hat{\boldsymbol{\rho}} = \operatorname{cor}(\mathbf{X})$: Correlation matrix from asset returns, computed by
ce.ce. - $\hat{\boldsymbol{\sigma}}^{\mathrm{rv}}$: Predicted realised volatilities, from $\mathbf{iv} / \sqrt{\mathrm{af}}$.
The diagonal of $\hat{\mathbf{\Sigma}}$ is therefore the square of the predicted realised volatility of each asset, and never a unit.
Algorithm
- Orient
Xandivtoobservations × assetswithdims_oriented, which validatesdimsand transposes both whendimsis2. - Check that
Xandivhave the same size, so rowtofivis the implied volatility of observationtofX. - Call
Statistics.cor(ce.ce, X; dims = 1, mean = mean, iv = iv, kwargs...), givingsigma, the base correlation matrix. The orientedivis forwarded so that a base estimator that reads its own implied volatility series, such as a nestedImpliedVolatility, receives it. Every other shipped estimator absorbs it into its ownkwargs...and ignores it. - Divide
ivbysqrt(ce.af), converting the annualised implied volatility to the frequency ofX. - Call
predict_realised_volswithce.alg, givingiv, one predicted realised volatility per asset. The implied volatilities are the second argument and the returns the third. - Scale
sigmain place withStatsBase.cor2cov!, which applies the closed form above. - Post-process
sigmain place withmatrix_processing!andce.mp.
Arguments
ce: Implied volatility covariance estimator.X: Data matrixobservations × assetsif thedimskeyword does not exist ordims = 1,assets × observationswhendims = 2.dims: Dimension along which to perform the computation.mean: Optional pre-computed mean (passed to the base estimator).iv: Implied volatility matrix, annualised, oriented asXand of the same size.ivpa: Optional implied volatility premium adjustment factor (required forImpliedVolatilityPremium).kwargs...: Additional keyword arguments passed to the base estimator.
Validation
dims in (1, 2), bydims_oriented.size(X) == size(iv), one implied volatility per return.- Whatever
ce.algrefuses, bypredict_realised_vols.ImpliedVolatilityPremiumneeds anivpathat is notnothing, and whose every entry is finite and strictly positive.
Returns
sigma::MatNum: Covariance matrixassets x assets.
Related
Statistics.cor — Method
Statistics.cor(ce::ImpliedVolatility, X::MatNum; dims::Int = 1, mean = nothing,
iv::MatNum, ivpa::Option{<:Num_VecNum} = nothing, kwargs...)Compute the correlation matrix using implied volatility scaling.
This method computes the correlation matrix of X using the base estimator in ce, normalises it, then post-processes it with the matrix processing estimator ce.mp.
A correlation is scale free, so the predicted realised volatilities cannot move the answer, and the returned matrix is the base correlation of X. The volatility model runs even so, because cor must refuse every configuration cov refuses: a ce.alg that cannot answer the call raises here as it does in cov. Its prediction is discarded, and never multiplied into rho and divided back out again.
That round trip was the identity in exact arithmetic alone. In floating point the round-off of one multiplication and one division moved an off-diagonal entry, and a predicted volatility of zero made the second call divide zero by zero. One asset whose last implied volatility was zero therefore turned a whole row and column of the correlation into NaN, and matrix_processing! raised on a matrix that carried no defect of its own.
Algorithm
- Orient
Xandivtoobservations × assetswithdims_oriented, which validatesdimsand transposes both whendimsis2. - Check that
Xandivhave the same size, so rowtofivis the implied volatility of observationtofX. - Call
Statistics.cor(ce.ce, X; dims = 1, mean = mean, iv = iv, kwargs...), givingrho, the base correlation matrix. The orientedivis forwarded so that a base estimator that reads its own implied volatility series, such as a nestedImpliedVolatility, receives it. - Call
predict_realised_volswithce.algandiv / sqrt(ce.af), and discard the result. The call runs for its raises alone, andivis divided bysqrt(ce.af)for it exactly as it is incov. - Normalise
rhoin place withStatsBase.cov2cor!, which divides the entry in rowiand columnjby the square roots of the diagonal entriesiandj. The call also mirrors the lower triangle into the upper one, clamps every off-diagonal entry into[-1, 1], and sets the diagonal to exactly one. The exact diagonal is what step 6 needs:matrix_processing!reads the value of the diagonal to decide whether it holds a correlation matrix or a covariance matrix. - Post-process
rhoin place withmatrix_processing!andce.mp.
Arguments
ce: Implied volatility covariance estimator.X: Data matrixobservations × assetsif thedimskeyword does not exist ordims = 1,assets × observationswhendims = 2.dims: Dimension along which to perform the computation.mean: Optional pre-computed mean (passed to the base estimator).iv: Implied volatility matrix, annualised, oriented asXand of the same size.ivpa: Optional implied volatility premium adjustment factor (required forImpliedVolatilityPremium).kwargs...: Additional keyword arguments passed to the base estimator.
Validation
dims in (1, 2), bydims_oriented.size(X) == size(iv), one implied volatility per return.- Whatever
ce.algrefuses, bypredict_realised_vols.ImpliedVolatilityPremiumneeds anivpathat is notnothing, and whose every entry is finite and strictly positive.
Returns
rho::MatNum: Correlation matrixassets x assets.
Related
Statistics.cov — Method
Statistics.cov(ce::ImpliedVolatility, X::MatNum, pnl::Option{<:AssetPanel};
dims::Int = 1, mean = nothing, iv::MatNum,
ivpa::Option{<:Num_VecNum} = nothing, kwargs...) -> MatNum
Statistics.cor(ce::ImpliedVolatility, X::MatNum, pnl::Option{<:AssetPanel};
dims::Int = 1, mean = nothing, iv::MatNum,
ivpa::Option{<:Num_VecNum} = nothing, kwargs...) -> MatNumFit an implied volatility estimate on the Coverage Universe, and expand it to the full asset universe.
ImpliedVolatility overrides the reduce-and-expand root of its verb because it reads two more per-asset inputs than the root knows about: the implied volatility surface iv, which is observations × assets, and the premium ivpa, which is one number per asset where it is a vector. Both take the slice X takes, so that the three inputs describe the same universe.
The surface also narrows that universe. An implied volatility is padded NaN where it is silent, exactly as a return is, so the Coverage Universe of this fit is the one coverage_mask derives: an asset whose returns are complete but whose implied volatilities are not is excluded from the fit, and expand_moment writes its NaN row and column.
Algorithm
- Check
dims, and orientXandivtoobservations × assets. - Derive the Coverage Universe of
Xandivwithcoverage_mask. - Slice
X,ivandivpaonto it. - Call the two-argument method on the clean block.
- Expand the matrix with
expand_moment.
Arguments
ce: Covariance estimator.X: Data matrixobservations × assetsif thedimskeyword does not exist ordims = 1,assets × observationswhendims = 2.pnl: OptionalAssetPanel, whose active mask the Coverage Universe of the fit is derived from.nothingmakes the rule finiteness alone.dims: Dimension along which to perform the computation.mean: Optional mean value to use for centering.iv: Implied volatility surfaceobservations × assets.ivpa: Implied volatility premium adjustment.kwargs...: Additional keyword arguments passed to the two-argument method.
Validation
dims in (1, 2).size(X) == size(iv).- At least one asset must be covered.
Returns
sigma::MatNum: The covariance matrix, or the correlation matrix, on the full asset universe.
Related
References
- [39]
- T. G. Andersen, T. Bollerslev, P. F. Christoffersen and F. X. Diebold. Volatility and correlation forecasting. In: Handbook of Economic Forecasting, Vol. 1, edited by G. Elliott, C. W. Granger and A. Timmermann (North-Holland, Amsterdam, 2006); Chapter 15, pp. 777–878.
- [40]
- B. J. Christensen and N. R. Prabhala. The relation between implied and realized volatility. Journal of Financial Economics 50, 125–150 (1998).
- [41]
- B. J. Christensen and C. S. Hansen. New evidence on the implied-realized volatility relation. The European Journal of Finance 8, 187–205 (2002).
- [42]
- T. Egbers and L. Swinkels. Can implied volatility predict returns on the currency carry trade? Journal of Banking & Finance 59, 14–26 (2015).