Methodology
What we do
Macro Lens uses a three-layer architecture. A deterministic rotation engine reads thirteen sensors every morning from public data — six rotation ratios that combine into a market regime score, three macro dials (the yield curve, inflation expectations, and the dollar) that frame the conditions underneath, and four physical-market sensors — the Brent oil price, the Brent−WTI supply-shock spread, Cushing hub inventories, and refining stress — that watch the physical energy market. An AI synthesis layer — using state-of-the-art AI models (agentic AI) — translates that structured read into prose in a calibrated voice. A simple user experience — a daily brief, a "Should I Worry?" tool, an archive — delivers the result.
This separation is deliberate, and it is the single most important difference between Macro Lens and generic AI fintech products. The engine carries the analytical weight. The AI carries voice and context. The AI is structurally constrained from contradicting the engine. The math is reproducible by any reader from publicly available data.
What each brief tells you — and when
Each brief is one thing: a calm, plain-language read of the market's macro regime — whether the broad market is leaning risk-on, risk-off, or somewhere in between — and what, if anything, that means for an ordinary investor. Most mornings, the honest answer is "nothing needs doing."
On timing: the engine reads the market from each session's close, when the day's data is final, and that read is published before the next open. So the brief you read on a Monday morning is the read from Friday's close — and it is current, because the macro signals don't change while the market is shut. A regime is a slow-moving picture of where money is positioned; it doesn't flip because a bell rings. Friday's read carries through the weekend into Monday's open; Monday's close informs Tuesday's brief, and so on. The most recent brief is always your current read until the next session closes.
The rotation engine — the analytical backbone
Every morning, before any AI is involved, the engine computes six rotation ratios from yfinance close prices. These six carry the analytical weight of the regime score; three macro dials (documented below) add descriptive context and do not move the score.
| Ratio | Reads |
|---|---|
| SMH/SPY | Tech leadership |
| XLY/XLP | Consumer strength |
| XLF/XLU | Risk appetite (rates + risk) |
| IWM/SPY | Small-cap participation |
| HYG/TLT | Credit conditions |
| XLE/SPY | Energy pressure |
For each ratio the engine computes a 21-day simple moving average (the "fast" line, its recent trend) and a 50-day simple moving average (the "slow" line). The classification rule for each ratio is mechanical:
- Bullish when the ratio is decisively above its fast line — by at least 1% — and the fast line is above the slow line.
- Bearish when the ratio is decisively below its fast line — by at least 1% — and the fast line is below the slow line.
- Neutral in any other case — including the ±1% dead-band right around the fast line, where the reading is too close to its own trend to call.
The 21- and 50-day periods are deliberate. They align with how institutional flows are framed and avoid the whipsaw of shorter periods. They are not optimized to a backtest, and they are not changed without a published methodology revision.
The 1% dead-band is a hysteresis rule, and it matters: without it, a ratio sitting right on its 21-day average flips state every time it drifts a fraction of a percent across the line — recording "changes" that are really just noise. With it, a state only changes when the reading moves a real, visible distance clear of its trend, and then holds until it moves back a real distance the other way. Most days, nothing crosses that band — which is exactly why the honest, common answer is "no regime changes today." Each macro dial carries its own hysteresis band (below), sized to its own units.
The aggregate regime is derived from the count of ratios in each state. Five or more bullish ratios → "bullish, high confidence." Four → "mixed-bullish, medium." Five or more bearish → "bearish, high." Four → "mixed-bearish, medium." Anything else → "transitional, low confidence." These internal engine labels map one-to-one to the reader-facing names used across the site: bullish/high → All clear, mixed-bullish → Mostly clear, transitional → Mixed signals, mixed-bearish → Some caution, bearish/high → Cautious. A reader who downloads the same ETF closes from any free source and reproduces the moving averages will arrive at the same regime call.
Reading the numbers — and why they look small
The ratio sensors are exactly that — ratios of two share prices (SMH ÷ SPY, XLY ÷ XLP, and so on). A ratio like 1.38 is unitless: it just means one share of the first ETF costs 1.38 times one share of the second. On its own that number says nothing, and its day-to-day moves look tiny — a shift from 1.37 to 1.40 reads as "0.03," which seems like a rounding error. It isn't: 0.03 on a 1.38 ratio is a 2% move, a real one. The small-looking scale is what hides that.
So on the flip history and the board we lead with the figure that actually carries meaning: how far the reading sits from its 21-day trigger line, as a signed percent — "−0.7% below its line," "+2.1% above." That single number tells you both which way the sensor leans and how close it is to a state change (the change happens at ±1%). The raw ratio is still shown, small, underneath — so anyone who wants the literal value, or wants to reproduce it, has it. It's the same "% from threshold" scale used everywhere in Macro Lens, so every sensor reads on one consistent gauge.
What size of move flips each sensor (its threshold, published so you can check it yourself):
| Sensor | Flips when it moves… |
|---|---|
| The six rotation ratios | ~1% clear of their 21-day average |
Dollar (DTWEXBGS) |
~0.5% from its 200-day average |
Yield curve (T10Y2Y) |
across 0 (±0.05 pp band) |
Inflation (T10YIE) |
across 2.50% (±0.10 pp band) |
| Oil supply shock (Brent−WTI) | into the ~$6 / ~−$2.50 bands (see below) |
Why some sensors have dozens of flips and others just a few
Two reasons, both honest:
- History depth. The macro dials (dollar, yield curve, inflation, oil) are backfilled from FRED's public archives going back decades, so their flip lists are long. The six rotation ratios only show flips since Macro Lens began recording daily readings, so their histories are still short and growing. A short list is a young record, not missing data.
- How often they genuinely change. The slow structural dials move rarely — the yield curve can hold one state for years — so even a decades-long history may show only a handful of flips. The sector ratios move faster. A calm sensor with few changes is doing its job, not malfunctioning.
Check our work
Nothing here is a black box. Every ratio comes from free ETF closes you can pull from any source; every macro dial and the oil spread come straight from FRED (Federal Reserve Bank of St. Louis) under the series codes shown on each sensor's page. Take the same closes, compute the 21- and 50-day averages, apply the ±1% rule, and you will reproduce every state and every flip we publish. We show the source codes and the thresholds precisely so you can — and we'd rather you did.
The three macro dials — descriptive context
Alongside the six ratios, the engine reads three slower macro dials from the Federal Reserve's FRED database: the yield curve (10Y–2Y Treasury spread, T10Y2Y), inflation expectations (10-year breakeven, T10YIE), and the dollar (broad trade-weighted index, DTWEXBGS). Each is a band signal with hysteresis, carrying decades of backfilled flip history. They frame the conditions the ratios move inside, but they are descriptive context only — they do not change the six-ratio regime score.
The oil price sensor — is oil itself elevated?
The engine's newest sensor watches the price of Brent crude directly — the world oil benchmark, read daily from front-month ICE Brent futures (BZ=F), the same timely market feed the supply-shock sensor uses, with the free FRED spot series DCOILBRENTEU as a fail-open fallback. Like the dollar dial, it classifies Brent against its own trailing 200-day average with a hysteresis band (±3%, wider than the dollar's because oil is more volatile): elevated when Brent trades decisively above its trend, subdued when below.
Why a second oil sensor? Because the supply-shock spread and the oil price answer different questions. A broad shock that lifts Brent and WTI together — the early, risk-premium phase of a Hormuz scare — leaves the Brent−WTI gap normal even while oil spikes in the headlines. The price sensor is what puts that spike on the board. Together the two separate "oil is up on fear" (price elevated, gap normal) from "the physical plumbing is dislocating" (gap stressed). Descriptive context only — like the macro dials, it does not move the six-ratio regime score.
The oil supply-shock sensor — is the plumbing under stress?
This sensor watches one number: the gap between Brent (the world oil benchmark, priced at sea) and WTI (the U.S. benchmark, priced inland at Cushing, Oklahoma). Both are light, sweet crude and move together more than 95% of the time — so the information isn't in either price, it's in the spread between them. Think of two thermometers strapped to the same patient: one reads the global body, one reads the American one. When the readings diverge, the difference tells you where the stress is.
In the modern (post-2011) export era, that spread is loosely tethered near the cost of shipping a barrel from the U.S. Gulf Coast to a waterborne buyer — pipeline tariff, terminal fees, freight, insurance. When the gap runs much wider, it becomes profitable to load U.S. barrels onto tankers and sell them abroad; those exports flow until the gap closes again. That self-correcting export arbitrage is what makes an unusually wide gap a real signal rather than noise. But it is not a fixed anchor: the spread ranges widely with the export cycle and the state of the physical market. So rather than assume a single "normal" number, we set the bands from this exact series' own recent history.
The sensor reads two free, public futures series — front-month ICE Brent (BZ=F) and NYMEX WTI (CL=F), the same daily market feed the six ratios use — and classifies the spread into three states with hysteresis, so the reading doesn't chatter around a threshold. The thresholds are derived from the distribution of the BZ=F − CL=F spread itself (its recent five-year history), not from a narrative anchor — that is the "check us" promise made literal. FRED's DCOILBRENTEU − DCOILWTICO spot spread stays as a lagged cross-check and fail-open fallback; because FRED relays it from the EIA with about a week's delay, it was never a timely reading, so the live sensor prices off the futures tape and keeps FRED for reproducibility only. (Front-month futures run a few dollars wider than spot — a definition difference, not an error.)
- Stressed — the gap is unusually wide: a spread of roughly $5.50 (about the 85th percentile of its recent history) to enter, holding until it eases back below ~$4.50. Historically this has accompanied physical supply-chain stress.
- Normal — the spread sits in the broad middle of its historical range. The oil plumbing is functioning.
- Compressed — the gap is unusually narrow or inverted: at or below −$2.50 (about the 10th percentile), i.e. U.S. oil trading at or above world oil — usually a U.S.-specific supply squeeze or softer demand abroad.
A wide gap can have two very different causes, and the sensor tells them apart by the direction Brent itself is trending. If Brent is rising while the gap widens, the stress is a seaborne-supply threat (a Hormuz-type disruption to waterborne crude) — tagged risk-premium. If Brent is flat or falling while the gap widens, the cause is a U.S. storage glut — barrels piling up inland faster than they can reach the coast — tagged us-glut. The 2011–2013 Cushing bottleneck and the April 2020 negative-WTI episode were both glut events; the 2022 and 2025–26 disruptions were risk-premium events.
One essential caution, kept in every reading: a wide gap means supply-chain stress, not a promise that fuel prices spiral. Demand can absorb a shock — when a large importer draws down stockpiles instead of buying, prices can stay calm even with the plumbing under strain. This is descriptive context, not a forecast. Note also that the sensor now reads front-month futures (ICE Brent BZ=F, NYMEX WTI CL=F) — the timely market tape — rather than the ~week-lagged FRED spot series it used at launch: a reading a week behind the market is a worse failure than a slightly-less-canonical source. Front-month futures run a few dollars wider than spot; the FRED spot spread is kept as a lagged cross-check and fail-open fallback. We name the exact public symbols so anyone can check our reading against the same numbers.
Six ratios, three macro dials, and four physical-market sensors — the Brent oil price, the Brent−WTI supply-shock spread, Cushing hub inventories (weekly EIA), and refining stress (the 3-2-1 crack) — make up the full set of thirteen sensors.
The framework is published, versioned, and dated. The current version is v2.3. The full specification — including edge-case handling, aggregation rules, reproducibility instructions, and version history — is published in full on the framework page. We treat the framework as serious analytical infrastructure, not as a marketing artifact.
The AI synthesis layer
The AI receives the regime score, the supporting ratio data, and a small market snapshot. It does not receive prompts that ask it to predict, opine, or invent. It receives prompts that ask it to translate the structured regime data into prose in the Macro Lens voice.
The system prompts for the daily brief and the "Should I Worry?" tool both contain the same load-bearing instruction: you must not contradict the regime engine. If the regime is bullish with high confidence, the AI is forbidden to manufacture alarm. If the regime is transitional, the AI is required to explain the conflict in the data rather than pick a side. The voice is anchored against three reference samples: Stratechery, Apricitas Economics, and Howard Marks memos. It is not anchored against CNBC, Reddit, or financial Twitter.
Five things every AI output must include
- An explicit confidence level — high, medium, or low — with the reasoning behind it.
- A historical base rate for any predictive claim.
- Invalidation conditions — what new evidence would change the view.
- Identified, verifiable sources — every figure traces to a public series.
- A standard publisher's disclaimer — Macro Lens is a publication, not an advisor.
What we don't do
- We don't auto-execute trades. The product has no brokerage integration.
- We don't recommend specific securities. We address "the market" and "investors" only.
- We don't personalize advice. There is no user-account "what should I do with my portfolio" tool.
- We don't pretend to predict the future. We describe the present regime and the historical base rates that bound it.
- We don't allow the AI to override the engine. Ever.
- We don't hide AI provenance. Every brief carries a transparent badge — see below.
How briefs get published — transparent provenance, every time
Why we publish without mandatory human review
Every brief is generated by the rotation engine + AI synthesis and publishes on a scheduled cadence. We do not claim a human reviews every brief before it ships — that would be untrue, and it would contradict the central thesis of this publication, which is that the calibrated AI synthesis, constrained by the deterministic engine, is the analytical edge. The engine prevents the AI from contradicting the regime call. The AI carries the voice. The publication ships on time.
The two provenance badges on every brief
So readers always know exactly what they are reading, every brief carries a provenance badge:
- Macro Lens Certified — every brief gets this. Generated by the rotation engine + AI synthesis. AI provenance is explicit, not buried.
- Founder Reviewed — a subset of briefs. The founder ran a 90-second pipeline-integrity check: does the engine call match the prose, no forbidden language ("you", specific tickers, sensational words), voice intact, disclaimer present. May include minor edits. This check happens at any time — before publication, after publication, or any time within a rolling two-week window. The badge appears on the canonical web version the moment the review is recorded, regardless of whether the brief was already in subscribers' inboxes. This is process hygiene, not editorial second-guessing. The AI synthesis layer does the analytical work. The Founder Reviewed badge confirms the data pipeline didn't break and the methodology constraints held.
Why both states are honest
Both states are auditable on the brief page. Readers can always see which is which.
We treat AI provenance the way nutrition labels treat ingredients: not as a posture, not as a press release, but as a default visible to every reader on every brief.
The "Should I Worry?" tool
"Should I Worry?" responses are generated on demand by the AI synthesis layer and grounded in the same rotation engine that produces the daily brief. When a response says "credit markets are accepting risk," that claim traces deterministically to the HYG/TLT ratio above its 21-day average above its 50-day average, today, at the timestamp shown in the response. The grounding is reproducible and verifiable. Responses are produced individually, not pre-curated, so they do not carry the founder-review badge — the engine grounding is the integrity layer.
Data sources
- yfinance — daily ETF close prices (the six rotation ratios + the index snapshot).
- FRED — Federal Reserve Economic Data. Source of the three macro dials: the yield curve (
T10Y2Y), inflation expectations (T10YIE), and the broad dollar index (DTWEXBGS); the oil sensors' fallback crude series, Brent (DCOILBRENTEU) and WTI (DCOILWTICO) — the live oil reading is front-month futures (BZ=F/CL=F), see the oil-sensor sections; plus supporting series (CPI, unemployment, Fed funds rate) referenced in briefs as warranted. - Treasury.gov, SEC EDGAR, FOMC press releases — authoritative source documents referenced in briefs as warranted.
Macro Lens does not use proprietary data feeds, does not maintain advisory accounts, and has no order flow visibility. The methodology is reproducible from public data because it has to be.
What we mean by "AI for Good"
AI for Good, in the way Macro Lens uses the phrase, means the deliberate use of agentic AI to close a capability gap that was previously gated by wealth, in a way that materially improves the autonomy of ordinary people. The early warning system Bloomberg sells to hedge funds, rebuilt for the surgeon and the retired engineer, is the literal definition of the phrase as we use it. Press releases are not.
Methodology versioning
The framework is versioned. Current version is 2.3 — the revision that added two physical-market sensors to the Early Warning Signs group: Cushing hub inventories (weekly EIA working-stocks utilization) and refining stress (the 3-2-1 crack spread), bringing the framework to thirteen sensors. Version 2.2 added the oil price (Brent) sensor; version 2.1 added the oil supply-shock sensor (the Brent−WTI crude spread); version 2.0 added the three Tier-0 macro dials (yield curve, inflation expectations, the dollar) alongside the six rotation ratios. Future revisions — new sensors, threshold changes, momentum overlays — will be published here with effective dates and rationale. This is how a serious publication treats analytical infrastructure.
Questions and feedback
Direct everything via the contact form. Reasoned criticism is welcome. We update the methodology when the criticism is right.