Bond Fundamentals and Pricing › Clean Price, Dirty Price, and Accrued Interest

Michael BrenndoerferUpdated December 28, 20254 min read
Quantitative FinanceAll chapters
Part 2 of 15Equity and Fixed Income Markets
Chapter 11Bond Fundamentals and Pricing › Clean Price, Dirty Price, and Accrued Interest
Reading section 7 of 14 · Clean Price, Dirty Price, and Accrued Interest · 4 minSection 7 of 14 · 4 min

Book contents

Section 7 of 14 · 4 min read

Bond Fundamentals and Pricing › Clean Price, Dirty Price, and Accrued InterestOne section · Sections in this chapter7 / 14 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

In many conventional bond markets, the quoted clean price excludes accrued interest, while the full or dirty price includes it. Express both prices and accrued interest on the same face-value basis before adding them. Flat-trading, defaulted, and ex-coupon securities can follow different rules.

For a standard cum-coupon settlement, the buyer receives the upcoming coupon and compensates the seller for the accrued portion through the settlement price. Entitlement follows the security's record-date and ex-coupon rules, not simply ownership on payment day. Special settlement adjustments can apply when a trade falls between the record date and payment date.

For a regular fixed coupon period using the stated actual-days coupon-period fraction, accrued interest is calculated as:

Accrued Interest=Coupon Payment×Days Since Last CouponDays in Coupon Period\text{Accrued Interest} = \text{Coupon Payment} \times \frac{\text{Days Since Last Coupon}}{\text{Days in Coupon Period}}

where:

  • Coupon Payment\text{Coupon Payment}: the full periodic coupon amount (e.g., c×Fm\frac{c \times F}{m})
  • Days Since Last Coupon\text{Days Since Last Coupon}: calendar days from the last payment date to settlement
  • Days in Coupon Period\text{Days in Coupon Period}: total days in the current coupon period

The fraction represents the portion of the coupon period that has elapsed. This is the seller's "fair share" of the upcoming coupon. If exactly half the period has elapsed, the seller is entitled to half the coupon.

The dirty price is then:

Dirty Price=Clean Price+Accrued Interest\text{Dirty Price} = \text{Clean Price} + \text{Accrued Interest}

where:

  • Dirty Price\text{Dirty Price}: the full bond price on the stated face-value basis, before transaction charges
  • Clean Price\text{Clean Price}: the quoted market price (excludes accrued interest)
Why Quote Clean Prices?

Many markets quote clean prices because dirty prices jump discontinuously at coupon payment dates. The clean price provides a smoother series that better reflects changes in interest rates and credit conditions rather than the mechanical passage of time through a coupon period.

In[17]:
Code
def calculate_accrued_interest(
    face_value,
    coupon_rate,
    days_since_coupon,
    days_in_period,
    payments_per_year=2,
):
    """Regular nonnegative fixed coupon, using the stated coupon-day ratio.

    Apply actual contractual dates and ex-coupon rules outside this example.
    """
    face, coupon_rate, _, frequency, _ = _regular_bond_inputs(
        face_value, coupon_rate, 1, payments_per_year
    )
    elapsed = _finite_number(days_since_coupon, "days_since_coupon")
    period = _finite_number(days_in_period, "days_in_period")
    if period <= 0 or not 0 <= elapsed <= period:
        raise ValueError("Require positive period days and 0 <= elapsed <= period")
    return (face * coupon_rate / frequency) * (elapsed / period)


# Example: 6% coupon bond, 45 days into a 182-day period
face_value = 1000
coupon_rate = 0.06
days_since_coupon = 45
days_in_period = 182

accrued = calculate_accrued_interest(
    face_value, coupon_rate, days_since_coupon, days_in_period
)
clean_price = 1025.50  # Quoted market price
dirty_price = clean_price + accrued
Out[18]:
Console
Bond Settlement Calculation
----------------------------------------
Clean Price (quoted):    $1,025.50
Accrued Interest:        $7.42
Dirty Price (paid):      $1,032.92

Days since last coupon: 45
Days in coupon period:  182
Fraction of period:     24.73%

When the buyer receives the next coupon payment, it will compensate them for both the accrued interest they paid and the interest earned during the remaining portion of the period they held the bond.

Out[19]:
Visualization
Line chart showing sawtooth pattern of dirty price versus flat clean price over two coupon periods.
Illustrative clean and dirty prices over two 182-day coupon periods. The primary-colored clean-price line is assumed constant at \$1,020; the rose dirty-price line adds linearly accrued interest. The accrued component resets at each coupon boundary. This is a quotation-mechanics illustration, not a simulated no-arbitrage path at constant yield, and the daily sampled jump is slightly less than the full \$30 coupon.