Skip to main content

Methodology: OL BDC Credit Spread 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 BDC Credit Spread 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 BDC Credit Spread Index is a single number that summarizes what private-credit lenders are charging borrowers, computed entirely from public filings. Business Development Companies (BDCs) disclose their loan books — every position, its fair value, and its interest terms — in a Schedule of Investments filed with the SEC each quarter. Oxford Ledge parses those schedules across its tracked BDC universe and rolls the per-loan spreads up into one fair-value-weighted average.

It answers a plain question: on the loans these lenders hold today, how much are they charging over the benchmark rate? A rising index means lenders are demanding more compensation for credit risk (tightening credit); a falling index means they are accepting less (loosening).

It is an Oxford Ledge Signal — our own aggregation of public SEC data, not a licensed third-party feed. That is deliberate: it means we can publish and cite it freely, and it measures something no vendor sells cleanly.

1. What it is NOT — and why the name matters

This index is not the ICE BofA US High Yield Option-Adjusted Spread, or any public high-yield or investment-grade bond index. We do not compute it, we are not licensed to redistribute those, and this is a different measurement. The differences are load-bearing, not cosmetic:

FeatureOL BDC Credit Spread IndexPublic HY/IG bond OAS
MarketPrivate credit (direct/middle-market loans)Public traded bonds
Price basisManager fair-value marks (book), filed quarterlyTraded prices, daily, option-adjusted
Spread typeContractual spread over the loan’s benchmark (e.g. SOFR + X): a weighted spread as filed (may include PIK at some filers) — see below.Model-derived option-adjusted spread
CadenceFiling season (quarterly, lagged)Daily

Because it is a distinct construct, we always name it “OL BDC Credit Spread Index” and never present it as, or next to, a public bond index in a way that implies equivalence. Reading a private-credit book spread as if it were a live high-yield OAS would be misleading — and Oxford Ledge’s first commitment is that a number is either honest or absent.

2. The universe

The index is computed over Oxford Ledge’s tracked BDC universe — the Business Development Companies whose Schedule of Investments we parse (48 active filers as of 2026-10-31; a BDC that has stopped filing is not one of them). Each BDC’s most recent parsed filing contributes its loan-level rows. The BDC directory lists the universe and each issuer’s filing date.

Only loan positions with a resolvable contractual spread and a positive fair value enter the calculation. Equity positions, sub-portfolios without rate terms, and rows whose spread cannot be parsed to a plausible value are excluded — an honest omission, never a filled-in guess.

3. Spread normalization (the units problem, solved once)

BDCs quote spreads inconsistently: one filer writes “SOFR + 5.75” (percent), another “SOFR + 575” (basis points), for the same economic loan. Averaging the raw as-filed figures would compare percent against basis points and produce nonsense. The index therefore reads a normalized spread, which expresses every spread in basis points over that row’s own benchmark.

One rule does the normalization; the stored figure, the read-side fallback and the backfill all apply it (the code is named in §9):

As-filed spread valueInterpretationNormalized
0 < s < 50percent-quoted (middle-market spreads run ~2–12%)×100 → bps
50 ≤ s ≤ 3000already basis pointsas-is
s ≤ 0 or s > 3000implausible / parse artifactNULL (excluded, never fabricated)

The as-filed spread is kept untouched as provenance (what the filing literally said) and because it is part of how we tell one loan from another; the normalized figure is the derived, comparable one the index reads.

What the spread is: the margin as filed, and the PIK leg

Every weighted-average spread on this site, this index included, is a weighted spread as filed (may include PIK at some filers). Many private-credit loans pay part of their interest in cash and part in kind — PIK (payment-in-kind), where the unpaid interest is added to the loan’s principal instead of being paid to the lender. A filing quotes such a loan with its margin and the PIK part beside it, for example “SOFR + 6.00% (PIK 2.50%)”. Filers do not all mean the same thing by that line. At some, 6.00% is the whole margin and 2.50% of it is paid in kind, so 3.50% is paid in cash. At others, 6.00% is paid in cash and the 2.50% in kind comes on top. Nothing in the text tells the two apart, so we do not split it: the index reads each margin as the filing states it and never adds or subtracts the PIK figure.

What that does to the number. Where a filer quotes the whole margin, a PIK-split loan enters at its all-in margin, cash and PIK together. Where a filer quotes only the cash margin, the loan enters at that margin and its PIK leg is not in the figure: a loan quoted “SOFR + 0.45% (PIK 2.30%)” enters at 45 basis points. That second kind is a real cohort, not a hypothetical: 112 rows in the parsed book sit below 50 bps because their filer quotes them that way. So the weighted average is neither a pure cash figure nor an all-in one. It weights the margins as filed, and a book with many PIK-split loans can read above or below its cash economics, depending on how its filer quotes them.

Why we do not publish a cash-only or an all-in figure instead. Either one needs the PIK leg separated from the margin, and the filings do not say which convention each line follows. A figure built on a guess about that convention would look more exact than it is, and PIK is a different economic claim from cash: it is not received until refinancing or exit, and it compounds into the principal of a borrower that often could not pay it in cash. Recording each filer’s convention as its own labelled field is the fix, and it is not built yet, so the published number is named for exactly what it is.

4. The weighting

The index is a fair-value-weighted average, not a simple mean of loans. Each position’s spread is weighted by its reported fair value, so a $200M senior loan influences the index more than a $2M one — the index reflects where the capital actually sits, not where the line items are.

For a set of qualifying positions i with normalized spread s_i (bps) and fair value fv_i:

index_bps = Σ(s_i × fv_i) / Σ(fv_i)

Fair value is each position’s reported fair value. Its units are checked with the same value-unit guard used across our BDC data before the weighting is trusted.

5. Seniority buckets and the headline

Credit risk is not uniform across a loan book, so the index is published both as a single headline and split by seniority class. The seniority field we store for each holding records a broad seniority class, not first versus second lien — its values are Senior Secured, Subordinated, and unclassified — so the two sub-indices are labeled for what that field says:

SeriesMeaning
OL BDC Credit Spread Index (headline)FV-weighted spread across all qualifying positions
Senior Secured sub-indexPositions the filing marks senior secured — the bulk of the book, tighter spreads
Subordinated sub-indexPositions the filing marks subordinated — wider spreads, more risk

The gap between the Subordinated and Senior Secured sub-indices is itself a signal: a widening gap says lenders are pricing subordination more steeply. Positions whose seniority is unclassified (a blank seniority field) still enter the headline but neither sub-index, and a row the filing records as equity enters neither.

How this differs from the BDC pages. The sub-indices read only the stored seniority class. The BDC pages go further: they classify each holding from its lien text or its security-type text (“First Lien Term Loan”, “Second Lien”, “Mezzanine”), which is how a page shows a 1L chip or a “Second Lien / Mezz” share. That finer split is only as good as the filing’s wording: where a filing states no lien for a holding, it stays unclassified, and when more than half of a book is unclassified the page’s one-line summary says the classification is incomplete instead of giving a senior-secured share. The index does not use the finer split yet.

6. Non-accrual handling

A loan on non-accrual (the borrower has stopped paying and the manager no longer books interest) still has a contractual spread on file, but that spread no longer reflects money changing hands. Including it would overstate what lenders are actually earning. The index therefore excludes non-accrual positions from the spread average, using each position’s non-accrual status as the filing marks it: on non-accrual, not on non-accrual, or not determined.

The share of the book on non-accrual is published separately as a companion stress figure (the seed of the OL Private-Credit Stress Index) — excluded from the spread, surfaced on its own, never silently dropped.

Detection caveat (honest limitation): non-accrual detection over the parsed book is currently sparse — most positions carry no non-accrual determination (their status is not determined, and we keep them in the spread rather than guess). The excluded count is therefore a floor on non-accrual activity, not a complete stress read; it will only tighten as detection coverage improves. We surface what is confirmed and label the rest undetermined rather than imply a clean zero.

7. Cadence, as-of, and staleness

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:

The index is never shown as a live or intraday number. A filing-lagged private-credit spread presented as “today’s” credit conditions would be dishonest; the as-of label is mandatory, not decorative.

8. Limitations (read before relying on it)

9. Provenance and reproducibility

Every input is a public SEC filing. The parse, normalization, and aggregation are Oxford Ledge’s own code, named here for anyone reproducing the figure: the Schedule-of-Investments parsers; the spread normalization (data/bdc_rate_parsers.spread_to_bps, stored as bdc_holdings.spread_bps, schema v155); non-accrual detection (data/bdc_non_accrual.py, stored as the tri-state bdc_holdings.non_accrual, schema v156); the seniority class (bdc_holdings.lien_position); and the index aggregation (pg_get_bdc_credit_spread_index in pg_db/queries/bdc_credit_index.py, Phase-1). 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-11-04The PIK section corrected: the spread is the margin as filed, which includes the PIK part at some filers; it had said the PIK leg was always left out. Code names moved to §9.