Skip to content
Canli Capital

Measurements

Live covariance memory

Live covariance memory is one of 21 measurements this engine publishes in full. It is regenerated from a real run rather than transcribed, and it is shown here with its own claim boundary so the number and its limits arrive together.

The measurement

Schema
canli.alphac-live-covariance-memory.v1

Correction 2026 08 21. An earlier revision of this analysis sampled only 21 days and up, found every result in a 20-25 day band, and concluded the parameter was 'nearly inert' on crypto with cov_window_bars as the only lever. That was wrong and is withdrawn. The band is the window, not the parameter: below 30 days the halflife is honoured almost exactly (3d -> 3.0d, 7d -> 7.0d, 14d -> 14.0d). Reading the shape of a sampled range as a property of the mechanism is the error, and the ladder now spans both sides of the window so it cannot recur.

Ledoit wolf intensity mismatch

Site
src/alphaforge/portfolio/strategy.py, the ledoit_wolf_cc call
Status
OPEN — flagged, not fixed; no study has measured it

Description. ledoit_wolf_cc computes its shrinkage intensity delta* with T = the number of rows passed, and production passes the full unweighted 720-row window while the matrix being shrunk is the EWMA. That approximation is documented and was conservative while the EWMA's effective sample EXCEEDED 720. It stops being conservative at a short halflife.

Effective sample by request

Crypto H1

9 further fields. Read them in the artifact.

Equity D1

9 further fields. Read them in the artifact.

Production

Cov min periods
240
Cov window bars
720
Estimator
alphaforge.portfolio.covariance.ewma_cov
Legacy cov halflife bars
720

Sleeves

Crypto H1

Bars per day
24
By requested days
Effective sample rowsHalflife barsHalflife daysLambdaMean weight age daysMedian weight age daysSeed barsSeed block weightTruncation absorbed fractionUntruncated equivalent halflife daysWindow barsWindow days
207.7523957230.9904194.3138992.9583332400.0098430.0138892.95833372030
475.51002816870.9958839.3743446.9583332400.1380110.0059526.95833372030
682.984972336140.99793914.53096713.9583332400.3714990.00297613.95833372030
618.523036504210.99862617.20301820.2916672400.5167790.03373020.29166772030
514.437641720300.99903819.14459422.0416672400.6299610.26527822.04166772030
361.6845251512630.99954221.94400623.7500002400.8024810.62301623.75000072030
297.06124030241260.99977123.39726424.4166672400.8958130.80621724.41666772030
267.48514860482520.99988524.17137124.7083332400.9464740.90195124.70833372030
249.375089172807200.99996024.69250624.8750002400.9809300.96545124.87500072030

Legacy setting

13 further fields. Read them in the artifact.

Equity D1

Bars per day
1
By requested days
Effective sample rowsHalflife barsHalflife daysLambdaMean weight age daysMedian weight age daysSeed barsSeed block weightTruncation absorbed fractionUntruncated equivalent halflife daysWindow barsWindow days
8.694644330.7937013.84732232406.842e-4903720720
20.214231770.9057249.60711672402.280e-2107720720
40.40371314140.95169519.701856132404.775e-110.07142913720720
60.59869321210.96753229.799358202401.316e-70.04761920720720
86.56555330300.97716042.783947292401.526e-50.03333329720720
181.78255063630.98905890.538775622400.0050870.01587362720720
362.6104571261260.994514176.8738031262400.0713210126720720
635.1724452522520.997253298.0143092512400.2670600.003968251720720
514.4376417207200.999038459.4702565292400.6299610.265278529720720

Legacy setting

13 further fields. Read them in the artifact.

The headline. The WINDOW bounds the memory, so the halflife is faithful below it and truncated above it. On the crypto H1 sleeve the 720-bar window is 30 days: a 7-day request delivers 7.0 days and a 14-day request 14.0, while a 30-day request delivers 22.0 and a 720-day request 24.9. The legacy setting is 30 days requested against 22 days of memory. On the equity D1 sleeve the same 720-bar window is 720 SESSIONS, so the parameter is faithful across the whole practical range and only the legacy 720-day setting is truncated, to 529 days.

What this does not say. It does not say which halflife is right. It says what the estimator DOES with each one, which is the mapping a halflife decision needs and did not have. Choosing a value still requires a drawdown study run through this estimator rather than through an untruncated simulation of it.

Which lever to use for SHORT memory. Both routes reach short memory and they are not equivalent. Halflife 7 days at the production 720-bar window gives 7.0 days of memory on an effective sample of ~475 rows; shortening the window to 240 bars gives ~8 days of memory on ~107 rows. The HALFLIFE route preserves roughly four times the effective sample for comparable memory, which also keeps ledoit_wolf_cc's T=720 approximation far closer to valid. If the drawdown study's finding holds -- that shorter covariance memory reduces expected maximum drawdown -- the halflife is the instrument, and it has to be asked for BELOW the window rather than at 21 days where truncation has already started.

Why the parameter is not the memory. ewma_cov sees only cov_window_bars rows and seeds S_0 with the EQUALLY WEIGHTED sample covariance of the oldest cov_min_periods rows, decayed by lambda^k. The seed block is therefore a flat slab of old data the recursion cannot forget inside the window, and the shorter the requested halflife the smaller that slab -- but it never vanishes. The sweep that set overlay policy simulated an untruncated recursion, so its halflife ladder and this estimator's memory are different quantities.

Check it yourself

Every figure above is read from /glassbox/live_covariance_memory.json, the artifact the engine wrote. Nothing on this page is typed by hand: the page is generated from that file, so a figure that moves in the artifact moves here and a figure that is not in the artifact cannot appear here at all.

All 21 measurements · The glass box · The research library