How to Calculate Coupon Rate from Yield

Bond Coupon Rate from Yield Calculator

Calculate the nominal coupon rate based on current market yield and bond price

Annual Semi-Annual Quarterly Monthly
Estimated Coupon Rate
0.00%

Annual Payment $0.00
Periodic Payment $0.00

How to Calculate Coupon Rate from Yield

In fixed income markets, the coupon rate is often fixed at issuance, while the Yield to Maturity (YTM) fluctuates based on market prices. However, if you know the current market price, the par value, and the yield, you can reverse-engineer the bond pricing formula to find the original coupon rate.

The Formula

The calculation is based on the present value of the bond's cash flows. To solve for the periodic coupon (C):

C = (Price – [Par / (1 + r)^n]) / [(1 – (1 + r)^-n) / r]

Where:

  • Price: Current Market Price of the bond.
  • Par: Face Value of the bond (usually $1,000).
  • r: Yield per period (Annual Yield / Payments per year).
  • n: Total number of periods (Years × Payments per year).

Real-World Example

Imagine you have a bond with 10 years to maturity, a Par Value of $1,000, and it is currently trading at a discount for $950. If the market is pricing this bond at a 6.5% yield with semi-annual payments:

  1. Determine period yield (r): 0.065 / 2 = 0.0325
  2. Determine total periods (n): 10 * 2 = 20
  3. Calculate the present value of the face value: $1,000 / (1.0325)^20 ≈ $527.48
  4. Calculate the periodic coupon: ($950 – $527.48) / 14.539 (annuity factor) ≈ $29.06
  5. Annualize the coupon: $29.06 × 2 = $58.12
  6. Coupon Rate: $58.12 / $1,000 = 5.81%

Yield vs. Coupon Rate

  • If Price < Par, then Yield > Coupon Rate (Discount).
  • If Price > Par, then Yield < Coupon Rate (Premium).
  • If Price = Par, then Yield = Coupon Rate.
function calculateCouponRate() { var price = parseFloat(document.getElementById('bondPrice').value); var par = parseFloat(document.getElementById('bondPar').value); var ytm = parseFloat(document.getElementById('yieldToMaturity').value) / 100; var years = parseFloat(document.getElementById('yearsToMat').value); var freq = parseInt(document.getElementById('payFreq').value); if (isNaN(price) || isNaN(par) || isNaN(ytm) || isNaN(years)) { alert("Please enter valid numbers in all fields."); return; } // r = yield per period var r = ytm / freq; // n = total periods var n = years * freq; // Present value of face value factor var pvFactor = Math.pow(1 + r, -n); // Annuity factor for coupons var annuityFactor; if (r === 0) { annuityFactor = n; } else { annuityFactor = (1 – pvFactor) / r; } // Calculate periodic coupon payment var periodicCoupon = (price – (par * pvFactor)) / annuityFactor; // Annualized figures var annualCouponAmount = periodicCoupon * freq; var couponRate = (annualCouponAmount / par) * 100; // Display results document.getElementById('finalCouponRate').innerHTML = couponRate.toFixed(3) + "%"; document.getElementById('annualPayout').innerHTML = "$" + annualCouponAmount.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById('periodicPayout').innerHTML = "$" + periodicCoupon.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); document.getElementById('resultContainer').style.display = 'block'; }

Leave a Comment