コード例 #1
0
 maturitydt = maturities[cont]
 optionBarrierEuropean = OptionBarrierEuropean(strike, maturitydt,
                                               optionType, barrier,
                                               barrierType)
 barrier_option = optionBarrierEuropean.option_ql
 deltas = []
 gammas = []
 vegas = []
 tdeltas = []
 prices = []
 for spot in spot_range:
     underlying.setValue(spot)
     vol = black_var_surface.blackVol(
         daycounter.yearFraction(evalDate, maturitydt), spot)
     # process = evaluation.get_bsmprocess(daycounter, underlying, black_var_surface)
     process = evaluation.get_bsmprocess_cnstvol(daycounter, calendar,
                                                 underlying, vol)
     barrier_option.setPricingEngine(
         ql.BinomialBarrierEngine(process, 'crr', 400))
     delta = barrier_option.delta()
     gamma = barrier_option.gamma()
     deltas.append(delta)
     gammas.append(gamma)
     price = barrier_option.NPV()
     prices.append(price)
     # vol2 = black_var_surface.blackVol(daycounter.yearFraction(evalDate, maturitydt),spot+0.1)
     # process2 = evaluation.get_bsmprocess_cnstvol(daycounter,calendar,underlying,vol2)
     # barrier_option.setPricingEngine(ql.BinomialBarrierEngine(process2, 'crr', 800))
     # price2 = barrier_option.NPV()
     # vega = (price2-price)/(vol2-vol)
     # dsigma_ds = (vol2-vol)/0.1
     # print(vol,vol2,vega,dsigma_ds)
コード例 #2
0
        barrier = strike*(1+pct)
        endDate = calendar.advance(maturitydt,ql.Period(-1,ql.Days))
        ################Barrier Option Info#####################
        #print('barrier/strike',barrier/strike)

        optionBarrierEuropean = OptionBarrierEuropean(strike,maturitydt,optionType,barrier,barrierType)
        barrier_option = optionBarrierEuropean.option_ql
        hist_spots = []
        #########################################################
        # construct vol surface on last day's close prices.
        evaluation = Evaluation(begDate, daycounter, calendar)
        daily_close, black_var_surface, const_vol = get_vol_data(begDate,daycounter,calendar,contractType)
        #print('init spot : ',daily_close)
        underlying = ql.SimpleQuote(daily_close)
        process_svi_h = evaluation.get_bsmprocess(daycounter, underlying, black_var_surface)
        process_bs_h = evaluation.get_bsmprocess_cnstvol(daycounter, calendar, underlying, const_vol)

        price_bs, delta_bs = exotic_util.calculate_barrier_price(evaluation, optionBarrierEuropean, hist_spots,
                                                                 process_bs_h, engineType)
        try:
            price_svi, delta_svi = exotic_util.calculate_barrier_price(evaluation, optionBarrierEuropean, hist_spots,
                                                                       process_svi_h, engineType)
        except:
            continue
        init_svi = price_svi
        init_bs = price_bs
        init_spot = daily_close
        tradingcost_svi = abs(delta_svi)*daily_close*fee
        tradingcost_bs = abs(delta_bs)*daily_close*fee
        cash_svi = price_svi - delta_svi*daily_close - tradingcost_svi
        cash_bs = price_bs - delta_bs*daily_close - tradingcost_bs