예제 #1
0
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())
예제 #2
0
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)
예제 #3
0
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
예제 #4
0
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'])
예제 #5
0
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()
예제 #6
0
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
예제 #7
0
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
예제 #8
0
def standard_swaption(standard_swap):
    swaption = Swaption(underlyingSwap=standard_swap, optionMaturity=360, tradeDirection=TradeDirection.LONG)
    return swaption