示例#1
0
def test_duplicate_instrument(mocker):
    set_session()

    dollar_price_values = [[[{
        '$type': 'Risk',
        'val': 0.01
    }], [{
        '$type': 'Risk',
        'val': 0.02
    }], [{
        '$type': 'Risk',
        'val': 0.03
    }]]]
    mocker.return_value = [dollar_price_values]

    swap1 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.01, name='swap1')
    swap2 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.02, name='swap2')
    swap3 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.03, name='swap3')

    portfolio = Portfolio((swap1, swap2, swap3, swap1))
    assert portfolio.index('swap1') == (0, 3)
    assert portfolio.index('swap2') == 1

    prices: PortfolioRiskResult = portfolio.dollar_price()
    assert tuple(prices) == (0.01, 0.02, 0.03, 0.01)
    assert round(prices.aggregate(), 2) == 0.07
    assert prices[swap1] == (0.01, 0.01)
示例#2
0
def test_single_instrument(mocker):
    with MockCalc(mocker):
        swap1 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.0, name='10y@0')

        portfolio = Portfolio(swap1)
        assert portfolio.paths('10y@0') == (PortfolioPath(0), )

        with PricingContext(pricing_date=dt.date(2020, 10, 15)):
            prices: PortfolioRiskResult = portfolio.dollar_price()
        assert tuple(map(lambda x: round(x, 0), prices)) == (7391258.0, )
        assert round(prices.aggregate(), 0) == 7391258.0
        assert round(prices[swap1], 0) == 7391258.0
示例#3
0
def test_single_instrument(mocker):
    set_session()

    mocker.return_value = [[[[{'$type': 'Risk', 'val': 0.01}]]]]

    swap1 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.01, name='swap1')

    portfolio = Portfolio(swap1)
    assert portfolio.index('swap1') == 0

    prices: PortfolioRiskResult = portfolio.dollar_price()
    assert tuple(prices) == (0.01, )
    assert round(prices.aggregate(), 2) == 0.01
    assert prices[swap1] == 0.01
示例#4
0
def test_portfolio(mocker):

    with MockCalc(mocker):
        with PricingContext(pricing_date=dt.date(2020, 10, 15)):
            swap1 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.001, name='swap_10y@10bp')
            swap2 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.002, name='swap_10y@20bp')
            swap3 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.003, name='swap_10y@30bp')

            portfolio = Portfolio((swap1, swap2, swap3))

            prices: PortfolioRiskResult = portfolio.dollar_price()
            result = portfolio.calc((risk.DollarPrice, risk.IRDelta))

        assert tuple(sorted(map(lambda x: round(x, 0), prices))) == (4439478.0, 5423405.0, 6407332.0)
        assert round(prices.aggregate(), 2) == 16270214.48
        assert round(prices[0], 0) == 6407332.0
        assert round(prices[swap2], 0) == 5423405.0
        assert round(prices['swap_10y@30bp'], 0) == 4439478.0

        assert tuple(map(lambda x: round(x, 0), result[risk.DollarPrice])) == (6407332.0, 5423405.0, 4439478.0)
        assert round(result[risk.DollarPrice].aggregate(), 0) == 16270214.0
        assert round(result[risk.DollarPrice]['swap_10y@30bp'], 0) == 4439478.0
        assert round(result[risk.DollarPrice]['swap_10y@30bp'], 0) == round(result['swap_10y@30bp'][risk.DollarPrice],
                                                                            0)

        assert round(result[risk.IRDelta].aggregate().value.sum(), 0) == 278977.0

        prices_only = result[risk.DollarPrice]
        assert tuple(map(lambda x: round(x, 0), prices)) == tuple(map(lambda x: round(x, 0), prices_only))

        swap4 = IRSwap('Pay', '10y', 'USD', fixed_rate=-0.001, name='swap_10y@-10bp')
        portfolio.append(swap4)
        assert len(portfolio.instruments) == 4

        extracted_swap = portfolio.pop('swap_10y@20bp')
        assert extracted_swap == swap2
        assert len(portfolio.instruments) == 3

        swap_dict = {'swap_5': swap1,
                     'swap_6': swap2,
                     'swap_7': swap3}

        portfolio = Portfolio(swap_dict)
        assert len(portfolio) == 3
示例#5
0
def test_portfolio(mocker):
    set_session()

    dollar_price_values = [[[{
        '$type': 'Risk',
        'val': 0.01
    }], [{
        '$type': 'Risk',
        'val': 0.02
    }], [{
        '$type': 'Risk',
        'val': 0.03
    }]]]

    dollar_price_ir_delta_values = [[[{
        '$type': 'Risk',
        'val': 0.01
    }], [{
        '$type': 'Risk',
        'val': 0.02
    }], [{
        '$type': 'Risk',
        'val': 0.03
    }]],
                                    [[{
                                        '$type':
                                        'RiskVector',
                                        'asset': [0.01, 0.015],
                                        'points': [{
                                            'type': 'IR',
                                            'asset': 'USD',
                                            'class_': 'Swap',
                                            'point': '1y'
                                        }, {
                                            'type': 'IR',
                                            'asset': 'USD',
                                            'class_': 'Swap',
                                            'point': '2y'
                                        }]
                                    }],
                                     [{
                                         '$type':
                                         'RiskVector',
                                         'asset': [0.02, 0.025],
                                         'points': [{
                                             'type': 'IR',
                                             'asset': 'USD',
                                             'class_': 'Swap',
                                             'point': '1y'
                                         }, {
                                             'type': 'IR',
                                             'asset': 'USD',
                                             'class_': 'Swap',
                                             'point': '2y'
                                         }]
                                     }],
                                     [{
                                         '$type':
                                         'RiskVector',
                                         'asset': [0.03, 0.035],
                                         'points': [{
                                             'type': 'IR',
                                             'asset': 'USD',
                                             'class_': 'Swap',
                                             'point': '1y'
                                         }, {
                                             'type': 'IR',
                                             'asset': 'USD',
                                             'class_': 'Swap',
                                             'point': '2y'
                                         }]
                                     }]]]

    swap1 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.01, name='swap1')
    swap2 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.02, name='swap2')
    swap3 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.03, name='swap3')

    portfolio = Portfolio((swap1, swap2, swap3))

    mocker.return_value = [dollar_price_values]
    prices: PortfolioRiskResult = portfolio.dollar_price()
    assert tuple(sorted(prices)) == (0.01, 0.02, 0.03)
    assert round(prices.aggregate(), 2) == 0.06
    assert prices[0] == 0.01
    assert prices[swap2] == 0.02
    assert prices['swap3'] == 0.03

    mocker.return_value = [dollar_price_ir_delta_values]
    result = portfolio.calc((risk.DollarPrice, risk.IRDelta))

    assert tuple(result[risk.DollarPrice]) == (0.01, 0.02, 0.03)
    assert result[risk.DollarPrice].aggregate() == 0.06
    assert result[risk.DollarPrice]['swap3'] == 0.03
    assert result[risk.DollarPrice]['swap3'] == result['swap3'][
        risk.DollarPrice]

    assert result[risk.IRDelta].aggregate().value.sum() == 0.135

    prices_only = result[risk.DollarPrice]
    assert tuple(prices) == tuple(prices_only)

    swap4 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.01, name='swap4')
    portfolio.append(swap4)
    assert len(portfolio.instruments) == 4

    extracted_swap = portfolio.pop('swap2')
    assert extracted_swap == swap2
    assert len(portfolio.instruments) == 3

    swap_dict = {'swap_5': swap1, 'swap_6': swap2, 'swap_7': swap3}

    portfolio = Portfolio(swap_dict)
    assert len(portfolio) == 3
示例#6
0
def test_portfolio(mocker):
    set_session()

    dollar_price_values = [[[{
        'date': '2019-10-07',
        'value': 0.01
    }], [{
        'date': '2019-10-07',
        'value': 0.02
    }], [{
        'date': '2019-10-07',
        'value': 0.03
    }]]]

    dollar_price_ir_delta_values = [[[{
        'date': '2019-10-07',
        'value': 0.01
    }], [{
        'date': '2019-10-07',
        'value': 0.02
    }], [{
        'date': '2019-10-07',
        'value': 0.03
    }]],
                                    [[{
                                        'date': '2019-10-07',
                                        'marketDataType': 'IR',
                                        'assetId': 'USD',
                                        'pointClass': 'Swap',
                                        'point': '1y',
                                        'value': 0.01
                                    }, {
                                        'date': '2019-10-07',
                                        'marketDataType': 'IR',
                                        'assetId': 'USD',
                                        'pointClass': 'Swap',
                                        'point': '2y',
                                        'value': 0.015
                                    }],
                                     [{
                                         'date': '2019-10-07',
                                         'marketDataType': 'IR',
                                         'assetId': 'USD',
                                         'pointClass': 'Swap',
                                         'point': '1y',
                                         'value': 0.02
                                     }, {
                                         'date': '2019-10-07',
                                         'marketDataType': 'IR',
                                         'assetId': 'USD',
                                         'pointClass': 'Swap',
                                         'point': '2y',
                                         'value': 0.025
                                     }],
                                     [{
                                         'date': '2019-10-07',
                                         'marketDataType': 'IR',
                                         'assetId': 'USD',
                                         'pointClass': 'Swap',
                                         'point': '1y',
                                         'value': 0.03
                                     }, {
                                         'date': '2019-10-07',
                                         'marketDataType': 'IR',
                                         'assetId': 'USD',
                                         'pointClass': 'Swap',
                                         'point': '2y',
                                         'value': 0.035
                                     }]]]

    swap1 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.01, name='swap1')
    swap2 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.02, name='swap2')
    swap3 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.03, name='swap3')

    portfolio = Portfolio((swap1, swap2, swap3))

    mocker.return_value = dollar_price_values
    prices: PortfolioRiskResult = portfolio.dollar_price()
    assert tuple(sorted(prices)) == (0.01, 0.02, 0.03)
    assert round(prices.aggregate(), 2) == 0.06
    assert prices[0] == 0.01
    assert prices[swap2] == 0.02
    assert prices['swap3'] == 0.03

    mocker.return_value = dollar_price_ir_delta_values
    result = portfolio.calc((risk.DollarPrice, risk.IRDelta))

    assert tuple(result[risk.DollarPrice]) == (0.01, 0.02, 0.03)
    assert result[risk.DollarPrice].aggregate() == 0.06
    assert result[risk.DollarPrice]['swap3'] == 0.03
    assert result[risk.DollarPrice]['swap3'] == result['swap3'][
        risk.DollarPrice]

    expected = risk.aggregate_risk(
        [pd.DataFrame(v) for v in dollar_price_ir_delta_values[1]])
    assert result[risk.IRDelta].aggregate().equals(expected)

    prices_only = result[risk.DollarPrice]
    assert tuple(prices) == tuple(prices_only)
示例#7
0
def test_portfolio(mocker):
    set_session()

    dollar_price_values = [[[{
        'date': '2019-10-07',
        'value': 0.01
    }], [{
        'date': '2019-10-07',
        'value': 0.02
    }], [{
        'date': '2019-10-07',
        'value': 0.03
    }]]]

    dollar_price_ir_delta_values = [[[{
        'date': '2019-10-07',
        'value': 0.01
    }], [{
        'date': '2019-10-07',
        'value': 0.02
    }], [{
        'date': '2019-10-07',
        'value': 0.03
    }]],
                                    [[{
                                        'date': '2019-10-07',
                                        'marketDataType': 'IR',
                                        'assetId': 'USD',
                                        'pointClass': 'Swap',
                                        'point': '1y',
                                        'value': 0.01
                                    }, {
                                        'date': '2019-10-07',
                                        'marketDataType': 'IR',
                                        'assetId': 'USD',
                                        'pointClass': 'Swap',
                                        'point': '2y',
                                        'value': 0.015
                                    }],
                                     [{
                                         'date': '2019-10-07',
                                         'marketDataType': 'IR',
                                         'assetId': 'USD',
                                         'pointClass': 'Swap',
                                         'point': '1y',
                                         'value': 0.02
                                     }, {
                                         'date': '2019-10-07',
                                         'marketDataType': 'IR',
                                         'assetId': 'USD',
                                         'pointClass': 'Swap',
                                         'point': '2y',
                                         'value': 0.025
                                     }],
                                     [{
                                         'date': '2019-10-07',
                                         'marketDataType': 'IR',
                                         'assetId': 'USD',
                                         'pointClass': 'Swap',
                                         'point': '1y',
                                         'value': 0.03
                                     }, {
                                         'date': '2019-10-07',
                                         'marketDataType': 'IR',
                                         'assetId': 'USD',
                                         'pointClass': 'Swap',
                                         'point': '2y',
                                         'value': 0.035
                                     }]]]

    swap1 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.01, name='swap1')
    swap2 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.02, name='swap2')
    swap3 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.03, name='swap3')

    portfolio = Portfolio((swap1, swap2, swap3))

    mocker.return_value = dollar_price_values
    prices: PortfolioRiskResult = portfolio.dollar_price()
    assert tuple(sorted(prices)) == (0.01, 0.02, 0.03)
    assert round(prices.aggregate(), 2) == 0.06
    assert prices[0] == 0.01
    assert prices[swap2] == 0.02
    assert prices['swap3'] == 0.03

    mocker.return_value = dollar_price_ir_delta_values
    result = portfolio.calc((risk.DollarPrice, risk.IRDelta))

    assert tuple(result[risk.DollarPrice]) == (0.01, 0.02, 0.03)
    assert result[risk.DollarPrice].aggregate() == 0.06
    assert result[risk.DollarPrice]['swap3'] == 0.03
    assert result[risk.DollarPrice]['swap3'] == result['swap3'][
        risk.DollarPrice]

    expected = risk.aggregate_risk([
        risk.DataFrameWithInfo(PricingContext.current.pricing_key,
                               pd.DataFrame(v))
        for v in dollar_price_ir_delta_values[1]
    ]).reset_index(drop=True)
    actual = result[risk.IRDelta].aggregate().raw_value
    assert actual.equals(expected)

    prices_only = result[risk.DollarPrice]
    assert tuple(prices) == tuple(prices_only)

    swap4 = IRSwap('Pay', '10y', 'USD', fixed_rate=0.01, name='swap4')
    portfolio.append(swap4)
    assert len(portfolio.instruments) == 4

    extracted_swap = portfolio.pop('swap2')
    assert extracted_swap == swap2
    assert len(portfolio.instruments) == 3

    swap_dict = {'swap_5': swap1, 'swap_6': swap2, 'swap_7': swap3}

    portfolio = Portfolio(swap_dict)
    assert len(portfolio) == 3