Source code for finpricing.model.bond_basis_solver

from typing import Union
import scipy
from ..utils import *

BASIS_SOLVER_PARAMS = {
    'a'             : -0.1,
    'b'             : 0.1,
    'xtol'          : 1e-8,
    'rtol'          : 1e-8,
    'maxiter'       : 100,
    'full_output'   : False,
    'disp'          : True,
}

[docs] def BondBasisSolver( bond_pricer, valuation_date: Union[datetime.date, Date], dirty_price: float, survival_curve, discount_curve, recovery_rate: float = 0.4, basis_type: str='AdditiveZeroRates', basis_solver_params=BASIS_SOLVER_PARAMS ): def target_function(basis): price = bond_pricer.price_with_basis( valuation_date=valuation_date, survival_curve=survival_curve, discount_curve=discount_curve, recovery_rate=recovery_rate, basis=basis, basis_type=basis_type ) return price - dirty_price root = scipy.optimize.brentq( f=target_function, **basis_solver_params ) return root