def test_reference_evaluation_data_changed(self): """Testing term structure against evaluation date change... """ quote = SimpleQuote() term_structure = FlatForward(settlement_days=self.settlement_days, forward=quote, calendar=NullCalendar(), daycounter=Actual360()) quote.value = 0.03 expected = [] for days in [10, 30, 60, 120, 360, 720]: expected.append( term_structure.discount(self.adjusted_today + days) ) Settings().evaluation_date = self.adjusted_today + 30 calculated = [] for days in [10, 30, 60, 120, 360, 720]: calculated.append( term_structure.discount(self.adjusted_today+ 30 + days) ) for i, val in enumerate(expected): self.assertAlmostEqual(val, calculated[i])
def test_relinkable_structures(self): discounting_term_structure = YieldTermStructure() settlement_days = 3 flat_term_structure = FlatForward(settlement_days=settlement_days, forward=0.044, calendar=NullCalendar(), daycounter=Actual360()) discounting_term_structure.link_to(flat_term_structure) evaluation_date = Settings().evaluation_date +100 self.assertEqual( flat_term_structure.discount(evaluation_date), discounting_term_structure.discount(evaluation_date) ) another_flat_term_structure = FlatForward(settlement_days=10, forward=0.067, calendar=NullCalendar(), daycounter=Actual365Fixed()) discounting_term_structure.link_to(another_flat_term_structure) self.assertEqual( another_flat_term_structure.discount(evaluation_date), discounting_term_structure.discount(evaluation_date) ) self.assertNotEqual( flat_term_structure.discount(evaluation_date), discounting_term_structure.discount(evaluation_date) )
def test_relinkable_structures(self): discounting_term_structure = YieldTermStructure(relinkable=True) settlement_days = 3 flat_term_structure = FlatForward(settlement_days=settlement_days, forward=0.044, calendar=NullCalendar(), daycounter=Actual360()) discounting_term_structure.link_to(flat_term_structure) evaluation_date = Settings().evaluation_date +100 self.assertEqual( flat_term_structure.discount(evaluation_date), discounting_term_structure.discount(evaluation_date) ) another_flat_term_structure = FlatForward(settlement_days=10, forward=0.067, calendar=NullCalendar(), daycounter=Actual365Fixed()) discounting_term_structure.link_to(another_flat_term_structure) self.assertEqual( another_flat_term_structure.discount(evaluation_date), discounting_term_structure.discount(evaluation_date) ) self.assertNotEqual( flat_term_structure.discount(evaluation_date), discounting_term_structure.discount(evaluation_date) )
date_today = Date(6,9,2011) date_payment = Date(6,10,2011) settlement_days = 2 settings.evaluation_date = date_today quote = SimpleQuote(value=0.03) term_structure = FlatForward( settlement_days = settlement_days, quote = quote, calendar = NullCalendar(), daycounter = Actual360() ) df_1 = term_structure.discount(date_payment) date_today = Date(19,9,2011) settings.evaluation_date = date_today date_payment = Date(19,10,2011) df_2 = term_structure.discount(date_payment) # df_1 and df_2 should be identical: print('rate: %f df_1: %f df_2 %f difference: %f' % (quote.value, df_1, df_2, df_2-df_1)) # the term structure registers a listener on the quote: a change in quote # triggers a lazy recalculation of the discount factor quote.value = .05 df_2 = term_structure.discount(date_payment)
from quantlib.quotes import SimpleQuote from quantlib.termstructures.yields.api import FlatForward from quantlib.time.api import Actual360, Date, NullCalendar, TARGET logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) calendar = TARGET() date_today = Date(6,9,2011) date_payment = Date(6,12,2000) settlement_days = 2 quote = SimpleQuote(value=0.03) term_structure = FlatForward( settlement_days = settlement_days, quote = quote, calendar = NullCalendar(), daycounter = Actual360() ) try: df_1 = term_structure.discount(date_payment) print('rate: %f df_1: %f' % (quote.value, df_1)) except RuntimeError as exc: logger.error('Evaluation date and discount date issue.') logger.exception(exc)