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)
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