Пример #1
0
def test_finite_difference_params(mocker):
    nok_delta = risk.IRDelta(currency="NOK")
    local_ccy_delta = risk.IRDelta(currency='local')

    with MockCalc(mocker):
        res3 = swap_1.calc(risk.IRDelta)
        res5 = swap_1.calc((risk.Price, nok_delta))
        res6 = swap_1.calc((local_ccy_delta, nok_delta))
        res7 = swap_1.calc(
            risk.IRDelta(aggregation_level=AggregationLevel.Asset))

    assert isinstance(res5[risk.Price], FloatWithInfo)
    assert isinstance(res5[nok_delta], DataFrameWithInfo)
    assert res6[local_ccy_delta]['value'].size != res6[nok_delta]['value'].size
    assert res6[local_ccy_delta]['value'].size != res3['value'].size
    assert res6[nok_delta]['value'].size != res3['value'].size
    assert res7['mkt_asset'].size == 2
Пример #2
0
def test_risk_measure_setters():
    base_delta = risk.IRDelta

    usd_delta = risk.IRDelta(currency='USD')

    assert (usd_delta.parameters is not None)
    assert (usd_delta.parameters.currency == 'USD')

    local_usd_delta = usd_delta(local_curve=True)

    assert local_usd_delta.local_curve
    assert (usd_delta != local_usd_delta)

    assert (risk.IRDelta.parameters is None)
    assert (base_delta.parameters is None)
Пример #3
0
def test_adding_risk_results(mocker):
    with MockCalc(mocker):
        result1 = get_attributes(eur_port, risk.Price, no_frame=True)
        result2 = get_attributes(
            eur_port, (risk.IRDelta(aggregation_level=AggregationLevel.Asset,
                                    currency='local'), risk.Price),
            no_frame=True)
        result3 = get_attributes(
            swaption_port,
            (risk.IRDelta(aggregation_level=AggregationLevel.Asset,
                          currency='local'), risk.Price),
            no_frame=True)
        result4 = get_attributes(port1, risk.Price, no_frame=True)
        result5 = get_attributes(
            swaption_port,
            risk.IRVega(aggregation_level=AggregationLevel.Asset, ),
            no_frame=True)
        result6 = get_attributes(jpy_port, (risk.Price, ),
                                 'RollFwd',
                                 no_frame=True)
        result7 = get_attributes(jpy_port,
                                 risk.Price,
                                 'CurveScen1',
                                 no_frame=True)
        result8 = get_attributes(jpy_port, (risk.DollarPrice, risk.Price),
                                 'CurveScen2',
                                 no_frame=True)

        # (2020, 1, 14) to (2020, 1, 15)
        result9 = get_attributes(port1, risk.Price, 'Multiple', no_frame=True)
        # (2020, 1, 16) to (2020, 1, 17)
        result10 = get_attributes(port1,
                                  risk.Price,
                                  'Multiple2',
                                  no_frame=True)
        # (2020, 1, 14)
        result11 = get_attributes(port1, risk.Price, no_frame=True)
        # (2020, 1, 16), market_data_location='NYC'
        result12 = get_attributes(port1,
                                  risk.Price,
                                  'PricingCtx2',
                                  no_frame=True)
        # (2020, 1, 16), market_data_location='LDN'
        result13 = get_attributes(port1,
                                  risk.Price,
                                  'PricingCtx3',
                                  no_frame=True)

    # adding results with same portfolio but different risk measures
    add_1 = result3 + result5
    # adding results with different portfolio but same risk measures
    add_2 = result2 + result3
    # adding results with different portfolios and overlapping risk measures
    add_3 = result1 + result3
    # adding results with different portfolios and different risk measures
    add_4 = result1 + result5
    add_5 = result3 + result4

    # adding dates

    add_6 = result9 + result13
    add_7 = result11 + result13
    add_8 = result10 + result11
    add_9 = result9 + result10

    default_pivot_table_test(add_1, 'has_bucketed')
    default_pivot_table_test(add_2, 'has_bucketed')
    default_pivot_table_test(add_3, 'has_bucketed')
    default_pivot_table_test(add_4, 'has_bucketed')
    default_pivot_table_test(add_5, 'has_bucketed')
    default_pivot_table_test(add_6, 'dated')
    default_pivot_table_test(add_7, 'dated')
    default_pivot_table_test(add_8, 'dated')
    default_pivot_table_test(add_9, 'dated')

    # throw value error when adding results where at least one particular value is being calculated twice

    # adding results with same portfolio but overlapping risk measures
    with pytest.raises(ValueError):
        _ = result1 + result2

    # adding results with overlapping portfolios and different risk measures
    with pytest.raises(ValueError):
        _ = result2 + result4

    # adding results with overlapping portfolios and same risk measures
    with pytest.raises(ValueError):
        _ = result1 + result4

    # adding results with different scenarios
    with pytest.raises(ValueError):
        _ = result6 + result7
    with pytest.raises(ValueError):
        _ = result7 + result8

    # overlapping dates
    with pytest.raises(ValueError):
        _ = result9 + result11
    with pytest.raises(ValueError):
        _ = result10 + result13

    # adding results with different market locations
    with pytest.raises(ValueError):
        _ = result10 + result12
    with pytest.raises(ValueError):
        _ = result9 + result12
    with pytest.raises(ValueError):
        _ = result12 + result13
    with pytest.raises(ValueError):
        _ = result11 + result12