Skip to main content

Methodology: OL Private-Credit Stress Index

This page is the methodology specification for an index that is being built, not yet a live figure. It documents exactly how the OL Private-Credit Stress Index will be computed so the method can be reviewed before any number is published. When the index goes live, this banner is removed and the page becomes its permanent methodology of record. See all methodology pages.

What this index is

The OL Private-Credit Stress Index is a single number that summarizes how much of the private-credit book has stopped paying, computed entirely from public filings. Business Development Companies (BDCs) disclose their loan books — every position, its fair value, and whether it is on non-accrual — in a Schedule of Investments filed with the SEC each quarter. Oxford Ledge parses those schedules across its tracked BDC universe and reports the fair-value share of the book flagged non-accrual.

It is the companion stress figure to the OL BDC Credit Spread Index: the spread index measures what lenders are charging; this measures where the losses are landing. It answers a plain question: of every dollar of loan value these lenders hold, how much sits on borrowers that have stopped paying interest?

It is an Oxford Ledge Signal — our own aggregation of public SEC data, not a licensed third-party feed.

Read the rate as a floor, not a census. Non-accrual is disclosed inconsistently across filings, so most parsed positions carry no non-accrual determination at all. The index counts only the positions positively flagged on non-accrual and treats undetermined positions as not-flagged — so the published rate is a lower bound on true stress, bounded by how much of the book actually carries a determination. Every value ships with a detection-coverage figure and a detection-limited flag that say exactly how complete that determination is. This is the single most important honesty caveat on the page.

1. What it is NOT

This index is not a licensed vendor credit-stress or default index, and it is not a live or tradeable series. It is a book-marked, filing-lagged read of one segment of the credit market:

Because it is a distinct construct, we always name it “OL Private-Credit Stress Index” and never present it as a licensed default/stress index.

2. The universe

The index is computed over Oxford Ledge’s tracked BDC universe — the Business Development Companies whose Schedule of Investments we parse. Each BDC’s most recent parsed filing contributes its loan-level rows. The Private Credit Directory lists the universe and each issuer’s filing date.

Every position with a positive reported fair value enters the denominator. Positions with no resolvable fair value are excluded — an honest omission, never a filled-in guess.

Recency floor. A BDC’s “most recent filing” can be a stale final book from a filer that has since wound down. To keep the index a read of current conditions, only positions whose filing period falls within the last 15 months are included; a wound-down filer’s two-year-old final book is dropped rather than averaged in.

3. Construction

For the most recent filing per BDC, let fv_i be a position’s reported fair value and let a position be non-accrual when the tri-state bdc_holdings.non_accrual column (schema v156) is TRUE. The headline rate is the fair-value share on non-accrual:

non_accrual_rate = Σ(fv_i : non_accrual) / Σ(fv_i)

The non_accrual column is a nullable tri-state: TRUE = positively on non-accrual; FALSE = positively not; NULL = undetermined. Only TRUE positions count toward the numerator; everything with a positive fair value counts toward the denominator.

Detection coverage (the floor caveat, quantified). Because NULL (undetermined) is by far the most common value in practice, the numerator can only ever catch positions positively flagged — so the rate is a floor. Every value therefore carries a detection block: coverage is the fair-value share of the book that carries an affirmative determination (TRUE or FALSE, i.e. not NULL), and detection_limited is set when that coverage is below half the book. A low coverage with a low rate means “little detected stress and little detection” — not “a clean book”. A real book with zero confirmed non-accruals reports a 0.0% floor with detection_limited set, never a fake-clean absence.

The rate is also published split by lien seniority — a Senior Secured non-accrual rate and a Subordinated non-accrual rate — using the same buckets as the spread index. These track the actual lien_position vocabulary the filings encode (Senior Secured / Subordinated, with other/unlabeled positions counting toward the headline but neither sub-bucket); we deliberately do not label them “first lien / junior”, which would overstate the source’s granularity. A subordinated rate rising faster than the senior rate is a subordinated-book stress signal.

The count and total fair value of non-accrual positions are reported alongside the rate, so the reader sees the raw magnitude, not only the ratio.

4. Cadence, as-of, and coverage

BDCs file quarterly, and a Schedule of Investments is disclosed weeks after the quarter it describes. The index is therefore a filing-season series, not a daily one. Every published value carries:

5. Limitations (read before relying on it)

6. Provenance and reproducibility

Every input is a public SEC filing. The parse, non-accrual detection (v156 / data/bdc_non_accrual.py), and the stress aggregation (pg_db/queries/bdc_stress_index.py, Phase-1) are Oxford Ledge’s own code. Because it is a substantial first-party aggregation over thousands of parsed positions — not a copy of any source series — the resulting index is an Oxford Ledge Signal we own and may publish and cite freely.

Changelog

DateChange
2026-07-21Methodology drafted (Phase-1 specification). Index not yet live.
2026-07-21Hardened for the CHAOS+DATA_CZAR real-PG sparsity finding: rate labeled a detection-limited floor with a published detection.coverage / detection_limited disclosure; lien split relabeled Senior Secured vs Subordinated (tracks the actual filing vocabulary); 15-month recency floor added to drop wound-down filers.