Skip to content

Market analysis

How the tape track is built — from the raw substrate up to the cross-sectional Market Analysis Report. Every step here is grounded in the publication's actual analyst pipeline. Where a step is deterministic, it's flagged as such; where an LLM writes prose, the constraints on that prose are stated.

The inputs

The analysis reads two substrates.

The market substrate. The base layer is built in-house from raw trade and L2 order-book streams — the publication constructs its own 1-minute candles in its own market database, rather than depending on a third-party price feed (an exchange-computed feed is used only as a fallback during ingestion downtime). Every price-derived field the analysis uses — returns over multiple horizons, realized volatility, moving averages, the structural levels, the regime classification — is computed from this substrate. It is the publication's source of truth, and responses attribute it as the publication's own substrate.

A naming note that matters for grounding: some feeds carry a -USDC suffix (e.g. BTC-USDC) due to Coinbase execution naming. In this system BTC-USDC is the same USD data as BTC-USD, renamed for execution routing — not a different market, not a stablecoin conversion. The analysis treats them as identical.

Derivatives — cross-exchange aggregates. Positioning context (funding, open interest, long/short, liquidations) is computed in-house and complemented with licensed cross-exchange data — aggregated across exchanges, not single-venue:

  • Open interest — cross-exchange aggregate (~24 exchanges), with per-exchange breakdown for spotting isolated bets.
  • Funding — an OI-weighted cross-exchange aggregate (latest close plus the window high/low). Per-exchange funding numbers are deliberately not cited; the data source no longer exposes them.
  • Liquidations — 24h long/short flow aggregated across 18 exchanges.
  • Long/short ratios — a global (retail) ratio and a top-trader (smart-money) ratio; when they disagree, that divergence is itself a signal.

Every derivatives figure carries source attribution, and a data-quality flag per field. A major perp showing exactly $0 liquidations or 0.0000 funding is treated as a suspected ingest failure, not a real market state — the analysis says "data unavailable this cycle" rather than asserting a false zero.

The deterministic direction signal

The directional read is not an LLM judgement. It is computed by a pure Python function — no IO, no network, no model call — so the same inputs always produce the same output. The brief is written after the signal is computed, and is required to be coherent with it.

The signal is a composite of four component scores, each normalised to a −100…+100 range:

Component What it reads
Trend Price vs the 50/200 moving averages, regime classification and its confidence, ATR-normalised returns over 1h/4h/24h, MACD confirmation.
Structure Price position within the structural range, daily pivot, active-level outcomes (held vs broken, with touch counts), and chart patterns (capped — patterns are timing signals, not directional calls).
Positioning Funding relative to trend (confirmation vs divergence), OI change, liquidation skew, smart-money divergence, and RSI extremes. Positioning confirms or warns — it never sets direction on its own.
Events Non-critical developments materialised from the story engine, weighted by phase (confirmation over trigger).

The components are combined using regime-aware weights — a trending_up market weights trend most heavily; a ranging market weights structure most heavily — and the weighted score maps to a direction by threshold:

  • above a calibrated positive threshold → long_bias
  • below a calibrated negative threshold → short_bias
  • between → neutral

If core market state is missing (no price, no regime), the signal returns no_signal — the honest absence of a call, not a third direction.

Critical-event override. A severe negative critical event (above a high-severity threshold) affecting a ticker — an exploit, a depeg — forces short_bias and a high conviction band, regardless of what the base score said. The base scores are retained for diagnostics, but the override is authoritative: the brief cannot reconstruct a bullish thesis over a confirmed exploit.

Conviction

Conviction is a float from 0.0 to 1.0 expressing confidence in the directional call — not in a trade, not in a price target. It is derived from the magnitude of the signal score: a stronger score (further from zero) yields a higher conviction band, and the brief's conviction must fall within the band the signal produced (enforced by a deterministic check).

This has a structural consequence worth stating plainly: a neutral read carries low conviction by construction. A balanced tape produces a near-zero score, which both makes the direction neutral and lands the conviction in the lowest band. A neutral call is an active statement that the tape is balanced — it carries information — but its conviction reflects how cleanly the substrates agree on "nothing here", not a hidden directional lean. For the full banding and the common misreadings, see conviction & direction.

Regime classification

Each ticker carries a regime — trending_up, trending_down, breakout, ranging, choppy, or neutral — with a confidence and a trend strength, computed from the candle substrate by a regime detector. Regime does two jobs: it is itself a trend-component input, and it selects the weight set the direction signal uses. The volatility percentile the brief cites comes from the substrate's baseline-adjusted calculation, not from the regime detector.

Structural levels

Levels are not invented by the brief writer. They are curated from the latest analysis cycles and read from a structured levels output. The brief may only cite a level that appears in that structure — structural levels (round majors) frame the picture, tactical levels (actively touched) show what's being tested now. Levels are watchpoints — structural inflections the publication is monitoring — not entries, targets, or stops.

The Fibonacci lookback windows

Where the brief is the snapshot (where things are now), the longitudinal research is the arc (how they got here). The publication computes a per-ticker analytical arc across a set of Fibonacci-spaced lookback windows:

seven Fibonacci-spaced windows, from a few hours out to about a week

Across that span the research tracks how the read evolved — the direction trajectory and whether conviction is rising, falling, stable, or volatile; the volatility trajectory (compressing, expanding, spiking then fading); and the key tape shifts (a support breaking, a regime transition). It is surfaced through get_ticker_research as structured fields only — categorical enums and structured arrays, no editorial framing. Pairing the snapshot with the arc is what turns "neutral, conviction 0.24" into "neutral now, but the read fell from long_bias over the last 24h after the level rejected".

The universe ranking

Once every tracked asset has a brief, the publication ranks the universe into what it internally calls the signal book — the artifact get_universe_ranking exposes. The ordering reflects how clear and actionable each read is — internally we call this tradeability, a composite of four factors:

tradeability = conviction × directionality × clarity of levels × pattern confirmation

Read it as how clear and actionable the read is — not how good the asset is. Several consequences follow directly from the formula:

  • A high-conviction neutral read ranks below a moderate-conviction directional read with clean levels: a confident "nothing here" is, by construction, not actionable.
  • neutral and no_signal names sort to the bottom — not because they are poor assets, but because there is no clear directional read to act on.
  • Clear structural levels and a confirmed pattern lift a name; vague, level-less reads sink.

This is the publication's ordering of its own analytical conviction across the board — a watchlist, not a buy/sell list and not a statement of investment merit. get_universe_ranking returns it with a directional distribution (how many names lean long / short / neutral) so a named leader can be read in context.

The MAR cross-sectional synthesis

The per-ticker briefs and the signal book feed the Market Analysis Report — one synthesis of the whole board, not a stack of per-ticker summaries.

The synthesis begins with a deterministic scorer. Before any LLM runs, the pipeline computes, from the clean substrate, a set of per-ticker rows (returns, realized-vol percentile, funding/OI/liquidations, regime, conviction/direction from the signal book, key levels) plus cross-sectional statistics — breadth, dispersion, conviction outliers (a dispersion rule against the universe median), and the majors-vs-alts group divergence. From these it scores a bounded set of observation candidates and tension candidates. This is the grounding boundary: every number the synthesis LLM may cite already exists in this deterministic payload, and the LLM may only narrate the candidates the scorer flagged — it cannot invent significance.

The LLM then writes the cross-sectional briefing — observations, tensions, an overall tone, and a confidence. Each brief's direction and conviction are locked facts: the synthesis respects them and explains what the pattern of outcomes means about the market, rather than re-litigating any single ticker. Confidence is then deterministically capped — it can only be lowered, never raised, below what the data supports: tensions present caps it at medium, a quiet market caps it at medium, degraded data completeness caps it at low.

Coverage is explicit. The MAR records which tickers were covered (briefs loaded and read) and which were excluded (in the universe ranking but with no substrate row this cycle). Excluded tickers are uncovered, not neutral — the report does not infer a direction for a ticker it didn't analyse.

The grounding, significance, and adversarial challenge gates the MAR passes are documented on the editorial gates page.