def test_EURIBOR6MSwaption(initialize_test): fw_swap = IRS(notional=1000000, timeToSwapStart=ql.Period(1, ql.Years), timeToSwapEnd=ql.Period(20, ql.Years), swapDirection=SwapDirection.PAYER, index=InterestRateIndex.EURIBOR6M) swaption = Swaption(underlyingSwap=fw_swap, optionMaturity=ql.Period(1, ql.Years), tradeDirection=TradeDirection.SHORT) print(swaption.get_price()) print(swaption.get_delta())
def test_equality_with_simm_for_irs(): irs = IRS(notional=100, timeToSwapStart=ql.Period(2, ql.Days), timeToSwapEnd=ql.Period(1, ql.Years), swapDirection=SwapDirection.RECEIVER, index=InterestRateIndex.EURIBOR6M) ois = OIS(notional=100, timeToSwapStart=ql.Period(2, ql.Days), timeToSwapEnd=ql.Period(1, ql.Years), swapDirection=SwapDirection.RECEIVER, index=InterestRateIndex.FEDFUNDS) ul_swap = IRS(notional=100, timeToSwapStart=ql.Period(1, ql.Years), timeToSwapEnd=ql.Period(2, ql.Years), swapDirection=SwapDirection.RECEIVER, index=InterestRateIndex.USDLIBOR3M) swaption = Swaption(underlyingSwap=ul_swap, optionMaturity=ql.Period(1, ql.Years)) simm = SIMM() simm.add_trades([irs, ois, ul_swap, swaption]) ccpimm = CCPIMM() ccpimm.add_trades([irs, ois, ul_swap, swaption]) assert simm.get_im_post() != 0 assert ccpimm.get_im_post() != 0 assert approx(simm.get_im_post(), rel=0.00001) == ccpimm.get_im_post() * sqrt(10 / 5)
def test_im_post_vs_receive_option(): # When setting up at the money options that expire soon enough the long side of the option should bear significant less IM than the short side swap = IRS(notional=100, timeToSwapStart=ql.Period(6, ql.Months), timeToSwapEnd=ql.Period(1, ql.Years), swapDirection=SwapDirection.RECEIVER, index=InterestRateIndex.EURIBOR6M) options = [] swaption = Swaption(underlyingSwap=swap, optionMaturity=ql.Period(6, ql.Months), tradeDirection=TradeDirection.LONG) options.append(swaption) eqOpt1 = EquityOption(maturity=ql.Period(2, ql.Months), tradeType=TradeType.CALL, tradeDirection=TradeDirection.LONG) options.append(eqOpt1) for option in options: simm = SIMM() simm.add_trades(option) im_receive = simm.get_im_receive() im_post = -1 * simm.get_im_post() assert im_post * 1.1 < im_receive eqOpt2 = EquityOption(maturity=ql.Period(2, ql.Months), tradeType=TradeType.PUT, tradeDirection=TradeDirection.SHORT) simm = SIMM() simm.add_trades(eqOpt2) im_receive = simm.get_im_receive() im_post = -1 * simm.get_im_post() assert im_receive * 1.1 < im_post
def test_get_bumped_copy(): bumpsize = 0.01 swap = 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 = Swaption(underlyingSwap=swap, optionMaturity=ql.Period(1, ql.Years)) 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_get_im_swaption(): tts = ql.Period(2, ql.Years) tte = ql.Period(10, ql.Years) swap1 = IRS(600, tts, tte, SwapDirection.RECEIVER, InterestRateIndex.USDLIBOR3M) swaption1 = Swaption(swap1, ql.Period(2, ql.Years)) simm = SIMM() simm.add_trades(swaption1) im = simm.get_im_receive() swap2 = IRS(600, tts, tte, SwapDirection.RECEIVER, InterestRateIndex.EURIBOR6M) simm.add_trades(swap2) im = simm.get_im_receive()
def init_ca(): from instruments.interestRateInstrument.ois import OIS from instruments.interestRateInstrument.irs import IRS from instruments.equity_instruments.equityOption import EquityOption from collateralAgreement.collateralAgreement import CollateralAgreement from sa_ccr.sa_ccr import SA_CCR trade1 = OIS(fixed_rate=0.01) trade2 = IRS(fixed_rate=0.01) trade3 = Swaption() trade4 = EquityOption() # trade4 = EquityOption() ca = CollateralAgreement() ca.link_sa_ccr_instance(SA_CCR(ca)) ca.add_trades([trade1, trade2, trade3, trade4]) yield ca
def test_EUR_irvol_sensi(initialize_test): tts = ql.Period(2, ql.Years) tte = ql.Period(10, ql.Years) swap1 = IRS(600, tts, tte, SwapDirection.RECEIVER, InterestRateIndex.EURIBOR6M) swaption1 = Swaption(swap1, ql.Period(2, ql.Years)) sensis1 = swaption1.get_simm_sensis_irvol() tts = ql.Period(6, ql.Months) swap2 = IRS(600, tts, tte, SwapDirection.RECEIVER, InterestRateIndex.EURIBOR6M) swaption2 = Swaption(swap2, ql.Period(6, ql.Months)) sensis2 = swaption2.get_simm_sensis_irvol() asdf = 1
def standard_swaption(standard_swap): swaption = Swaption(underlyingSwap=standard_swap, optionMaturity=360, tradeDirection=TradeDirection.LONG) return swaption