Ejemplo n.º 1
0
def scalar_calc(mocker, priceable: Priceable, measure: risk.RiskMeasure):
    set_session()
    mocker.return_value = [[[[{'$type': 'Risk', 'val': 0.01}]]]]

    current = PricingContext.current
    result = priceable.calc(measure)
    assert result == 0.01
    risk_requests = (risk.RiskRequest(
        positions=(RiskPosition(instrument=priceable, quantity=1),),
        measures=(measure,),
        pricing_and_market_data_as_of=(PricingDateAndMarketDataAsOf(pricing_date=current.pricing_date,
                                                                    market=current.market),),
        parameters=RiskRequestParameters(raw_results=True),
        wait_for_results=True),)
    mocker.assert_called_with(risk_requests)
Ejemplo n.º 2
0
def price(mocker, priceable: Priceable):
    set_session()
    mocker.return_value = [[[{'value': 0.01}]]]

    result = priceable.dollar_price()
    assert result == 0.01
    risk_request = risk.RiskRequest(
        positions=(risk.RiskPosition(priceable, 1), ),
        measures=(risk.DollarPrice, ),
        pricing_location=PricingContext.current.market_data_location,
        pricing_and_market_data_as_of=PricingContext.current.
        _pricing_market_data_as_of,
        parameters=RiskRequestParameters(),
        wait_for_results=True)
    mocker.assert_called_with(risk_request)
Ejemplo n.º 3
0
def scalar_calc(mocker, priceable: Priceable, measure: risk.RiskMeasure):
    set_session()
    mocker.return_value = [[[[{'$type': 'Risk', 'val': 0.01}]]]]

    result = priceable.calc(measure)
    assert result == 0.01
    risk_requests = (risk.RiskRequest(
        positions=(risk.RiskPosition(priceable, 1), ),
        measures=(measure, ),
        pricing_location=PricingContext.current.market_data_location,
        pricing_and_market_data_as_of=PricingContext.current.
        _pricing_market_data_as_of,
        parameters=RiskRequestParameters(raw_results=True),
        wait_for_results=True), )
    mocker.assert_called_with(risk_requests)
Ejemplo n.º 4
0
def structured_calc(mocker, priceable: Priceable, measure: risk.RiskMeasure):
    set_session()

    values = {
        '$type':
        'RiskVector',
        'asset': [0.01, 0.015],
        'points': [{
            'type': 'IR',
            'asset': 'USD',
            'class_': 'Swap',
            'point': '1y'
        }, {
            'type': 'IR',
            'asset': 'USD',
            'class_': 'Swap',
            'point': '2y'
        }]
    }
    mocker.return_value = [[[[values]]]]

    expected = risk.sort_risk(
        pd.DataFrame([{
            'mkt_type': 'IR',
            'mkt_asset': 'USD',
            'mkt_class': 'Swap',
            'mkt_point': '1y',
            'value': 0.01
        }, {
            'mkt_type': 'IR',
            'mkt_asset': 'USD',
            'mkt_class': 'Swap',
            'mkt_point': '2y',
            'value': 0.015
        }]))

    current = PricingContext.current
    result = priceable.calc(measure)
    assert result.raw_value.equals(expected)
    risk_requests = (risk.RiskRequest(
        positions=(RiskPosition(instrument=priceable, quantity=1), ),
        measures=(measure, ),
        pricing_and_market_data_as_of=(PricingDateAndMarketDataAsOf(
            pricing_date=current.pricing_date, market=current.market), ),
        parameters=RiskRequestParameters(raw_results=True),
        wait_for_results=True), )
    mocker.assert_called_with(risk_requests)
Ejemplo n.º 5
0
def structured_calc(mocker, priceable: Priceable, measure: risk.RiskMeasure):
    set_session()

    values = [
        {'marketDataType': 'IR', 'assetId': 'USD', 'pointClass': 'Swap', 'point': '1y', 'value': 0.01},
        {'marketDataType': 'IR', 'assetId': 'USD', 'pointClass': 'Swap', 'point': '2y', 'value': 0.015}
    ]
    mocker.return_value = [[values]]

    result = priceable.calc(measure)
    expected = risk.sort_risk(pd.DataFrame(values))
    assert result.equals(expected)
    risk_request = risk.RiskRequest(
        positions=(risk.RiskPosition(priceable, 1),),
        measures=(measure,),
        pricing_location=PricingContext.current.market_data_location,
        pricing_and_market_data_as_of=PricingContext.current._pricing_market_data_as_of,
        parameters=RiskRequestParameters(),
        wait_for_results=True)
    mocker.assert_called_with(risk_request)
Ejemplo n.º 6
0
 def _parameters(self) -> RiskRequestParameters:
     return RiskRequestParameters(csa_term=self.__csa_term, raw_results=True)
Ejemplo n.º 7
0
    def _calc(self):
        def run_request(request: RiskRequest, session: GsSession):
            calc_result = {}

            try:
                with session:
                    calc_result = provider.calc(request)
            except Exception as e:
                for risk_measure in request.measures:
                    measure_results = {}
                    for result_position in risk_request.positions:
                        measure_results[result_position] = str(e)

                    calc_result[risk_measure] = measure_results
            finally:
                self._handle_results(calc_result)

        from gs_quant.api.risk import RiskApi

        def get_batch_results(request: RiskRequest, session: GsSession,
                              batch_provider: RiskApi, batch_result_id: str):
            with session:
                results = batch_provider.get_results(request, batch_result_id)
            self._handle_results(results)

        batch_results = []
        pool = ThreadPoolExecutor(len(self.__risk_measures_by_provider_and_position)) if self.__is_async else None

        while self.__risk_measures_by_provider_and_position:
            provider, risk_measures_by_position = self.__risk_measures_by_provider_and_position.popitem()
            positions_by_risk_measures = {}
            for position, risk_measures in risk_measures_by_position.items():
                positions_by_risk_measures.setdefault(tuple(risk_measures), []).append(position)

            for risk_measures, positions in positions_by_risk_measures.items():
                risk_request = RiskRequest(
                    tuple(positions),
                    tuple(sorted(risk_measures, key=lambda m: m.name or m.measure_type.value)),
                    parameters=RiskRequestParameters(self.__csa_term),
                    wait_for_results=not self.__is_batch,
                    pricing_location=self.market_data_location,
                    scenario=MarketDataScenario(scenario=Scenario.current) if Scenario.current_is_set else None,
                    pricing_and_market_data_as_of=self._pricing_market_data_as_of,
                    request_visible_to_gs=self.__visible_to_gs
                )

                if self.__is_batch:
                    batch_results.append((provider, risk_request, provider.calc(risk_request)))
                elif pool:
                    pool.submit(run_request, risk_request, GsSession.current)
                else:
                    run_request(risk_request, GsSession.current)

        for provider, risk_request, result_id in batch_results:
            if pool:
                pool.submit(get_batch_results, risk_request, GsSession.current, provider, result_id)
            else:
                get_batch_results(risk_request, GsSession.current, provider, result_id)

        if pool:
            pool.shutdown(wait=not self.__is_async)
Ejemplo n.º 8
0
 def __parameters(self) -> RiskRequestParameters:
     return RiskRequestParameters(self.__csa_term)
Ejemplo n.º 9
0
 def _parameters(self) -> RiskRequestParameters:
     return RiskRequestParameters(csa_term=self.__csa_term, raw_results=True, \
                                  market_behaviour=self.__market_behaviour)