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.
| Units | percent by holding period (1–730 days) |
|---|---|
| Computed at | not stated in the payload |
| History | served |
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
| stratum | family:morpho_blue | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| window_basis | trailing_90d | ||||||||||
| requested_as_of | null | ||||||||||
| as_of_date | 2026-10-13 | ||||||||||
| venue_scope |
| ||||||||||
| construction | These 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_note | Every 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_note | Positions 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_convention | continuously_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_note | Which 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.