Browse all readings

Research Readings normalized spread

Order book

normalized spread

Bid-ask spread in basis points divided by a frozen per-symbol-class divisor (btc 5, eth 10, large cap 25, mid cap 50, small cap 100), then censored at 1.0. Not a rank or percentile: 1.0 means the spread reached or passed its class divisor, and observed values sit far below 0.9. The symbol class is not exposed in this grammar, so one threshold means a different spread on different symbols and pooling across classes is invalid.

Observed
read at the minute itself
Unit
ratio
Valid range
0 to 1

In plain English

Measures the gap between the best ask and best bid relative to a fixed divisor for the symbol's class. It is a capped ratio, not a historical percentile.

How to read it

Spread in basis points is (ask - bid) / midpoint × 10,000. Divide by 5 for BTC, 10 for ETH, 25 for large caps, 50 for mid caps or 100 for small caps, and cap at 1. For BTC, 0.2 means a 1-basis-point spread; 1 means at least 5 basis points. Lower values mean tighter quotes relative to that divisor. The last valid quote holds; no valid quote means absent.

Constructed example · not historical data

Different spreads can reach the same ceiling

  • BTC: 1 bp spread / 5 bp divisor0.2
  • BTC: 5 bp spread / 5 bp divisor1.0
  • BTC: 8 bp spread / 5 bp divisor1.0 (capped)
Each full bar is the 1.0 ceiling. The reading preserves widening below 5 bp for BTC, but cannot distinguish 5 bp from 8 bp.

Why a researcher might use it

Compare recorded conditions with tighter or wider quoted spreads within a known class. The grammar does not expose class, so scope the markets explicitly.

What it does not prove

It does not measure execution cost for a particular order size, fees or deeper liquidity. Values at 1 hide further widening; pooling classes does not compare equal spreads. This frozen ratio is not the current live spread-HMM input.

Use in Research
Technical details

Field ID

feature.spread_norm

Valid query operators

at least, at most, between

Window operators: lowest, highest, average, latest or change in, over a trailing window.

Editable query preset

This preset is a starting point, not a recommendation. Edit it before running the search.

{
  "schema_version": "research_query.v2",
  "normalization_version": "archive_normalization.v1",
  "feature_version": "feature_defs.v1",
  "target": "record_occurrences",
  "where": {
    "all": [
      [
        "feature.spread_norm",
        "gte",
        0.5
      ],
      [
        "times.anchor_time",
        "gte",
        "2025-07-15T00:00:00.000Z"
      ]
    ]
  },
  "sort": [
    "times.anchor_time",
    "desc"
  ],
  "page": {
    "limit": 5,
    "cursor": null
  }
}

The search reports how often the record held this condition and what followed. It does not decide whether an idea works.

Related readings