Skip to main content
Skip to methodology content

19-Factor Risk Model Methodology

A Barra USE4-style factor model for decomposing portfolio risk and return into systematic and idiosyncratic components.

Overview

Factor models explain security returns as a linear combination of common factor returns plus an idiosyncratic component. The general form is:

Ri=αi+∑k=1Kβi,kfk+ϵi\displaystyle R_i = \alpha_i + \sum_{k=1}^{K} \beta_{i,k} f_k + \epsilon_i

Where:

  • RiR_i is the return of security ii
  • αi\alpha_i is the security-specific alpha (skill)
  • βi,k\beta_{i,k} is the exposure of security ii to factor kk
  • fkf_k is the return of factor kk
  • ϵi\epsilon_i is the idiosyncratic (stock-specific) return

Validation Status

Quantitative factor-model claims are pulled from the claims registry so users can distinguish code-backed model dimensions from validation targets that are still waiting on the Track A harnesses.

Backed claim

19 count

Count of factors defined in FactorExposures interface. Verified: 19 factors in src/services/factors.ts

Evidence provenance

factor-model-19

Test evidence: tests/services/factors.test.ts

Planned validation

0.6 correlation

Redefined for a risk model (bd-2lg9oy.10): the IC is the per-window Spearman correlation of factor-model predicted σ against realized σ across portfolios. The earlier return-prediction IC (docs/claims/factor-ic-latest.json) measured 0.0019 and is the wrong statistic for a risk model. Measured 2026-11-02 on a local mirror of production's v1.2.0 factor returns, covariances and batch_job exposures (per-year return and covariance hashes equal production's), 2012-01 to 2026-08: mean 0.423 (SE 0.012) over 161 disjoint 21-session windows and 7,949 forecasts (docs/claims/risk-forecast-eval-latest.json). Was 0.348 over 173 windows on 2026-10-12, before production's 2021-2026 re-estimation (2026-10-22 to 10-26) and before the evaluator read only batch_job exposures (lo6pp6.2), which drops 2020 (gap-fill rows only); the two changes are not decomposed. Below the >= 0.60 goal: NOT MET. Re-dated 2026-11-01 to 2026-12-31 while v1.3.0 regression and universe calibration (bd-mic05q, bd-barra-cert-epic-vma96) remain in progress.

Evidence provenance

ic-0.62

Computed 2026-11-02; evidence tests/research/risk_forecast_eval.test.ts; docs/claims/risk-forecast-eval-latest.json; target 2026-12-31

Planned validation

0.98-1.02 ratio

Now scored against FACTOR-MODEL sigma (sqrt(x'Σ_F x + Σ w²σ²_ε) as of each forecast date), not trailing realized volatility (bd-2lg9oy.10). Measured 2026-11-02 on a local mirror of production's v1.2.0 artifacts and batch_job exposures, 2012-01 to 2026-08, 161 disjoint 21-session windows, 7,949 forecasts: bias 1.048, 95% CI [0.998, 1.106] (2026-10-12: 1.064, CI [0.962, 1.205] over 173 windows, before production's 2021-2026 re-estimation and the batch_job-only exposure read that drops 2020). The point estimate lies outside [0.98, 1.02] and the interval is too wide to confirm or refute the target: NOT DEMONSTRATED. The point-in-time top-120 book alone (66 windows from 2021) measures 1.080, CI [0.94, 1.30]. The earlier 1.07 figure scored the trailing-volatility baseline. Re-dated 2026-11-01 to 2026-12-31 while v1.3.0 calibration (bd-mic05q, bd-barra-cert-epic-vma96) remains in progress.

Evidence provenance

bias-ratio-0.98-1.02

Computed 2026-11-02; evidence tests/research/risk_forecast_eval.test.ts; docs/claims/risk-forecast-eval-latest.json; target 2026-12-31

Planned validation

94 percent

Scored against the factor model's own 95% VaR (1.6449·σ_pred) on a local mirror of production's v1.2.0 artifacts and batch_job exposures, measured 2026-11-02 over 2012-01 to 2026-08 (bd-2lg9oy.10): pooled coverage 96.1% over 166,929 portfolio-days, meeting the >= 94% goal (2026-10-12: 96.6% over 179,298, before production's 2021-2026 re-estimation and the batch_job-only exposure read that drops 2020). Calibration errs conservative: on the point-in-time top-120 series coverage is 96.25% over 1,386 days, so Kupiec rejects exact 95% (p=0.026, too few violations), while Christoffersen finds no clustering (p=0.18). The prior 93.79% (docs/claims/var-coverage-latest.json) scored a trailing-volatility VaR. Re-dated 2026-11-01 to 2026-12-31 while Kupiec exact-95% calibration on the point-in-time book remains open under v1.3.0.

Evidence provenance

var-coverage-94.2

Computed 2026-11-02; evidence tests/research/risk_forecast_eval.test.ts; docs/claims/risk-forecast-eval-latest.json; target 2026-12-31

Source: docs/claims.json, generated 2026-09-07.

Portfolio Factor Exposures

Portfolio-level factor exposure is the weighted sum of security-level exposures:

βP,k=∑i=1Nwi⋅βi,k\displaystyle \beta_{P,k} = \sum_{i=1}^{N} w_i \cdot \beta_{i,k}

Where wiw_i is the portfolio weight of security ii (position value divided by total portfolio value).

Factor Orthogonalization & Sector Standardization

To ensure factors capture independent incremental information and to reduce collinearity in cross-sectional regressions, intermediate factor loadings are orthogonalized using a weighted Gram-Schmidt process. Each factor is projected against preceding factors and the residual becomes the orthogonalized factor.

For a target factor XX being orthogonalized against a base factor YY:

X⊥=X−∑iwiXiYi∑iwiYi2⋅Y\displaystyle X^{\perp} = X - \frac{\sum_i w_i X_i Y_i}{\sum_i w_i Y_i^2} \cdot Y

In v1.2.0 the weights wiw_i are market capitalizations, so larger companies have proportionally more influence on each projection.

Post-Orthogonalization Sector Standardization: Following the Gram-Schmidt projection, exposures undergo a second standardization pass within GICS sectors, followed by coverage masking. Because within-sector re-centering is piecewise-affine by group, the persisted exposures matrix in security_factor_exposures is non-orthogonal by design. This preserves sector-neutral style z-scores across diverse industry distributions while maintaining bounded cross-factor correlations.

Exposure units: In v1.2.0 each raw style value is clipped at the cap-weighted mean ± 3 cap-weighted standard deviations, z-scored within its GICS sector using that sector's cap-weighted mean and standard deviation (a sector with fewer than 5 names uses the whole cross-section), re-centered to a cap-weighted mean of 0 and rescaled to an equal-weighted standard deviation of 1, with no clip after the rescale. This runs twice, around a cap-weighted Gram-Schmidt pass that removes from each style factor its projection on the style factors listed before it. A name without the raw inputs is stored as NULL, not 0. That chain wrote every v1.2.0 row dated from 2026-07-01; rows dated 2005 through 2026-06-30 were written in June 2026 by an earlier chain that ran the Gram-Schmidt pass on raw, uncentred values, so the two vintages share the v1.2.0 label but not one method.

Orthogonalization Order: The order matters. We follow the Barra convention: SIZE, SIZENL, BTOP, EARNYILD, DIVYILD, GROWTH, LEVERAGE, BETA, BETANL, RESVOL, LIQUIDITY, MOM3WKZS, MOM11MNZS, RET5DZS, SHORTINTEREST, HFOWN, PASSOWN, SHIMCAPZS. MARKETBETA, the constant intercept, is not orthogonalized or standardized.

Factor Return Computation

Daily factor returns are estimated using weighted cross-sectional regression:

f^=(XTWX)−1XTWR\displaystyle \hat{f} = (X^T W X)^{-1} X^T W R

Where XX is the matrix of factor exposures, WW is a diagonal weight matrix of market capitalizations, and RR is the vector of security returns.

Estimation convention: In v1.2.0 the factor returns for date t regress each stock's return on day t on its exposures as of the same day t (same-day pairing: SIZE uses that day's market cap and the BETA and RESVOL windows end on t). The fit is weighted least squares in which each stock's squared residual is weighted by its market cap (the row multiplier is the square root of market cap); the 19 factors are the only columns, with MARKETBETA as the intercept.

Factor Covariance Matrix

We estimate the factor covariance matrix using an Exponentially Weighted Moving Average (EWMA) with dual half-lives for robustness:

Σ=λ⋅Σshort+(1−λ)⋅Σlong\displaystyle \Sigma = \lambda \cdot \Sigma_{\text{short}} + (1-\lambda) \cdot \Sigma_{\text{long}}
  • Short half-life: 32 days (responsive to recent volatility)
  • Long half-life: 128 days (stable, long-term structure)
  • Blend weight: λ=0.5\lambda = 0.5 (equal weight by default)

The EWMA weight for observation tt days ago is:

wt=(12)t/τ\displaystyle w_t = \left(\frac{1}{2}\right)^{t / \tau}

Where τ\tau is the half-life in days.

The 19 Factors

Our model includes the broad-market intercept plus 18 style factors. Each style factor captures a systematic source of return that has been documented in academic literature and used in practice by institutional investors.

1

Broad market (MARKETBETA)

The stock model's common market component, with a base loading of 1 for each stock: the market intercept, exactly 1.0 for every security on every date, so its factor return is the move all stocks share that day. Portfolio loadings also reflect position direction and any supported leverage adjustment. It does not vary across stocks; how strongly each stock has moved with the market is the separate Historical Beta (BETA) factor.

MARKETBETAi=1\displaystyle \text{MARKETBETA}_i = 1

Units: Constant 1.0 for every security; not standardized.

Interpretation: A positive exposure has more long than short exposure to the common market component; a negative exposure has more short than long exposure to the common market component.

2

Size (Market Cap) (SIZE)

Company size measured by log market capitalization (the natural log of market cap on the model date), scored against the cap-weighted average company of the stock's own GICS sector. Positive values are larger than that sector average and negative values smaller, so a mega-cap in a sector of mega-caps scores near 0, below a smaller company that is large for its own sector.

SIZEi=ln⁡(MarketCapi)\displaystyle \text{SIZE}_i = \allowbreak\ln(\text{MarketCap}_i)

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward companies larger than their sector's cap-weighted average; a negative exposure tilts toward companies smaller than their sector's cap-weighted average.

3

Size Non-Linear (SIZENL)

Non-linear size: a Gaussian bump exp(-s²/2) of the scaled log market cap s (log cap minus its cross-sectional median, divided by its standard deviation), re-centered on its median and orthogonalized against SIZE with market-cap weights. It peaks for mid-size companies.

SIZENLi=(e−si2/2)⊥ SIZE,si=ln⁡Capi−med⁡(ln⁡Cap)σ(ln⁡Cap)\displaystyle \text{SIZENL}_i = \left(e^{-s_i^2/2}\right)^{\perp\,\text{SIZE}},\allowbreak\quad s_i = \frac{\allowbreak\ln \text{Cap}_i - \operatorname{med}(\allowbreak\ln \text{Cap})}{\sigma(\allowbreak\ln \text{Cap})}

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward mid-size companies; a negative exposure tilts toward the very smallest and largest companies.

4

Book-to-Price (BTOP)

Value: book equity divided by market capitalization, capped at ±5 (negative book equity is kept). Higher values indicate value stocks, lower values growth stocks.

BTOPi=clip⁡(BookEquityiMarketCapi, −5, 5)\displaystyle \text{BTOP}_i = \operatorname{clip}\left(\frac{\text{BookEquity}_i}{\text{MarketCap}_i},\,-5,\,5\right)

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward value stocks (more book value per dollar of price); a negative exposure tilts toward growth stocks (less book value per dollar of price).

5

Earnings Yield (EARNYILD)

Earnings relative to price: 75% forward FY1 EPS / price (point-in-time analyst estimates), 15% trailing-12-month operating cash flow per share / price and 10% trailing-12-month EPS / price, renormalized over the legs a name has. Financials drop the cash leg; real-estate names have no value in v1.2.0. Known data discontinuity (2026-09-28): until 2026-09-25 only 234 of 3,868 universe names (6%) had a point-in-time forward estimate vintage (from a late-June 2026 snapshot), so EARNYILD was renormalized onto trailing cash flow and trailing EPS for the other 94% of names; daily forward-vintage capture began on 2026-09-26 (58% forward coverage on 2026-09-28, 89% on 2026-10-01, 98% by 2026-10-23), causing a one-time cross-sectional rank shift on 2026-09-28 (day-over-day rank correlation 0.845 vs 0.999 median).

EARNYILDi=0.75 EPSiFY1Pi+0.15 OCFiTTM/SharesiPi+0.10 EPSiTTMPi\displaystyle \text{EARNYILD}_i = 0.75\,\frac{\text{EPS}^{\text{FY1}}_i}{P_i} + 0.15\,\frac{\text{OCF}^{\text{TTM}}_i/\text{Shares}_i}{P_i} + 0.10\,\frac{\text{EPS}^{\text{TTM}}_i}{P_i}

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward stocks with more earnings per dollar of price; a negative exposure tilts toward stocks with less earnings per dollar of price.

6

Dividend Yield (DIVYILD)

Trailing-12-month dividends per share divided by price. Confirmed non-payers are 0 and missing dividend or price data stays missing. v1.2.0 has no point-in-time forward dividend estimates, so the trailing yield carries the full weight.

DIVYILDi=DPSiTTMPi\displaystyle \text{DIVYILD}_i = \frac{\text{DPS}^{\text{TTM}}_i}{P_i}

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure emphasizes higher-yielding dividend payers; a negative exposure holds fewer or lower-yielding dividend payers.

7

Growth (GROWTH)

Earnings and revenue growth: 70% forward EPS growth (FY2 vs FY1 analyst estimates), 20% five-year historical EPS growth (CAGR) and 10% revenue growth (forward estimates where available, otherwise trailing-12-month year over year), renormalized over the legs a name has. Known data discontinuity (2026-09-28): until 2026-09-25 only 234 of 3,868 universe names (6%) had a point-in-time forward estimate vintage (from a late-June 2026 snapshot), so GROWTH was renormalized onto five-year historical EPS growth and revenue growth for the other 94% of names; daily forward-vintage capture began on 2026-09-26 (58% forward coverage on 2026-09-28, 89% on 2026-10-01, 98% by 2026-10-23), causing a one-time cross-sectional rank reshuffle on 2026-09-28 (day-over-day rank correlation 0.204 vs 0.998 median).

GROWTHi=0.7 EPSiFY2−EPSiFY1∣EPSiFY1∣+0.2 giEPS,5y+0.1 girev\displaystyle \text{GROWTH}_i = 0.7\,\frac{\text{EPS}^{\text{FY2}}_i - \text{EPS}^{\text{FY1}}_i}{|\text{EPS}^{\text{FY1}}_i|} + 0.2\,g^{\text{EPS,5y}}_i + 0.1\,g^{\text{rev}}_i

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward faster-growing companies; a negative exposure tilts toward slower-growing companies.

8

Leverage (LEVERAGE)

Debt load: 75% market leverage, net debt / (net debt + market cap) with net debt = total debt minus cash floored at 0; 15% total debt / total assets; 10% total debt / book equity (positive book only); renormalized over the legs a name has.

LEVERAGEi=0.75 DinetDinet+Capi+0.15 DiAssetsi+0.10 DiBooki,Dinet=max⁡(Di−Cashi, 0)\displaystyle \text{LEVERAGE}_i = 0.75\,\frac{D^{\text{net}}_i}{D^{\text{net}}_i + \text{Cap}_i} + 0.15\,\frac{D_i}{\text{Assets}_i} + 0.10\,\frac{D_i}{\text{Book}_i},\allowbreak\quad D^{\text{net}}_i = \max(D_i - \text{Cash}_i,\,0)

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure holds more highly leveraged companies; a negative exposure favors less leveraged companies.

9

Historical Beta (BETA)

The model's standardized historical-beta characteristic: a 252-trading-day regression of the stock's excess return on the SPY benchmark's (IVV, then VOO, as fallbacks), Dimson-adjusted with one lag and one lead for asynchronous trading. v1.2.0 applies no shrinkage. This, not the broad-market intercept, is the factor that carries market sensitivity.

βi=βi,0+12(βi,−1+βi,+1),βi,k=Cov⁡(ri,t, rm,t+k)Var⁡(rm)\displaystyle \beta_i = \beta_{i,0} + \tfrac{1}{2}\left(\beta_{i,-1} + \beta_{i,+1}\right),\allowbreak\quad \beta_{i,k} = \frac{\operatorname{Cov}(r_{i,t},\, r_{m,t+k})}{\operatorname{Var}(r_m)}

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure holds stocks that have moved more than the market; a negative exposure holds stocks that have moved less than the market.

10

Beta Non-Linear (BETANL)

Non-linear beta: the square of the scaled beta b (beta minus its cross-sectional median, divided by its standard deviation) minus 1, re-centered on its median and orthogonalized against BETA. It is high for both very high- and very low-beta stocks.

BETANLi=(bi2−1)⊥ BETA,bi=βi−med⁡(β)σ(β)\displaystyle \text{BETANL}_i = \left(b_i^2 - 1\right)^{\perp\,\text{BETA}},\allowbreak\quad b_i = \frac{\beta_i - \operatorname{med}(\beta)}{\sigma(\beta)}

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward stocks with extreme (very high or very low) beta; a negative exposure tilts toward stocks with mid-range beta.

11

Residual Volatility (RESVOL)

Stock-specific volatility: 75% the 252-day standard deviation of residuals from the stock's market regression, 15% Parkinson high-low price-range volatility over 252 days and 10% an EWMA of residual volatility (42-day half-life), renormalized over the legs a name has.

RESVOLi=0.75 σ252(εi)+0.15 σ252,iHL+0.10 σ42EWMA(εi)\displaystyle \text{RESVOL}_i = 0.75\,\sigma_{252}(\varepsilon_i) + 0.15\,\sigma^{\text{HL}}_{252,i} + 0.10\,\sigma^{\text{EWMA}}_{42}(\varepsilon_i)

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure holds more volatile individual stocks; a negative exposure favors stocks with lower stock-specific volatility.

12

Liquidity (LIQUIDITY)

Share turnover: a blend of the log of total volume divided by average float shares over 21 days (35%), 63 days (35%) and 252 days (30%). Higher values mean more actively traded shares.

LIQUIDITYi=∑w∈{21, 63, 252}cwln⁡∑d=1wVi,dF‾i,w,c=(0.35, 0.35, 0.30)\displaystyle \text{LIQUIDITY}_i = \sum_{w \in \{21,\,63,\,252\}} c_w \allowbreak\ln\frac{\sum_{d=1}^{w} V_{i,d}}{\overline{F}_{i,w}},\allowbreak\quad c = (0.35,\,0.35,\,0.30)

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure holds more heavily traded stocks (higher turnover); a negative exposure holds less heavily traded stocks (lower turnover).

13

3-Week Momentum (MOM3WKZS)

Short-term momentum: the sum of the stock's daily log returns over the 15 trading days ending the day before the model date (the model date's own return is skipped).

MOM3WKi=∑d=t−15t−1ln⁡(1+ri,d)\displaystyle \text{MOM3WK}_i = \sum_{d=t-15}^{t-1} \allowbreak\ln(1 + r_{i,d})

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward stocks that rose over the last three weeks; a negative exposure tilts toward stocks that fell over the last three weeks.

14

11-Month Momentum (MOM11MNZS)

Intermediate-term price momentum: the sum of daily log returns over 231 trading days (about 11 months) ending 42 trading days (about two months) before the model date, so recent weeks are excluded from the measurement to reduce short-term reversal effects.

MOM11MNi=∑d=t−272t−42ln⁡(1+ri,d)\displaystyle \text{MOM11MN}_i = \sum_{d=t-272}^{t-42} \allowbreak\ln(1 + r_{i,d})

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward recent winners; a negative exposure tilts toward recent losers.

15

5-Day Reversal (RET5DZS)

Recent price reversal, using the negative of a five-day price return before the model date: minus the sum of daily log returns over the 5 trading days ending the day before. This factor is not your portfolio's five-day return.

RET5Di=−∑d=t−5t−1ln⁡(1+ri,d)\displaystyle \text{RET5D}_i = -\sum_{d=t-5}^{t-1} \allowbreak\ln(1 + r_{i,d})

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward stocks that fell over the past week; a negative exposure tilts toward stocks that rose over the past week.

16

Short Interest (SHORTINTEREST)

Shares sold short as a fraction of float shares, from the latest short-interest record known on the model date, capped at 150%.

SHORTINTERESTi=min⁡(SharesShortiFloatSharesi, 1.5)\displaystyle \text{SHORTINTEREST}_i = \min\left(\frac{\text{SharesShort}_i}{\text{FloatShares}_i},\,1.5\right)

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure holds more heavily shorted stocks; a negative exposure holds less heavily shorted stocks.

17

Hedge Fund Ownership (HFOWN)

Fraction of shares outstanding held by hedge-fund filers, from 13F holdings classified by filer segment (archived provider holder lists known by the model date as the fallback), capped at 150%.

HFOWNi=∑h∈HFSharesh,iSharesOuti\displaystyle \text{HFOWN}_i = \frac{\sum_{h \in \text{HF}} \text{Shares}_{h,i}}{\text{SharesOut}_i}

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure holds more stocks favored by hedge funds (more crowding risk); a negative exposure holds stocks less owned by hedge funds.

18

Passive Ownership (PASSOWN)

Fraction of shares outstanding held by passive vehicles (index funds and ETFs), from 13F holdings classified by filer segment (archived provider holder lists known by the model date as the fallback), capped at 150%.

PASSOWNi=∑h∈PassiveSharesh,iSharesOuti\displaystyle \text{PASSOWN}_i = \frac{\sum_{h \in \text{Passive}} \text{Shares}_{h,i}}{\text{SharesOut}_i}

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure holds more stocks widely owned by index funds; a negative exposure holds stocks less owned by index funds.

19

Share Issuance (SHIMCAPZS)

Share issuance: 70% the 12-month log change in float shares plus 30% the 12-month change in float shares divided by the 12-month change in market cap. A name with a split in the trailing 12 months has no value, and one with a buyback in that window is set to 0, so share reductions are not scored; higher means more dilution. Known data gap: the stored v1.2.0 exposures are 0 on every row for all 385 dates from 2024-11-04 through 2026-05-21 (measured 2026-10-21), so the factor carried no information in that window.

SHIMCAPZSi=0.7 ln⁡Fi,tFi,t−12m+0.3 Fi,t−Fi,t−12mCapi,t−Capi,t−12m\displaystyle \text{SHIMCAPZS}_i = 0.7\,\allowbreak\ln\frac{F_{i,t}}{F_{i,t-12\text{m}}} + 0.3\,\frac{F_{i,t} - F_{i,t-12\text{m}}}{\text{Cap}_{i,t} - \text{Cap}_{i,t-12\text{m}}}

Units: Z-score: cap-weighted mean 0 and equal-weighted standard deviation 1, standardized within GICS sector (v1.2.0).

Interpretation: A positive exposure tilts toward companies issuing more shares (more dilution); a negative exposure tilts toward companies issuing fewer shares.

Alpha/Beta Decomposition

Portfolio return can be decomposed into market exposure (beta return) and alpha (skill):

RP=αP+βP⋅RM+ϵP\displaystyle R_P = \alpha_P + \beta_P \cdot R_M + \epsilon_P
  • Beta Return: βP⋅RM\beta_P \cdot R_M - Return explained by market exposure
  • Alpha: αP\alpha_P - Return from security selection skill
  • Factor Return: Sum of non-market factor contributions
  • Specific Return: ϵP\epsilon_P - Unexplained (idiosyncratic) return

Data Sources

  • Price data: Daily adjusted close prices from market data providers
  • Fundamentals: Quarterly financial statements from SEC EDGAR
  • Ownership: 13F filings for institutional holdings
  • Short interest: FINRA short interest reports

Coverage Scope

The factor model is calibrated on USD-denominated US-listed equities and ETFs. Portfolio factor computations include equity and ETF positions, and value them in USD.

In your factor exposures and factor attribution, a non-USD position is converted into USD with an explicit fx_rate_daily rate before it enters the factor weight base, so an international holding is weighted alongside its US peers instead of vanishing from the denominator. A position we cannot price — no usable rate for its currency — is left out with an explicit non-usd reason rather than being assumed to be dollars. We do not silently FX-convert: every conversion uses a dated published rate, and every omission is disclosed with its reason and count.

That conversion has not reached every surface yet. The sector and country weight breakdown, the portfolio sector-factor heatmap, and the nightly factor snapshot still omit non-USD positions entirely, with the same explicit non-usd reason and visible exclusion counts. Until those adopt it, an international holding can appear in your factor exposures while being absent from those three views.

Security-level factor exposures always come from the USD-calibrated US model, so a converted holding with no matching factor row is disclosed as no-factor-coverage; a fuller non-US exposure model remains on the roadmap.

Unsupported instruments such as crypto, options, and mutual funds are also excluded from the factor table. The exception is an S&P 500 index mutual fund in our fund registry, such as FXAIX: when the model has exposures for the fund itself, it is included like a stock. Excluded holdings stay in the coverage figure’s denominator and are named: coverage is the factor-modeled share of non-cash holdings value, so it shows how much of the account was outside the current model scope. Brokerage cash and margin lines count in neither part.

References

  • MSCI Barra USE4 Handbook (2011) - Equity Risk Model Methodology
  • Fama, E. F., & French, K. R. (1993). Common risk factors in the returns on stocks and bonds. Journal of Financial Economics
  • Carhart, M. M. (1997). On persistence in mutual fund performance. Journal of Finance
  • Frazzini, A., & Pedersen, L. H. (2014). Betting against beta. Journal of Financial Economics

Disclaimer

Factor exposures are estimates based on historical data and may not accurately predict future returns. Factor models have known limitations including estimation error, model misspecification, and changing factor dynamics. This documentation is for educational purposes and does not constitute investment advice.

Midas Edge methodology documentation. For research and educational purposes.

Not financial advice. Past performance does not guarantee future results.