def add_swap_initial_stub(task, initial_stub_date, indexes=None): """ :param initial_stub: datetime.datetime list indexes: ['EURLIBOR3M'] or ['EURLIBOR3M' , 'EURLIBOR6M'] """ assert 'vanillaSwap' in task, 'your task is not a swap task' start_date = task['vanillaSwap']['payerLeg']['schedule']['startDates'][0] task['vanillaSwap']['receiverLeg']['schedule']['fixingDates'] = [ generate_date(initial_stub_date) ] + task['vanillaSwap']['receiverLeg']['schedule']['fixingDates'] for leg in ['payerLeg', 'receiverLeg']: task['vanillaSwap'][leg]['schedule']['startDates'] = [ generate_date(initial_stub_date) ] + task['vanillaSwap'][leg]['schedule']['startDates'] for d in ['endDates', 'paymentDates']: task['vanillaSwap'][leg]['schedule'][d] = [ start_date ] + task['vanillaSwap'][leg]['schedule'][d] if indexes: task['vanillaSwap']['receiverLeg']['initialStub'] = indexes
def get_libor_flow_task(ccy, dsc_curve, asof, tenor, fixingDate, paymentDate, libor_curve=None): """ :str ccy: 'EUR' :curve dsc_curve: dict (check mkt data example) :datetime asof: datetime(2018, 5, 12) :int tenor: 6 :datetime fixingDate: datetime(2018, 5, 12) :datetime paymentDate: datetime(2018, 5, 12) :None, float or dict libor_curve: if None: flat curve 0.01 * tenor if float: flat curve float_value if dict: user defined libor curve """ task = _get_task_form(ccy, dsc_curve, asof) add_libor_curve(task, ccy, tenor, curve=libor_curve) task['liborFlow'] = { "liborIndex": f"{ccy}LIBOR{tenor}M", "fixingDate": generate_date(fixingDate), "paymentDate": generate_date(paymentDate) } return task
def add_swap_historical_fixing(task, ccy, tenor, date, value=None): if value is None: value = 0.1*tenor try: # if any of fixings exists task['vanillaSwap']['historicalData']['rateFixings'][f'{ccy}LIBOR{tenor}M'] = { "dates": [generate_date(date)], "fixings": [value] } except KeyError: # no fixings yet task['vanillaSwap']['historicalData'] = { 'rateFixings': {f'{ccy}LIBOR{tenor}M':{ "dates": [generate_date(date)], "fixings": [value]}} }
def add_swap_initial_stub(task, initial_stub_date, indexes=None): """ :param initial_stub: datetime.datetime """ start_date = task['vanillaSwap']['payerLeg']['schedule']['startDates'][0] task['vanillaSwap']['receiverLeg']['schedule']['fixingDates'] = [generate_date(initial_stub_date)] + task['vanillaSwap']['receiverLeg']['schedule']['fixingDates'] for leg in ['payerLeg', 'receiverLeg']: task['vanillaSwap'][leg]['schedule']['startDates'] = [generate_date(initial_stub_date)] + task['vanillaSwap'][leg]['schedule']['startDates'] for d in ['endDates', 'paymentDates']: task['vanillaSwap'][leg]['schedule'][d] = [start_date] + task['vanillaSwap'][leg]['schedule'][d] if indexes: task['vanillaSwap']['receiverLeg']['initialStub'] = indexes
def get_curve_task(ccy, curve, asof): return { "marketData": get_curve_mkt_data(ccy, curve), "settings": { "pricingDate": generate_date(asof), "hardware": "CPU", "numericalMethod": "INTRINSIC", "modelPrecision": "SECOND_ORDER" }, "requests": ['NPV']}
def get_libor_flow_task(ccy, dsc_curve, asof, tenor, fixingDate, paymentDate, libor_curve=None): """ :param ccy: :param dsc_curve: :param asof: :param tenor: :param fixingDate: :param paymentDate: :None, float or dict libor_curve: if None: flat curve 0.01 * tenor if float: flat curve float_value if dict: user defined libor curve """ task = get_curve_task( ccy, dsc_curve, asof) add_libor_curve(task, ccy, tenor, curve=libor_curve) task['liborFlow'] = { "liborIndex": f"{ccy}LIBOR{tenor}M", "fixingDate": generate_date(fixingDate), "paymentDate": generate_date(paymentDate)} return task
def get_bond_task(ccy, curve, asof, pmnt_date): """ :str ccy: 'EUR' :dict curve : example -> please execute '??service' command for curve example :datetime asof: datetime(2018, 5, 12) :datetime pmnt_date: datetime(2019, 5, 12) """ task = _get_task_form(ccy, curve, asof) task['fixedFlow'] = { "currency": ccy, "paymentDate": generate_date(pmnt_date) } return task
def get_bond_task(ccy, curve, asof, pmnt_date): task = get_curve_task(ccy, curve, asof) task['fixedFlow'] = {"currency": ccy, "paymentDate": generate_date(pmnt_date)} return task