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):
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:
Determine period yield (r): 0.065 / 2 = 0.0325
Determine total periods (n): 10 * 2 = 20
Calculate the present value of the face value: $1,000 / (1.0325)^20 ≈ $527.48
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';
}