Raw-intercept alphas absorbed the T-bill yield on uninvested/levered portions (582 well-fitted funds >2%/yr off; sum-of-betas polluted by level-matching). Now fund AND sleeves are netted against BIL daily total return before every regression; a cash position contributes exactly zero. - decompose: rf_series()/excess(); shv+bil dropped from regressors (~0 columns in excess space); FULL_WINDOW -> 2007-06-01 (BIL inception; mixing raw pre-2007 with excess breaks the fit). - factors: same excess treatment; shv out of DRIVERS. - CASH axis redefined: alpha/cash_yield -> net cash position = 1 - sum(betas) (label 'cash (net posn)'). - CANDIDATE list 250 -> 11: the old list was mostly under-invested funds whose 'alpha' was cash yield, not skill. - refback.py: per-fund fitted reference (forward-selected sleeves) stored as ref_5y/ref_full in search_all.json; app alpha-search table gains a 'reference (5y)' column - the answer to 'what is alpha computed against' (the fund's OWN fitted sleeve mix, not one index). - App captions updated; raw-alpha-era results backed up as *_rawalpha.json (not deleted).
15 lines
378 B
Plaintext
15 lines
378 B
Plaintext
15:03:47 factor screen: 2384 funds, 2384 to do
|
|
15:03:47 building driver panel (34 axes)
|
|
15:03:55 200/2384
|
|
15:04:02 400/2384
|
|
15:04:10 600/2384
|
|
15:04:18 800/2384
|
|
15:04:30 1000/2384
|
|
15:04:43 1200/2384
|
|
15:04:52 1400/2384
|
|
15:04:59 1600/2384
|
|
15:05:07 1800/2384
|
|
15:05:14 2000/2384
|
|
15:05:21 2200/2384
|
|
15:05:28 factor screen done: 2384 funds -> factor_results.json
|