示例#1
0
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
示例#2
0
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
示例#3
0
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]}}
        }
示例#4
0
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
示例#5
0
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']}
示例#6
0
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
示例#7
0
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
示例#8
0
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