def equity(model, scenario_num=1000, maxyear=3, moment_match=False, frequency=xen.TimeGridFrequency.Day): if not isinstance(model, xen.Eq1FModel): raise Exception('Eq1FModel Type is needed') scenSetID = 'test_set' scenID = 'equity_test_scen' resultID = 'equity_test_result' scenSet = xen.ScenarioSet(scenSetID) scen = xen.Scenario(scenID, resultID) scen.general.maxyear = maxyear scen.general.scenario_num = scenario_num scen.general.moment_match = moment_match scen.general.frequency = frequency # setting additional calculation for martinagle test model.clear_calc() calc_randomZ = xen_c.RandomZ() model.add_calc(calc_randomZ) calc_uncon_expectation = xen_c.UnconditionalExpectation() model.add_calc(calc_uncon_expectation) scen.add_model(model) scenSet.add_scenario(scen) scenSet.generate() res = xen_r.ResultObj(scenSetID, scenID, resultID) equity = res.get_resultModel(model=model) equity_uncon_expectation = res.get_resultModel(model=model, calc=calc_uncon_expectation) rnd_z = res.get_resultModel(model=model, calc=calc_randomZ) plt.figure(1) plt.plot(res.timegrid.data['T'], equity.average(), label='equity_aver') plt.plot(res.timegrid.data['T'], equity_uncon_expectation.data[0], label='equity_analytic') plt.title('equity_aver vs equity_analytic') plt.xlabel('time (year)') plt.ylabel('value') plt.legend() plt.figure(2) plt.title('rand_z') plt.plot(rnd_z.average()) plt.show()
def rw_shortrate(model, scenario_num=200, maxyear=3, moment_match=False, frequency=xen.TimeGridFrequency.Day): if not isinstance(model, xen.Ir1FModel): raise Exception('Ir1FModel Type is needed') scenSetID = 'test_set' scenID = 'test_scen' resultID = 'test_result_' + model.model_name scenSet = xen.ScenarioSet(scenSetID) scen = xen.Scenario(scenID, resultID) scen.general.maxyear = maxyear scen.general.scenario_num = scenario_num scen.general.moment_match = moment_match scen.general.frequency = frequency # setting additional calculation for martinagle test model.clear_calc() # calc_randomZ = xen_c.RandomZ() # model.add_calc(calc_randomZ) calc_uncon_expectation = xen_c.UnconditionalExpectation() model.add_calc(calc_uncon_expectation) scen.add_model(model) scenSet.add_scenario(scen) scenSet.generate() res = xen_r.ResultObj(scenSetID, scenID, resultID) shortrate = res.get_resultModel(model=model) shortrate_uncon_expectation = res.get_resultModel( model=model, calc=calc_uncon_expectation) #rnd_z = res.get_resultModel(model=model, calc=calc_randomZ) i = 0 plt.figure(1) plt.plot(res.timegrid.data['T'], shortrate.average(), label='shor_aver') plt.plot(res.timegrid.data['T'], shortrate_uncon_expectation.data[0], label='short_analytic') plt.title('short_aver vs short_analytic') plt.xlabel('time (year)') plt.ylabel('rate (%)') plt.legend() plt.figure(2) plt.plot(res.timegrid.data['T'], shortrate.average() - shortrate_uncon_expectation.data[0], label='diff') plt.title('short_aver - short_analytic') plt.xlabel('time (year)') plt.ylabel('rate (%)') plt.legend() # plt.figure(3) # plt.title('rand_z') # plt.plot(rnd_z.average()) #print('aver Z : ' + rnd_z)) plt.show()
def mc_shortrate(model, scenario_num=200, maxyear=3, moment_match=False, frequency=xen.TimeGridFrequency.Day): if not isinstance(model, xen.Ir1FModel): raise Exception('Ir1FModel Type is needed') scenSetID = 'test_set' scenID = 'test_scen' resultID = 'test_result_' + model.model_name scenSet = xen.ScenarioSet(scenSetID) scen = xen.Scenario(scenID, resultID) scen.general.maxyear = maxyear scen.general.scenario_num = scenario_num scen.general.moment_match = moment_match scen.general.frequency = frequency # setting additional calculation for martinagle test model.clear_calc() # calc_randomZ = xen_c.RandomZ() # model.add_calc(calc_randomZ) calc_uncon_expectation = xen_c.UnconditionalExpectation() model.add_calc(calc_uncon_expectation) calc_mrk_discount = xen_c.FittingDiscount() model.add_calc(calc_mrk_discount) calc_model_discount = xen_c.ModelDiscount() model.add_calc(calc_model_discount) scen.add_model(model) scenSet.add_scenario(scen) scenSet.generate() res = xen_r.ResultObj(scenSetID, scenID, resultID) shortrate = res.get_resultModel(model=model) shortrate_uncon_expectation = res.get_resultModel( model=model, calc=calc_uncon_expectation) mrk_discount = res.get_resultModel(model=model, calc=calc_mrk_discount) model_discount = res.get_resultModel(model=model, calc=calc_model_discount) #rnd_z = res.get_resultModel(model=model, calc=calc_randomZ) print(mrk_discount.data[0]) # result_list['BASE_FITTINGDISCOUNT'].load(1, 1) # # shortrate_aver = result_list['BASE_nan'].averave() # shortrate = result_list['BASE_nan'].load() # shortrate_uncon_expectation = result_list['BASE_UNCONDITIONALEXPECTATION'].load() # mrk_discount = result_list['BASE_FITTINGDISCOUNT'].load() # discount = result_list['BASE_MODEL_DISCOUNTBOND'].averave() # mrk_spot = result_list['BASE_FITTINGSPOT'].averave() # mrk_forward = result_list['BASE_FITTINGFORWARD'].averave() # rnd_z = result_list['BASE_RANDOMZ'].averave() # print(shortrate_aver) # print(shortrate[0]) # print(shortrate[1]) # plt.plot(discount) # plt.plot(mrk_discount) # plt.plot(mrk_spot) i = 0 # for z, short_u_exp, short, spot, forward, mrk_disc, disc in zip(rnd_z, shortrate_uncon_expectation[0], # shortrate_aver, mrk_spot, mrk_forward, # mrk_discount[0], discount): # print ( # str(i) + ' : ' + str(z) + ' , ' + str(short_u_exp) + ' , ' + str(short) + ' , ' + str(spot) + ' , ' + str( # forward) + ' , ' + str(mrk_disc) + ' , ' + str(disc) + ' , ' + str(mrk_disc - disc)) # i += 1 # plt.plot(shortrate_aver) # plt.plot(shortrate_uncon_expectation[0]) plt.figure(1) plt.plot(res.timegrid.data['T'], shortrate.average(), label='shor_aver') plt.plot(res.timegrid.data['T'], shortrate_uncon_expectation.data[0], label='short_analytic') plt.title('short_aver vs short_analytic') plt.xlabel('time (year)') plt.ylabel('rate (%)') plt.legend() plt.figure(2) plt.plot(res.timegrid.data['T'], shortrate.average() - shortrate_uncon_expectation.data[0], label='diff') plt.title('short_aver - short_analytic') plt.xlabel('time (year)') plt.ylabel('rate (%)') plt.legend() # plt.plot(mrk_forward) # pos = 360 # print(mrk_discount[0][pos]) # print(discount[pos]) # # print(mrk_discount[0][pos] - discount[pos]) # # print('disc diff ' + str(pos) + ' : ' + str(mrk_discount[0][pos] - discount[pos])) plt.figure(3) plt.title('discount - mrk_discount') # plt.plot(mrk_discount[0]) # plt.plot(discount) plt.plot(mrk_discount.data[0] - model_discount.average()) # plt.figure(4) # plt.title('rand_z') # plt.plot(rnd_z.average()) #print('aver Z : ' + rnd_z)) plt.show()
def build_test_scen_set(): test_scen_set = xen.ScenarioSet('test_scen_set') scen_num = 1000 maxyear = 3 moment_match = False rnd_seed = 10 rnd_skip = 4096 * 2 test_model = xen_s.gbm('test_gbm') calc_uncon_expectation = xen_c.UnconditionalExpectation() test_model.add_calc(calc_uncon_expectation) # for crude rnd_crude_subtype_list = [ xen.RndSubType.MersenneTwister, xen.RndSubType.Knuth, xen.RndSubType.Lecuyer, xen.RndSubType.Ranlux3, xen.RndSubType.Ranlux4 ] for rnd_subtype in rnd_crude_subtype_list: scen = xen.Scenario('scen1', rnd_subtype + '_result') scen.general.scenario_num = scen_num scen.general.maxyear = maxyear scen.general.rnd_type = xen.RndType.Crude scen.general.rnd_subtype = rnd_subtype scen.general.rnd_seed = rnd_seed scen.general.rnd_skip = rnd_skip scen.general.moment_match = moment_match scen.add_model(test_model) test_scen_set.add_scenario(scen) # for sobol rnd_sobol_subtype_list = [ xen.RndSubType.Jaeckel, xen.RndSubType.SobolLevitan, xen.RndSubType.SobolLevitanLemieux, xen.RndSubType.JoeKuoD5, xen.RndSubType.JoeKuoD6, xen.RndSubType.JoeKuoD7, xen.RndSubType.Kuo, xen.RndSubType.Kuo2, xen.RndSubType.Kuo3 ] for rnd_subtype in rnd_sobol_subtype_list: scen = xen.Scenario('scen1', rnd_subtype + '_result') scen.general.scenario_num = scen_num scen.general.maxyear = maxyear scen.general.rnd_type = xen.RndType.Sobol scen.general.rnd_subtype = rnd_subtype scen.general.rnd_seed = rnd_seed scen.general.rnd_skip = rnd_skip scen.general.moment_match = moment_match scen.add_model(test_model) test_scen_set.add_scenario(scen) # for Halton scen = xen.Scenario('scen1', xen_r.RndType.Halton + '_result') scen.general.scenario_num = scen_num scen.general.maxyear = maxyear scen.general.rnd_type = xen.RndType.Halton scen.general.moment_match = moment_match scen.general.rnd_seed = rnd_seed scen.general.rnd_skip = rnd_skip scen.add_model(test_model) test_scen_set.add_scenario(scen) # for Faure scen = xen.Scenario('scen1', xen_r.RndType.Faure + '_result') scen.general.scenario_num = scen_num scen.general.maxyear = maxyear scen.general.rnd_type = xen.RndType.Faure scen.general.moment_match = moment_match scen.general.rnd_seed = rnd_seed scen.general.rnd_skip = rnd_skip scen.add_model(test_model) test_scen_set.add_scenario(scen) return test_scen_set