Module quantfin.swaps
Methods for calculating quantities associaled with inetrest-rate swaps.
Source code
"""Methods for calculating quantities associaled with inetrest-rate swaps."""
import numpy as np
def swap_rate(T, rs, x=0.5):
"""Calculates the fixed rate for an interest-rate swap.
Args:
T (float): Time to maturity of the swap.
rs (numpy.array): Current rates for relevant maturities. I.e. for a
time to maturity of 2 years with payments twice a year, the 6 month,
12 month, 18 month, and 24 months rates must be provided.
x (float, optional): Fraction of the year payments are made. Defualts to
semi-annually.
Returns:
The calculated swap rate as a float.
"""
taus = np.arange(x, T + x, x) # Payment dates
if len(taus) != len(rs):
raise ValueError(
"Not enough interest rates provided. Expected {} but got {}."
.format(len(taus), len(rs))
)
# F = (1 - exp(-tau_N * r_N)) / (x * sum_{i=1}^{N} exp(-tau_i * r_i))
F = 1 - np.exp(-taus[-1] * rs[-1]) # Numerator
denom = x * np.exp(-taus * rs).sum() # Denominator
F /= denom
return F
Functions
def swap_rate(T, rs, x=0.5)
-
Calculates the fixed rate for an interest-rate swap.
Args
T
:float
- Time to maturity of the swap.
rs
:numpy.array
- Current rates for relevant maturities. I.e. for a time to maturity of 2 years with payments twice a year, the 6 month, 12 month, 18 month, and 24 months rates must be provided.
x
:float
, optional- Fraction of the year payments are made. Defualts to semi-annually.
Returns
The calculated swap rate as a float.
Source code
def swap_rate(T, rs, x=0.5): """Calculates the fixed rate for an interest-rate swap. Args: T (float): Time to maturity of the swap. rs (numpy.array): Current rates for relevant maturities. I.e. for a time to maturity of 2 years with payments twice a year, the 6 month, 12 month, 18 month, and 24 months rates must be provided. x (float, optional): Fraction of the year payments are made. Defualts to semi-annually. Returns: The calculated swap rate as a float. """ taus = np.arange(x, T + x, x) # Payment dates if len(taus) != len(rs): raise ValueError( "Not enough interest rates provided. Expected {} but got {}." .format(len(taus), len(rs)) ) # F = (1 - exp(-tau_N * r_N)) / (x * sum_{i=1}^{N} exp(-tau_i * r_i)) F = 1 - np.exp(-taus[-1] * rs[-1]) # Numerator denom = x * np.exp(-taus * rs).sum() # Denominator F /= denom return F