Docs / nablatensor-quant / com.nablatensor.quant.estimate

final class

Ewma

The exponentially weighted moving-average volatility estimator:

sigma2_t = lambda sigma2_{t-1} + (1 - lambda) r_{t-1}^2

It is the omega = 0, alpha + beta = 1 corner of Garch11 — no mean reversion, so the forecast variance is flat. The RiskMetrics convention fixes lambda = 0.94 for daily data; estimateByMaximumLikelihood instead fits it, driven by the same adjoint-gradient optimiser as every other calibration in the library.

Methods

static double[] conditionalVariance(double[] returns, double lambda)

The conditional-variance path for a given decay, seeded with the sample variance of returns. variance[t] is the estimate that stands before observing returns[t].

static double negLogLikelihood(double[] returns, double lambda)

Gaussian negative log-likelihood (up to a constant) of returns under EWMA.

static double estimateByMaximumLikelihood(double[] returns)

Maximum-likelihood decay lambda in [0.5, 0.9999]. One scalar parameter, but the objective is still recorded and the search still uses the exact adjoint derivative — this is the smallest illustration of "the adjoint gradient is the score vector".