Available Hire Me
← All Writing Fixed Income

Accrued Interest and Clean vs Dirty Prices — the ex-dividend tell in the gilt book

How clean and dirty gilt prices differ, why accrued interest goes negative in the ex-dividend window, and how to spot it in a daily report.

The price on the screen is not the price you pay.

Every gilt in the daily report carries a clean price and an accrued interest figure. Add them together and you have the dirty price — the cash that actually changes hands, per £100 of nominal. Get that wrong and your carry, your ranking, and your idea of which bonds are cheap are all quietly wrong. And once a year, twice a year, every gilt does something that turns the arithmetic negative.

Here is what it looks like in real numbers, and how to detect it in one field.

Clean, dirty, and what accrued interest is for

A gilt pays a fixed coupon twice a year. Between coupon dates, the seller has been holding the bond and earning that coupon; the buyer will collect the whole thing on the next payment date. So the buyer compensates the seller for the interest earned but not yet paid.

That compensation is accrued interest. The market therefore quotes the clean price — the price excluding accrued interest — so that a bond trading the day before a coupon date still looks comparable to the same bond trading the day after. What you settle is:

dirty price = clean price + accrued interest

Both components are printed in the report, so the dirty price is a subtraction-free addition away. From the 3 September gilt report:

Gilt Coupon Matures Clean Accrued Dirty
0 3/8% Treasury Gilt 2026 0.38% 2026-10-22 99.60 0.142 99.742
6% Treasury Stock 2028 6.00% 2028-12-07 103.39 1.525 104.915
4¾% Treasury Gilt 2035 4.75% 2035-10-22 97.26 1.804 99.064
4¼% Treasury Gilt 2046 4.25% 2046-12-07 82.04 1.080 83.120
2% Index-linked Treasury Stock 2035 2.00% 2035-01-26 241.96 0.217 242.177

Two things fall out of that table immediately.

Accrued interest scales with the coupon, not the price. The 6% 2028 has accrued of 1.525; the 0 3/8% 2026, on a coupon sixteen times smaller, has 0.142. A low-coupon bond therefore looks almost identical clean and dirty, while a high-coupon bond can differ by more than a point and a half. If you are comparing a portfolio using clean prices and settling using dirty prices, the gap between the two is not a constant — it moves with the coupon.

Index-linked gilts are not a special case. The 2% Index-linked 2035 shows a clean price of 241.96, because that price is RPI-adjusted. But the clean-plus-accrued identity still holds exactly: 242.177. The mechanics do not change just because the price does.

Then the accrued figure goes negative

Now look at 3¾% Treasury Gilt 2027 across nine consecutive reports:

Report Clean Accrued Days Gross yield Rank
2026-08-19 99.83 +1.732 166 3.99% 38
2026-08-24 99.84 −0.112 171 7.66% 1
2026-08-25 99.85 −0.102 172 7.67% —
2026-08-26 99.85 −0.061 173 7.76% 1
2026-08-27 99.84 −0.051 174 7.80% —
2026-08-28 99.84 −0.041 178 7.97% 1
2026-09-01 99.80 −0.031 179 8.07% 1

The Days column is the day-counter the report prints beside the accrued figure: days elapsed since the last coupon date. The accrued value itself is quoted to three decimal places, which is the precision the report publishes.

The clean price barely moves: 99.83 to 99.80 across the whole window. And yet the gross yield goes from 3.99% to 8.07% in nine business days, and the bond is suddenly ranked the cheapest in a 104-gilt book.

That is not an opportunity. That is the ex-dividend window.

What “ex-dividend” actually does

A gilt goes ex-dividend a few business days before each coupon date. Buy it during that window and you will not receive the upcoming coupon — the seller keeps it. So the compensation reverses direction: instead of the buyer paying the seller for interest earned, the seller effectively owes the buyer a whole coupon’s worth of value.

The accrued figure goes negative, and the dirty price falls below the clean price.

You can see the size of the swing in that table. Between 19 and 24 August the accrued steps from +1.732 to −0.112 — a 1.844-point move, which is essentially one full semi-annual coupon of 1.875 on a 3.75% gilt. Nothing was priced differently; the buyer simply stopped being entitled to the next coupon.

The negative figure then decays toward zero as the coupon date approaches, because the accrued interest the buyer forgoes converges on the full coupon. By 1 September it is −0.031, and by the coupon date itself the forgone interest has grown to the whole coupon — the adjustment nets to nothing and the gilt is back to a normal cum-dividend accrual.

The report’s own fields pin the window precisely: exDividendDate 26 August, nextCouponDate 7 September. Any settlement date in between is ex-dividend, and every gilt sharing that coupon date carries a negative accrued figure for the whole stretch.

It never happens to one gilt at a time

This is the part worth internalising. On 1 September, eleven gilts were simultaneously carrying negative accrued:

Gilt Clean Accrued Dirty
3¾% Treasury Gilt 2027 99.80 −0.031 99.769
4 3/8% Treasury Gilt 2028 99.84 −0.036 99.804
4 3/8% Treasury Gilt 2030 99.08 −0.036 99.044
4 1/8% Treasury Gilt 2031 97.61 −0.034 97.576
4 1/8% Treasury Gilt 2033 95.71 −0.034 95.676
4½% Treasury Gilt 2034 96.54 −0.037 96.503
4½% Treasury Gilt 2035 95.84 −0.037 95.803
4¼% Treasury Stock 2036 92.92 −0.035 92.885
4 5/8% Green Gilt 2037 94.57 −0.038 94.532
1¾% Treasury Gilt 2037 70.37 −0.014 70.356
4¼% Treasury Gilt 2039 88.56 −0.035 88.525

They are not a random eleven. Every one of them matures on either 7 March or 7 September, and UK gilts pay coupons on the anniversary of their maturity date — so all eleven share the same 7 September coupon date, all go ex-dividend together, and all carry negative accrued together.

Once you see that, the shape of the risk becomes obvious: this is a calendar event affecting a whole cohort of the book at once, not an idiosyncratic pricing anomaly on one bond. Anything that screens, ranks, or scores gilts will light up across that cohort simultaneously — which is exactly the mechanism behind the divergence flags in the previous post in this series.

Why most systems get this wrong

The failure mode is not exotic. It is a yield calculation that uses the clean price where it should use the dirty price, or a screen that treats the accrued column as information to display rather than a state to filter on.

Concretely:

  • A cheapest-to-deliver or relative-value screen will surface ex-div gilts as the best opportunities in the book, at the top of the ranking, precisely because their computed yields are inflated by hundreds of basis points that do not exist.
  • A carry or P&L calculation built on clean prices will show a step change on the ex-dividend date and another on the coupon date, both of which are settlement artefacts rather than economics.
  • Any comparison of two gilts in the same cohort is meaningless during the window: they are all distorted by roughly one coupon, so you are comparing two similarly wrong numbers.

The fix is not to model the ex-dividend window more precisely. It is to recognise it and exclude those gilts from whatever you were about to conclude.

The tell is one field

You do not need a coupon calendar, a record-date table, or a day-count implementation to detect this. A negative accrued interest figure is the ex-dividend signature. It cannot occur for any other reason: accrued interest is either a small positive number growing toward the coupon, or a negative number during the window between the ex-dividend date and the next payment.

Encode that, and the rest follows:

/** A single priced gilt as it appears in the daily report. */
public record PricedGilt(
        String isin,
        String name,
        BigDecimal couponRate,
        LocalDate maturity,
        BigDecimal cleanPrice,
        BigDecimal accrued) {

    /** What actually settles: the quoted clean price plus accrued interest. */
    public BigDecimal dirtyPrice() {
        return cleanPrice.add(accrued);
    }

    /**
     * A negative accrued figure means the next coupon has already gone
     * ex-dividend. A buyer today will not receive it, so the seller owes it
     * back instead of the other way round.
     */
    public boolean isExDividend() {
        return accrued.signum() < 0;
    }

    /** Yields are only comparable between gilts in the same state. */
    public boolean isScreenable() {
        return !isExDividend();
    }
}

And then, at the point where the book is actually used, make the exclusion explicit rather than relying on everyone downstream remembering:

List<PricedGilt> screenable = book.stream()
        .filter(PricedGilt::isScreenable)
        .toList();

int excluded = book.size() - screenable.size();
log.info("{} of {} gilts excluded: ex-dividend window", excluded, book.size());

Logging the count matters more than it looks. It is the difference between “the book has 104 gilts” and “the book has 104 gilts and 11 of them are currently unquotable” — and only one of those tells you when the window opens again.

What to take away

Accrued interest is the bridge between the quoted price and the settled price, and the clean-versus-dirty distinction exists so that coupons do not masquerade as price moves. Its sign tells you which way the bridge runs.

When accrued is positive, the buyer compensates the seller. When it is negative, the gilt is ex-dividend, the seller compensates the buyer, and the dirty price sits below the clean price. That single sign flip moves a gilt’s apparent yield by hundreds of basis points, and it happens to whole cohorts of the book at once, several times a year, on dates you can predict from the maturity calendar alone.

If you run a gilt book, or anything that screens fixed income, and want the clean-versus-dirty handling checked before it costs you a trade, send me the details.

Samuel Jackson

Samuel Jackson

Senior Java Back End Developer & Contractor

Senior Java Back End Developer — Betfair Exchange API specialist, Spring Boot, AWS, and event-driven architecture. 25+ years delivering high-performance systems across betting, finance, energy, retail, and government. Available for Java contracting.