The Bitcoin Credit Stack
rates are percent a year, continuously compounded · figures as of 2026-10-13 · read 2026-10-13 14:43 UTC
Indicators › Liquidation › Realised holding-period curve

Realised holding-period curve

holding-period-curve

The rate borrowers paid by how long their positions stayed open, from positions read one by one (survival over the book). Morpho Blue only today: it widens as other venues' positions are read one by one. Not a fixed-term curve.

Unitspercent by holding period (1–730 days)
Computed atnot stated in the payload
Historyserved

Methodology descriptive · IX1

What it measures. The rate borrowers paid against bitcoin collateral by how long their positions stayed open, from 1 day to two years: a realised holding-period curve, built by following each position read one by one (survival over the book).

What it is not. Not a fixed-term curve. Every rate on it is variable; the axis is how long positions were held, not a tenor anyone contracted. No venue in the registry quotes fixed tenors across the market today.

Coverage. One lending family today, whose positions are read one by one. It widens as the positions of other venues are read the same way; the payload names the venues it covers.

Sample. From 2024-02-02, weekly at first. A descriptive series: not a forecast and not a signal.

Reading

stratumfamily:morpho_blue
window_basistrailing_90d
requested_as_ofnull
as_of_date2026-10-13
venue_scope
venues
2 entries
[
  "morpho_blue_ethereum",
  "morpho_blue_base"
]
venue_familyMorpho Blue
chains
2 entries
[
  "ethereum",
  "base"
]
curveBTC-USD
statementComputed from Morpho Blue only, on Ethereum and Base. Not market-wide: Aave v3 is mid-backfill and Compound v3 and Sky are not ingested, so every cross-venue reading — including the shape question this programme calls Checkpoint B — remains open.
constructionThese venues issue no fixed-term loan and quote no fixed rate, so this curve is a construction. A point at tenor t is the debt-weighted annualised cost actually paid by positions whose REALISED HOLDING PERIOD fell in that band. Both halves are measured: the holding period is the reconstructed residence spell, and the cost is the growth of the market's borrow index across exactly that spell, checked against contract state at intermediate blocks. The tenor axis is therefore a realised holding period and NOT a maturity — the curve says what borrowing for about that long has cost, not that a rate can be locked for that long. Rates are continuously compounded; effective APY is exp(r) − 1.
survival_noteEvery point carries S(t), the share of borrowing reaching that tenor, from the same Kaplan-Meier estimator the rtd series is published from. It is there because bucketing by realised duration under-populates the long tenors with exactly the positions that have not finished yet — the same censoring that puts the naive median at 11.0 days against a survival-adjusted 84.5. On the trailing basis S(t) is length-biased upward, because conditioning on having been alive in the window over-samples long-lived positions; the cumulative basis carries the unbiased reading.
basis_notePositions open at some point in the 90 days before the as-of date: the term structure prevailing then. This is the basis a replay should read.
rate_conventioncontinuously_compounded_annual
composition
12 entries
[
  {
    "tenor_days": 1,
    "debt_usd": 6022717.3762132395,
    "constituents": [
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.563374099643141,
        "debt_usd": 3393042.9792292346,
        "n_at_risk": 37
      },
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.4366259003568589,
        "debt_usd": 2629674.3969840044,
        "n_at_risk": 1445
      }
    ]
  },
  {
    "tenor_days": 3,
    "debt_usd": 16073285.236212498,
    "constituents": [
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.5091848148280324,
        "debt_usd": 8184272.766679007,
        "n_at_risk": 1933
      },
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.49081518517196765,
        "debt_usd": 7889012.469533491,
        "n_at_risk": 70
      }
    ]
  },
  {
    "tenor_days": 7,
    "debt_usd": 95442026.52447203,
    "constituents": [
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.8791579889142888,
        "debt_usd": 83908620.09715903,
        "n_at_risk": 89
      },
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.12084201108571122,
        "debt_usd": 11533406.427312993,
        "n_at_risk": 2348
      }
    ]
  },
  {
    "tenor_days": 14,
    "debt_usd": 38442654.891204126,
    "constituents": [
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.730249698921318,
        "debt_usd": 28072737.160037946,
        "n_at_risk": 4053
      },
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.26975030107868203,
        "debt_usd": 10369917.731166182,
        "n_at_risk": 163
      }
    ]
  },
  {
    "tenor_days": 30,
    "debt_usd": 53691608.95144355,
    "constituents": [
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.7263160942651239,
        "debt_usd": 38997079.70842285,
        "n_at_risk": 5648
      },
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.27368390573487605,
        "debt_usd": 14694529.243020706,
        "n_at_risk": 157
      }
    ]
  },
  {
    "tenor_days": 60,
    "debt_usd": 33220723.557178218,
    "constituents": [
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.8827241502458955,
        "debt_usd": 29324734.972563945,
        "n_at_risk": 3812
      },
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.11727584975410456,
        "debt_usd": 3895988.5846142746,
        "n_at_risk": 154
      }
    ]
  },
  {
    "tenor_days": 90,
    "debt_usd": 242057222.56861728,
    "constituents": [
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.521981341304923,
        "debt_usd": 126349353.70891114,
        "n_at_risk": 534
      },
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.47801865869507704,
        "debt_usd": 115707868.85970616,
        "n_at_risk": 10601
      }
    ]
  },
  {
    "tenor_days": 180,
    "debt_usd": 129514241.47850624,
    "constituents": [
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.8324018161476678,
        "debt_usd": 107807889.82369621,
        "n_at_risk": 6588
      },
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.16759818385233213,
        "debt_usd": 21706351.65481003,
        "n_at_risk": 262
      }
    ]
  },
  {
    "tenor_days": 270,
    "debt_usd": 143983765.65953663,
    "constituents": [
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.8524277982631273,
        "debt_usd": 122735764.34679289,
        "n_at_risk": 5578
      },
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.14757220173687266,
        "debt_usd": 21248001.31274374,
        "n_at_risk": 241
      }
    ]
  },
  {
    "tenor_days": 365,
    "debt_usd": 250530447.17855904,
    "constituents": [
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.9097755020320918,
        "debt_usd": 227926463.356198,
        "n_at_risk": 6922
      },
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.09022449796790812,
        "debt_usd": 22603983.82236101,
        "n_at_risk": 282
      }
    ]
  },
  {
    "tenor_days": 545,
    "debt_usd": 48970497.99113104,
    "constituents": [
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.5051934045297954,
        "debt_usd": 24739572.601659,
        "n_at_risk": 1526
      },
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.4948065954702045,
        "debt_usd": 24230925.389472038,
        "n_at_risk": 118
      }
    ]
  },
  {
    "tenor_days": 730,
    "debt_usd": 7650576.842717011,
    "constituents": [
      {
        "venue_id": "morpho_blue_ethereum",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.9951381409385608,
        "debt_usd": 7613380.816369011,
        "n_at_risk": 52
      },
      {
        "venue_id": "morpho_blue_base",
        "rate_mechanism": "algorithmic_utilisation",
        "share": 0.004861859061439133,
        "debt_usd": 37196.026348000094,
        "n_at_risk": 10
      }
    ]
  }
]
composition_noteWhich venues contribute at each tenor and at what weight, by debt — the same weighting the rate itself uses. A composite curve whose long end is one venue and whose short end is another is a different object at each tenor, and the line alone cannot show that. Every constituent carries its rate mechanism, because a tenor made mostly of an administered rate is not the same reading as one made of cleared prices.
points
12 entries
[
  {
    "tenor_days": 1,
    "tenor_days_hi": 3,
    "rate": 0.04831641582008816,
    "median_rate": 0.048074832521813896,
    "p25_rate": 0.04688363040661174,
    "p75_rate": 0.050249784882788306,
    "n_at_risk": 1482,
    "debt_usd_at_risk": 6022717.376213239,
    "survival": 0.9066405346176905
  },
  {
    "tenor_days": 3,
    "tenor_days_hi": 7,
    "rate": 0.04165821595480192,
    "median_rate": 0.04834697181566841,
    "p25_rate": 0.04749149873610127,
    "p75_rate": 0.05002434759054723,
    "n_at_risk": 2003,
    "debt_usd_at_risk": 16073285.236212492,
    "survival": 0.8857967246586531
  },
  {
    "tenor_days": 7,
    "tenor_days_hi": 14,
    "rate": 0.04718929199229825,
    "median_rate": 0.04880999364029755,
    "p25_rate": 0.047566599165253735,
    "p75_rate": 0.04905910142274238,
    "n_at_risk": 2437,
    "debt_usd_at_risk": 95442026.52447203,
    "survival": 0.8643416352330759
  },
  {
    "tenor_days": 14,
    "tenor_days_hi": 30,
    "rate": 0.04634212767719845,
    "median_rate": 0.048305679417037374,
    "p25_rate": 0.048096257676625634,
    "p75_rate": 0.048451067726380186,
    "n_at_risk": 4216,
    "debt_usd_at_risk": 38442654.89120412,
    "survival": 0.8421497468056403
  },
  {
    "tenor_days": 30,
    "tenor_days_hi": 60,
    "rate": 0.045546121672447926,
    "median_rate": 0.04781232953640322,
    "p25_rate": 0.0477011021342853,
    "p75_rate": 0.047878848996949226,
    "n_at_risk": 5805,
    "debt_usd_at_risk": 53691608.95144354,
    "survival": 0.817227831903383
  },
  {
    "tenor_days": 60,
    "tenor_days_hi": 90,
    "rate": 0.04712130892325984,
    "median_rate": 0.04790942985129327,
    "p25_rate": 0.047812731058444996,
    "p75_rate": 0.04805122114670149,
    "n_at_risk": 3966,
    "debt_usd_at_risk": 33220723.55717822,
    "survival": 0.793772607485941
  },
  {
    "tenor_days": 90,
    "tenor_days_hi": 180,
    "rate": 0.045179273720655486,
    "median_rate": 0.048021107718477445,
    "p25_rate": 0.04789702416826444,
    "p75_rate": 0.04813162448866189,
    "n_at_risk": 11135,
    "debt_usd_at_risk": 242057222.5686172,
    "survival": 0.7773944695654387
  },
  {
    "tenor_days": 180,
    "tenor_days_hi": 270,
    "rate": 0.04559956477254491,
    "median_rate": 0.0467701701641504,
    "p25_rate": 0.046493407906901846,
    "p75_rate": 0.04739635108636278,
    "n_at_risk": 6850,
    "debt_usd_at_risk": 129514241.47850628,
    "survival": 0.7458403675284369
  },
  {
    "tenor_days": 270,
    "tenor_days_hi": 365,
    "rate": 0.04773178050267233,
    "median_rate": 0.048656244671840404,
    "p25_rate": 0.047527911495066424,
    "p75_rate": 0.05017144102480989,
    "n_at_risk": 5819,
    "debt_usd_at_risk": 143983765.65953666,
    "survival": 0.7252342140042667
  },
  {
    "tenor_days": 365,
    "tenor_days_hi": 545,
    "rate": 0.05350688178501925,
    "median_rate": 0.05517956568168529,
    "p25_rate": 0.05359025807881466,
    "p75_rate": 0.05544089727818286,
    "n_at_risk": 7204,
    "debt_usd_at_risk": 250530447.17855898,
    "survival": 0.7082190310196936
  },
  {
    "tenor_days": 545,
    "tenor_days_hi": 730,
    "rate": 0.05000995146575195,
    "median_rate": 0.05503013704675051,
    "p25_rate": 0.054925059436644164,
    "p75_rate": 0.05509133791436024,
    "n_at_risk": 1644,
    "debt_usd_at_risk": 48970497.991131015,
    "survival": 0.6720274161779536
  },
  {
    "tenor_days": 730,
    "tenor_days_hi": 1100,
    "rate": 0.052409563770684106,
    "median_rate": 0.053759309849359595,
    "p25_rate": 0.05113418233750196,
    "p75_rate": 0.05510974030447286,
    "n_at_risk": 62,
    "debt_usd_at_risk": 7650576.842717011,
    "survival": 0.5945390893055708
  }
]

Where this comes from

REST
GET https://api.bitcoincreditstack.com/v1/market/curve
MCP
get_indicator({ id: "holding-period-curve" })
get_indicator({ id: "holding-period-curve", include_history: true })

The same figures, the same names and dates. Connect your AI →

The payload carries more than this page renders — the full nested structure, and for most indicators a daily history this page does not chart. That asymmetry is deliberate.

Ask for this indicator's reading and history in your own terms, by connecting.Connect your AI ↗