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
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
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