Risk Architecture & Market Regimes
Adaptive Markets: Financial Evolution at the Speed of Thought
Lo's answer to the efficient-markets fight: markets are neither always efficient nor always irrational, they are ecosystems. How predictable prices are depends on who is competing and how the environment is changing, so an edge that works today can fade tomorrow.
The big picture
For decades finance argued about two camps. The efficient-markets camp says prices already reflect available information, so there is nothing systematic to exploit. The behavioral camp lists the ways people misjudge risk and says prices drift away from value. Lo's core bet is that both describe the same system at different moments. He calls it the Adaptive Markets Hypothesis: investors are not optimizers but adapters who use rules of thumb (heuristics) that worked in past environments. Competition, adaptation and selection, the same forces that shape biological species, decide which of those rules survive. Efficiency is therefore not a fixed property of a market; it rises when many capable players compete for an opportunity and falls when the environment changes faster than behavior can follow.
Why it matters now: an AI-driven market has changed quickly. Index weights are concentrated in a handful of names, systematic and passive money reacts to the same inputs, and relationships that held for years (bonds hedging stocks, momentum paying steadily, low volatility being cheap) have shifted more than once since 2020. The book does not say which environment comes next. It says the useful question is not whether a market is efficient, but how efficient it is right now, for this strategy, and whether that has just changed.
The 3 strategic pillars
-
Efficiency is a moving target
How predictable prices are depends on the number of competitors, the size of the opportunity and how fast participants adapt. None of these is constant, so the degree of efficiency changes over time.
Lo's own measurements show it: the first-order autocorrelation of US stock index returns (how much one period's return tells you about the next), computed over rolling five-year windows, has drifted between clearly positive and negative values across more than a century. A random walk would keep it near zero. The pack applies the same gauge to your series with a band of ±2/√W, about ±0.26 for a 60-day window; readings outside the band say the series currently behaves unlike a random walk.
-
Heuristics fit environments, not markets in general
People decide with rules of thumb that are good enough rather than optimal (Herbert Simon's term is satisficing). A rule that was well adapted to one environment turns into a so-called bias when the environment changes. Loss aversion, herding and overconfidence are, in this view, adaptations out of place.
The practical form is calibration drift. A stop-loss distance, a position size or a rebalancing band is set on the volatility of the recent past. When volatility doubles, the same rule does something different. The pack's volatility gauge divides rolling volatility by its own median over the last 250 days and flags readings above 1.5× or below 0.67×: the point where rules tuned on the old level deserve a new look.
-
Edges die when crowded
A profitable pattern attracts capital. As more money runs the same trade, the return shrinks and the positions start to move together, so when one holder is forced out the others are hit at the same time.
Lo's work with Amir Khandani on August 2007 documents the pattern: many quantitative long-short equity funds held similar positions, and forced selling by some caused sharp losses across the group within a few days, while the broad market barely moved. Two measurable traces of crowding are a rolling Sharpe ratio (return per unit of volatility) that falls below its own history and correlations between assets or strategies that jump. The pack tracks both on your data.
What a Closelooknet reader does with it
The working use is a regular check that the environment your approach was built in still exists. Instead of asking whether a strategy works, ask whether the conditions it was tested in are still present: is the series still as predictable (or unpredictable) as it was, is volatility in the same range, do the assets still move together the way they did, is a simple rule still earning what it used to? The pack answers those four questions on your own price series and marks the days when two or more of them change at once. The mistake it prevents is the slow one: running a rule calibrated on a past environment long after that environment ended, and reading the losses as bad luck.
The bridge to the Closelooknet approach
Closelooknet already reads markets as regimes rather than as a fixed state. The Market Regime framework scores the environment as green, yellow or red (glossary: Market Regime), Money Temperature tracks how hot capital flows are running, and Regime-Specific Baselines judges each structural indicator against what is normal for the current regime, which is Lo's point in operational form: the same reading means different things in different environments. The Factor Regime ratio and the Regime Signature quadrants show when leadership and trend quality shift. On the shelf, Trend Following is an adaptive strategy that pays in some environments and bleeds in others, and Misbehaving covers the behavioral side Lo sets out to reconcile.
Action-Kit — from theory to practice
Tooling & data
| What you need | Where to get it | Cost |
|---|---|---|
| Daily price history for YOUR series Input for the monitor: one or two columns of closing prices; the pack ships only synthetic EXAMPLE data | Stooq (free CSV downloads) or your broker's export Use adjusted closes and at least 332 daily prices with the default settings. | Free |
| Factor return histories Run the Sharpe-decay gauge on published factor returns (momentum, value, size) to see how long-known edges have waxed and waned | Kenneth R. French Data Library, Dartmouth Tuck School of Business Daily and monthly files; convert the return column to a cumulative index before feeding it to the monitor. | Free |
| Macro and rates series Second series for the rolling-correlation gauge, e.g. a Treasury yield or a credit spread against your equity series | FRED, Federal Reserve Bank of St. Louis | Free |
The formulas
-
Rolling first-order autocorrelation (efficiency gauge)
AC1_t = corr(r_s, r_s−1) for s = t−W+1 … t; flag if |AC1_t| > 2 / √W- r_s = ln(P_s / P_s−1) — log return
- W — rolling window in periods (default 60)
The ±2/√W band is the approximate 95% range under a random walk; volatility clustering makes the true band somewhat wider.
-
Variance ratio
VR(q) = Var(r_t + … + r_t−q+1) / (q · Var(r_t)) ≈ 1 + 2 · Σ_{k=1}^{q−1} (1 − k/q) · ρ_k- q — aggregation horizon in periods (default 5)
- ρ_k — autocorrelation at lag k
The test Lo and MacKinlay used in 1988: 1 = random walk, above 1 = trending, below 1 = mean-reverting.
-
Volatility regime ratio
VOLx_t = σ_W,t / median(σ_W over the last L periods); σ_W = stdev(r) · √252- W — volatility window
- L — long lookback (default 250)
Flag above 1.5 or below 1/1.5. A series that has been turbulent for a full lookback looks normal to itself.
-
Rule Sharpe decay
dSHP_t = SR_W,t − median(SR_W over L); SR_W = mean(s) / stdev(s) · √252; s_t = sign(P_t−1 / P_t−1−M − 1) · r_t- s_t — daily return of a simple M-day momentum rule, decided with yesterday's close
- M — rule lookback (default 20)
Flag when dSHP < −1.0: the rule earns clearly less than it used to. The rule is a probe of the environment, not a strategy.
Applied Pack · free members
Lo Adaptive Markets Pack
Your price series in, the environment made visible: four rolling gauges (autocorrelation, volatility regime, correlation shift, rule Sharpe decay) that flag when a market's ecology has changed. Software for your own research, never signals.
- Lo_Regime_Monitor.xlsx — Monitor sheet with live formulas for rolling AC1 and its random-walk band, volatility vs its median, rolling correlation shift, a momentum rule's rolling Sharpe and its decay, four flags and a SHIFT/STABLE state with a 3-day confirmation rule; Summary sheet with the latest reading and history counts; Charts sheet; amber input cells for up to 1,500 prices
- lo_regime_monitor.py — stdlib-only Python with the same logic plus the variance ratio VR(q), CSV in (one or two price columns), a dated table of gauges, flags and state changes out
- prices_sample.csv — 800 synthetic EXAMPLE prices with three built-in environments (random walk, trending, turbulent and mean-reverting), not real securities
- README.txt — the idea in one paragraph, every gauge and input explained, how to run it on daily or weekly data, limits, and the educational-use disclaimer
Pack security
Macro-free Excel · plain-text Python you can read before you run it · no installers, no network access — the code works only on files you provide. Served only from closelook.net; we never distribute through download portals or email attachments. How to verify in 30 seconds →
SHA-256 e093aeb063147f4d87d386bf59b9fc669c8a94300e3c311a2d913c22afb5d4ef
The pack is a free-membership download — no card, free forever. Membership also delivers the Daily Pulse and Weekly Signal to your inbox.
Join the Look — free → Already a member? Sign in →
Educational templates — a research diary companion, not investment advice.
Closelooknet publishes a market diary, not investment advice. This condensed read restates the book's ideas in our own words for education — for the author's full argument, go to the source.