def test_EURIBOR6M_initiation(initialize_test): tts = ql.Period(2, ql.Days) tte = ql.Period(10, ql.Years) swap = IRS(100, tts, tte, SwapDirection.PAYER, InterestRateIndex.EURIBOR6M) swap.get_price() swap.get_fixed_rate() swap.get_delta()
def test_get_bumped_copy(): bumpsize = 0.01 option = IRS(notional = 100000, timeToSwapStart=ql.Period(1, ql.Years), timeToSwapEnd=ql.Period(5, ql.Years), swapDirection=SwapDirection.PAYER, index=InterestRateIndex.EURIBOR6M, fixed_rate=0.01) option_copy = option.get_bumped_copy(bumpsize) assert option_copy.notional == option.notional * (1 + bumpsize) assert approx(option_copy.get_price(), abs=0.000001) == option.get_price() * (1 + bumpsize) asdf = 1 for option_sensi, option_copy_sensi in zip(option.get_simm_sensis(), option_copy.get_simm_sensis()): assert approx(float(option_sensi['amountUSD']) * (1 + bumpsize), abs=0.000001) == float( option_copy_sensi['amountUSD'])
def test_syncing_and_desyncing(): ca = CollateralAgreement(margining=Margining.MARGINED, initialMargining=InitialMargining.SIMM) ca.link_sa_ccr_instance(SA_CCR(ca)) trade1 = EquityOption(maturity=ql.Period(1, ql.Years), strike=EquitySpot.ADS.value.value() - 5) trade2 = IRS(notional=100, timeToSwapStart=ql.Period(2, ql.Days), timeToSwapEnd=ql.Period(1, ql.Years), swapDirection=SwapDirection.RECEIVER, index=InterestRateIndex.EURIBOR6M, fixed_rate=0.00) trade3 = IRS(notional=100, timeToSwapStart=ql.Period(2, ql.Days), timeToSwapEnd=ql.Period(1, ql.Years), swapDirection=SwapDirection.RECEIVER, index=InterestRateIndex.USDLIBOR3M, fixed_rate=0.01) ca.add_trades(trade1) ca.sync_im_model = False assert ca.vm_model.trades == [trade1] assert ca.im_model.trades == [trade1] ca.add_trades(trade2) assert ca.vm_model.trades == [trade1, trade2] assert ca.im_model.trades == [trade1] ca.sync_im_model = True assert ca.im_model.trades == [trade1, trade2] ca.add_trades(trade3) assert ca.vm_model.trades == [trade1, trade2, trade3] assert ca.im_model.trades == [trade1, trade2, trade3] # now check if the calculations also add up at least for VM ca = CollateralAgreement(margining=Margining.MARGINED, initialMargining=InitialMargining.NO_IM) ca.link_sa_ccr_instance(SA_CCR(ca)) npv_1 = fxConvert(trade1.currency, Currency.USD, trade1.get_price()) npv_2 = fxConvert(trade2.currency, Currency.USD, trade2.get_price()) npv_3 = fxConvert(trade3.currency, Currency.USD, trade3.get_price()) ca.add_trades(trade1) ca.sync_vm_model = False assert ca.get_C() == ca.get_vm_model().get_vm() == npv_1 != 0 ca.add_trades(trade2) assert ca.get_C() == npv_1 ca.sync_vm_model = True assert ca.get_C() == npv_1 + npv_2 ca.add_trades(trade3) assert ca.get_C() == npv_1 + npv_2 + npv_3 # a few sanity checks for SA_CCR ca = CollateralAgreement(margining=Margining.MARGINED, initialMargining=InitialMargining.SIMM) local_sa_ccr_model = SA_CCR(ca) ca.link_sa_ccr_instance(local_sa_ccr_model) assert local_sa_ccr_model.get_ead() == 0 ca.add_trades(trade1) ca.sync_im_model = False ca.sync_vm_model = False test_value = local_sa_ccr_model.get_ead() assert test_value > 0 assert local_sa_ccr_model.trades == [trade1] ca.add_trades(trade2) test_value_2 = local_sa_ccr_model.get_ead() assert ca.vm_model.trades == [trade1] assert ca.im_model.trades == [trade1] ca.sync_vm_model = True ca.sync_im_model = True ca.sync_sa_ccr_model = True test_value_3 = local_sa_ccr_model.get_ead() assert test_value_2 != test_value_3 assert local_sa_ccr_model.trades == [trade1, trade2] assert ca.vm_model.trades == [trade1, trade2] assert ca.im_model.trades == [trade1, trade2] ca.add_trades(trade3) test_value_4 = local_sa_ccr_model.get_ead() assert test_value_4 != test_value_3 assert local_sa_ccr_model.trades == [trade1, trade2, trade3] assert ca.vm_model.trades == [trade1, trade2, trade3] assert ca.im_model.trades == [trade1, trade2, trade3]