Technical Specification
Engine v2.10, data as of 2026 Q2. Every formula, constant and rule behind the published readings, as implemented.
1. Inputs
Every input is quarterly, from 2000 Q1. A market needs 16 quarters of history before its readings begin, and 2020 Q2 – 2021 Q4 is left out of what counts as normal. The last two inputs are national; the rest are measured market by market.
| Input | What it measures | How the model uses it |
|---|---|---|
| Occupancy rate, o | Share of all multifamily units in the market that are occupied at quarter end; units still leasing up count as unoccupied. | Standing: the rate standardized against its own history, so occupancy above the market’s own norm adds to Standing. Momentum: its change over the past four quarters. Leading: the change in that four-quarter change versus a year earlier, entered negatively. |
| Effective rent growth, g | Percentage change in average effective rent per unit (asking rent net of concessions) over the trailing 12 months, all units. | Standing: the 12-month growth rate itself. Momentum: that rate versus four quarters earlier. |
| Supply, s | Units under construction at quarter end, as a share of the market’s existing inventory. | Leading: the level, against the market’s own history. |
| Price growth | 12-month percentage change in a market-wide sale price index covering all multifamily properties. | Repricing: that 12-month growth versus four quarters earlier, so whether price growth is speeding up or slowing down. |
| Transaction volume | Number of multifamily sales closed in the quarter, less the same quarter a year earlier, divided by the prior year’s average quarterly count; capped between −100% and +200%. | Transactions: the year-over-year change, against the market’s own history. |
| Price ÷ replacement | Price per unit of 4- and 5-star properties divided by a national construction-cost index. | Replacement: this market’s percentile of the ratio against its own history, plus the share of all markets past their own 90th percentile. |
| HY spread | Option-adjusted spread of U.S. high-yield corporate bonds over Treasuries (national). | Credit: its percentile against its own history, and whether it is higher than a year earlier. |
| SLOOS | Net share of banks reporting tighter standards on multifamily real estate loans in the Federal Reserve’s quarterly senior loan officer survey (national). | Credit: the net share tightening in the latest quarter. |
2. Operators
Standardization
μt and σt are the mean and (population) standard deviation of the market’s own observations strictly before t, excluding 2020 Q2 – 2021 Q4. Z is undefined until at least 16 such observations exist. No observation at or after t enters its own standardization.
Percentile
Change and blending
3. Fundamentals (F)
Standing and Momentum
Occupancy is 1 − vacancy, the form the data arrives in; standardizing either gives the same number with the sign flipped. Occupancy above the market’s own norm adds to Standing.
Standing and Momentum are not capped. Both are blended by (2.5) to give F̃S and F̃Δ.
Strength and Position
Signal strength is used to normalize the Position term while distinguishing stronger directional signals from markets that remain close to normal. It combines a market’s current standing and momentum into a single measure of how far fundamentals have moved from normal conditions.
The Position term divides the directional spread, (F̃S − F̃Δ), by overall Signal Strength, √(F̃S² + F̃Δ²). This was designed to measure the directional signal relative to its overall magnitude, rather than allowing unusually large raw readings to dominate the score. Because of the way the two components are combined, the formula naturally limits the Position contribution to approximately ±35.
Signal Strength also dampens readings at the other end of the spectrum. When Signal Strength falls below 1.5, the Position term is scaled linearly toward zero rather than receiving its full weight. Because Signal Strength combines the squared standing and momentum terms, a reading below 1.5 generally means both components remain relatively close to zero — or normal conditions. For perspective, if standing and momentum contributed equally, each would be only about 1.06 at a Signal Strength of 1.5. The threshold is therefore set “ex ante” as a reasonable neutral zone around normal conditions, rather than selected afterward to improve historical results.
Leading
4. Market Mood (M)
Repricing and Transactions
While SR > 0, lean-in readings are muted: SP = max(SP, 0) and ST = max(ST, 0).
Credit
National stress holds when the HY spread is at or above its 90th expanding percentile (2.3) and higher than four quarters earlier, or when SLOOS net tightening is +40 or more. Local transmission holds when
evaluated before the SR mute.
Replacement
p is the market’s percentile (2.3) of Price ÷ Replacement. B is the share of markets with p ≥ 0.90 in the same quarter, computed only when at least 30 markets report.
5. Cycle Score (C)
Every term is in points toward defense: a positive term pushes C toward 100 (defend), a negative term toward 0 (lean in).
| Term | Range (points) | Capped by |
|---|---|---|
| Position | −35.4 to +35.4 | Formula (3.4) |
| Leading, supply | −16 to +16 | Z±2 |
| Leading, occupancy turn | −8 to +8 | Z±2 |
| Repricing SP | −16 to +16 | Z±2 |
| Transactions ST | −8 to +8 | Z±2 |
| Credit SC | 0 or +10 | Indicator |
| Replacement SR | 0 to +45 | Ramp |
A missing Leading or Market Mood input contributes zero. Position requires both Standing and Momentum for the current and prior quarter.
6. The Hour (H)
The rising side is the one where blended Momentum is positive. C = 0 maps to 6 o’clock and C = 100 to 12 o’clock on either side.
Readings
All three readings are functions of H alone.
| Reading | Hour bands |
|---|---|
| Fundamental Phase | Recovery [6, 9) · Expansion [9, 12) · Hypersupply [12, 3) · Recession [3, 6) |
| Market Mood | Disbelief [7, 8) · Optimism [8, 11) · Euphoria [11, 12:30) · Anxiety [12:30, 2) · Fear [2, 5) · Despair [5, 7) |
| Investment Posture | Aggressive [5, 8) · Active [8, 10) · Cautious [10, 11) · Defensive [11, 3:15) · Cautious [3:15, 5) |
7. Constants
| Constant | Value | Role |
|---|---|---|
| History minimum | 16 quarters | Before any Z or percentile is defined |
| Excluded window | 2020 Q2 – 2021 Q4 | Omitted from every mean, deviation and percentile reference set |
| Cap | ±2 | All Leading and Market Mood Z-terms |
| Blend | 0.6 / 0.4 | Current / prior quarter, Standing and Momentum |
| Position scale | 25 | Eq. (3.4) |
| Strength threshold | 1.5 | Eq. (3.4) |
| Leading weights | 8 · 4 | Supply · occupancy turn |
| Mood weights | 8 · 4 | Repricing · Transactions |
| Credit step | 10 | Eq. (4.3) |
| HY percentile | 0.90 | National stress |
| SLOOS threshold | +40 | National stress |
| Replacement maximum | 45 | Eq. (4.5) |
| Replacement ramp | 0.90 → 1.00 | Own-history percentile |
| Breadth trigger | 0.60 of ≥ 30 markets | Eq. (4.5) |
8. Limitations
Every historical reading uses only the data that existed at the time, so none of them was built with hindsight.
The weights and thresholds are round numbers, not values tuned to fit past outcomes. They were still chosen while looking at this history, so the results here are not a live track record.
A reading describes a market as a whole. Submarkets and individual properties can behave differently.