Interest Rate Swap Valuation and Applications › Mark-to-Market Swap Valuation
Quantitative FinanceAll chapters Interest Rate Swap Valuation and Applications › Mark-to-Market Swap ValuationOne section · Sections in this chapter10 / 17 ↓
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
Once a swap is traded, its value can change as interest rates move. A par swap's initial zero value can become positive or negative, but some cash-flow states or curve moves leave it unchanged. Mark-to-market (MTM) valuation calculates the current model value of an existing position. Its applications include:
- Regulatory capital calculations for banks within the applicable framework, which distinguish current counterparty exposure from measures of potential future exposure
- Collateral management under Credit Support Annexes (CSAs), where parties exchange margin based on the current value of their positions
- Profit and loss attribution, where you need to understand how rate movements have affected portfolio value
- Risk management and hedging, where understanding current exposure is essential for making informed decisions about position adjustments
Valuation After Rate Changes
Consider a 5-year receive-fixed swap entered at a rate of 5.5%. After rates change, we need to revalue the swap using current market discount factors. The mechanics are identical to initial valuation: we calculate the present value of the fixed leg and subtract the floating leg value.
def value_existing_swap(notional, fixed_rate, remaining_payments, discount_factors):
"""Annual receive-fixed MTM at a matching base floating reset.
Factors cover all remaining annual coupon dates. The first fixing
agrees with this base curve; this function is a base valuation, not
a risk shock that is allowed to change an already observed fixing.
Equal hypothetical principal repayments cancel in the bond difference.
"""
discounts = np.asarray(discount_factors, dtype=float)
if (
discounts.ndim != 1
or not len(discounts)
or isinstance(remaining_payments, bool)
or not isinstance(remaining_payments, int)
or remaining_payments != len(discounts)
or not np.all(np.isfinite(discounts))
or np.any(discounts <= 0)
or not np.isfinite(notional)
or notional <= 0
or not np.isfinite(fixed_rate)
):
raise ValueError("Use finite inputs and a factor for every annual payment.")
fixed_bond = notional * (fixed_rate * np.sum(discounts) + discounts[-1])
floating_bond = notional
return fixed_bond - floating_bond
# Original swap parameters
original_swap = {
"notional": 50_000_000,
"fixed_rate": 0.055,
"original_tenor": 5,
"elapsed_years": 2,
}
# Remaining payments: 3 years
remaining_years = original_swap["original_tenor"] - original_swap["elapsed_years"]
# Hypothetical current curve; not an observed or dated market snapshot
new_maturities = np.array([1, 2, 3])
new_zero_rates = np.array([0.042, 0.044, 0.046]) # Rates are lower now
new_discount_factors = np.exp(-new_zero_rates * new_maturities)
# Value the swap
current_value = value_existing_swap(
original_swap["notional"],
original_swap["fixed_rate"],
remaining_years,
new_discount_factors,
)Mark-to-Market Swap Valuation ======================================================= Original Swap Terms: Notional: $50,000,000 Fixed Rate: 5.50% Original Tenor: 5 years Time Elapsed: 2 years Remaining: 3 years Hypothetical Current Zero Rates: 1-year: 4.20% 2-year: 4.40% 3-year: 4.60% Swap Valuation: Mark-to-Market Value: $1,105,690.30
In this annual receive-fixed example, a small parallel decline in the current continuous zero rates increases model MTM under the stated fixing convention. This is a model mark, not an executable takeover or unwind quote; actual amounts can differ because of bid-offer spreads, fees and contractual close-out terms.