1. Covariance is sign-blind
The realized covariance of two return series is the sum of the products of their contemporaneous returns, Σ xᵢ·yᵢ. It is the model-free workhorse of cross-asset risk — but it throws away something a risk manager desperately wants to keep. A day where both assets are up 2% and a day where both are down 2% produce an identical positive contribution (+0.0004 each). A textbook diversification model treats them as the same event. They are not: the second is the one that empties accounts.
The fix is to stop summing blindly and start sorting by sign.
2. Splitting covariance into three pieces
Take each pair of returns and route its product into one of three buckets according to the signs. Writing x⁺ = max(x,0) and x⁻ = min(x,0), the realized semicovariance (Bollerslev, Li, Patton & Quaedvlieg, 2020) is:
P = Σ x⁺·y⁺ (both up)
N = Σ x⁻·y⁻ (both down)
M = Σ (x⁺·y⁻ + x⁻·y⁺) (opposite signs)
These three components add back exactly to the realized covariance: P + N + M = Σ xᵢ·yᵢ. By construction the two concordant pieces are non-negative (P ≥ 0, N ≥ 0) and the mixed, discordant piece is non-positive (M ≤ 0) — opposite-sign co-movement is exactly what drags covariance down. Nothing is lost and nothing is added; the same number is simply resolved into how the two assets moved together.
3. The negative piece is the one that hurts
Of the three, N — the covariance built purely from days both assets fell — is the component a risk manager should watch. It is joint downside covariance: the raw material of crash correlation and downside beta. A pair with a large N is one whose losses arrive together, which is the only kind of correlation that matters when you are trying not to blow up. The positive piece P is the pleasant co-movement of a shared rally; comforting, but it is not what sizes your tail risk.
This is the cross-asset analogue of the single-asset story we told with realized semivariance: upside and downside are not symmetric risks, and the downside half is the one that predicts and prices what actually goes wrong. Semicovariance carries that asymmetry into the covariance matrix, where portfolio risk really lives.
4. Why diversification fails when you need it most
Every trader has watched a “diversified” book move as one during a sell-off. Correlations that looked modest in calm markets snap toward one exactly when the hedges are supposed to work — the well-documented phenomenon of correlation breakdown, or asymmetric dependence. A single covariance number can't see it coming, because the placid-market rallies and the panic-day crashes are averaged into the same figure.
Semicovariance makes the asymmetry measurable. When the N component of a pair is large relative to its total covariance, the two assets are bound together on the way down — a warning that their diversification benefit will evaporate in the next drawdown. It converts “correlations go to one in a crisis” from a war story into a number you can monitor and act on.
5. The components carry different information
The split is not just interpretive tidiness — the pieces genuinely behave differently. Bollerslev, Li, Patton & Quaedvlieg (2020) show that the three semicovariance components have distinct dynamics and distinct predictive content for future covariance: the concordant-negative part and the mixed part forecast very differently, and separating them improves covariance and beta forecasts over using the lumped-together realized covariance. In other words, the decomposition is not merely descriptive; it is a better set of inputs for whatever risk model or hedge ratio you feed the covariance matrix into.
6. A caveat inherited from covariance
Because semicovariance is built from the same contemporaneous returns as realized covariance, it inherits the same measurement pitfalls. Push the sampling to the tick and non-synchronous trading pulls the estimate toward zero — the Epps effect — and the sign classification of very small, noise-dominated returns becomes unreliable. Sample on a grid coarse enough that the two assets are actually trading together, exactly as you would for the covariance itself. And note that the sign split treats a large joint move and a tiny one alike within a bucket; pairing it with a jump filter separates a genuine co-crash from ordinary diffusive drift when that distinction matters.
7. Computing it
Our open-source orderflow-metrics library ships the decomposition, dependency-free, in TypeScript and Python:
import {
realizedSemicovariance,
realizedCovariance,
} from "orderflow-metrics";
// two aligned return series
const x = [0.01, -0.02, 0.015, -0.01, 0.02];
const y = [0.012, -0.018, -0.005, 0.008, 0.017];
realizedSemicovariance(x, y);
// { positive: 0.00046, — both up
// negative: 0.00036, — both down (joint downside / crash covariance)
// mixed: -0.000155 } — opposite signs
// the three components add back to the realized covariance
realizedCovariance(x, y); // 0.000665 ( = 0.00046 + 0.00036 − 0.000155 )
The Python distribution exposes the same function (realized_semicovariance). It sits beside the realized covariance / correlation / beta tools it decomposes and the single-asset realized semivariance it generalises, inside the wider market-microstructure toolkit we build in the open — install it from our open-source page (npm and PyPI, MIT-licensed).
8. Conclusion
A covariance matrix built from raw realized covariance quietly assumes that co-movement on the way up and co-movement on the way down are the same risk. They aren't. Realized semicovariance keeps the distinction: the concordant-negative component isolates the joint downside — the crash correlation that empties books and the downside beta that prices tail risk — while remaining a clean, additive decomposition of the number you already trust. Measure the half that hurts, not just the average, and your risk model stops being surprised by the drawdowns it should have seen coming. Explore the rest of the toolkit in our quantitative research library, or read the implementation in our open-source metrics.