Example #1
0
    def calc(self, priceable: Priceable,
             risk_measure: RiskMeasure) -> PricingFuture:
        futures = []

        provider = priceable.provider
        base_scenario = self._scenario
        parameters = self._parameters
        location = self.market.location
        base_market = self.market
        for date in self.__date_range:
            if date > self.pricing_date:
                scenario = MarketDataScenario(
                    CarryScenario(
                        int(
                            business_day_count(dt.datetime.today().date(),
                                               date)), self._roll_to_fwds))
                risk_key = RiskKey(provider, date, base_market, parameters,
                                   scenario, risk_measure)
                futures.append(self._calc(priceable, risk_key))
            else:
                market = CloseMarket(location=location,
                                     date=close_market_date(location, date))
                risk_key = RiskKey(provider, date, market, parameters,
                                   base_scenario, risk_measure)
                futures.append(self._calc(priceable, risk_key))

        return HistoricalPricingFuture(futures)
Example #2
0
    def _handle_results(cls, request: RiskRequest,
                        results: Union[Iterable, Exception]) -> dict:
        formatted_results = {}

        if isinstance(results, Exception):
            date_results = [{
                '$type': 'Error',
                'errorString': str(results)
            }] * len(request.pricing_and_market_data_as_of)
            position_results = [date_results] * len(request.positions)
            results = [position_results] * len(request.measures)

        for risk_measure, position_results in zip(request.measures, results):
            for position, date_results in zip(request.positions,
                                              position_results):
                for as_of, date_result in zip(
                        request.pricing_and_market_data_as_of, date_results):
                    handler = result_handlers.get(date_result.get('$type'))
                    risk_key = RiskKey(cls, as_of.pricing_date, as_of.market,
                                       request.parameters, request.scenario,
                                       risk_measure)

                    try:
                        result = handler(
                            date_result, risk_key,
                            position.instrument) if handler else date_result
                    except Exception as e:
                        result = ErrorValue(risk_key, str(e))
                        _logger.error(result)

                    formatted_results[(risk_key, position.instrument)] = result

        return formatted_results
Example #3
0
def _value_for_date(result: Union[DataFrameWithInfo, SeriesWithInfo], date: Union[Iterable, dt.date]) -> \
        Union[DataFrameWithInfo, ErrorValue, FloatWithInfo]:
    from gs_quant.markets import CloseMarket

    raw_value = result.loc[date]
    key = result.risk_key

    risk_key = RiskKey(
        key.provider, date if isinstance(date, dt.date) else tuple(date),
        CloseMarket(date=date,
                    location=key.market.location if isinstance(
                        key.market, CloseMarket) else None), key.params,
        key.scenario, key.risk_measure)

    if isinstance(raw_value, ErrorValue):
        return raw_value
    elif isinstance(raw_value, DataFrameWithInfo):
        raw_df = raw_value.raw_value.set_index('dates')
        return DataFrameWithInfo(raw_df.reset_index(
            drop=True) if isinstance(date, dt.date) else raw_df,
                                 risk_key=risk_key,
                                 unit=result.unit,
                                 error=result.error)
    elif isinstance(raw_value, SeriesWithInfo):
        return SeriesWithInfo(raw_value.raw_value,
                              risk_key=risk_key,
                              unit=result.unit,
                              error=result.error)
    else:
        return FloatWithInfo(
            risk_key,
            raw_value,
            unit=result.unit.get(date, '') if result.unit else None,
            error=result.error)
Example #4
0
    def _handle_results(cls, request: RiskRequest, results: Iterable) -> dict:
        formatted_results = {}

        for risk_measure, position_results in zip(request.measures, results):
            for position, date_results in zip(request.positions,
                                              position_results):
                for as_of, date_result in zip(
                        request.pricing_and_market_data_as_of, date_results):
                    handler = result_handlers.get(date_result.get('$type'))

                    # TODO Handle this better
                    market = LiveMarket(request.pricing_location) if isinstance(as_of.market_data_as_of, dt.datetime)\
                        else ClosingMarket(request.pricing_location, as_of.market_data_as_of)

                    risk_key = RiskKey(cls, as_of.pricing_date, market,
                                       request.parameters, request.scenario,
                                       risk_measure)

                    try:
                        result = handler(
                            date_result, risk_key,
                            position.instrument) if handler else date_result
                    except Exception as e:
                        result = ErrorValue(risk_key, str(e))
                        _logger.error(result)

                    formatted_results[(risk_key, position.instrument)] = result

        return formatted_results
Example #5
0
    def calc(self, instrument: InstrumentBase, risk_measure: RiskMeasure) -> PricingFuture:
        futures = []

        provider = instrument.provider
        base_scenario = self._scenario
        parameters = self._parameters
        location = self.market.location
        base_market = self.market
        for date in self.__date_range:
            if date > self.pricing_date:
                scenario = MarketDataScenario(CarryScenario(date=date, roll_to_fwds=self._roll_to_fwds))
                risk_key = RiskKey(provider, date, base_market, parameters, scenario, risk_measure)
                futures.append(self._calc(instrument, risk_key))
            else:
                market = CloseMarket(location=location, date=close_market_date(location, date))
                risk_key = RiskKey(provider, date, market, parameters, base_scenario, risk_measure)
                futures.append(self._calc(instrument, risk_key))

        return HistoricalPricingFuture(futures)
Example #6
0
def combine_risk_key(key_1: RiskKey, key_2: RiskKey) -> RiskKey:
    """
    Combine two risk keys (key_1, key_2) into a new RiskKey

    :type key_1: RiskKey
    :type key_2: RiskKey
    """

    def get_field_value(field_name: str): getattr(key_1, field_name) \
        if getattr(key_1, field_name) == getattr(key_2, field_name) else None

    return RiskKey(get_field_value("provider"), get_field_value("date"), get_field_value("market"),
                   get_field_value("params"), get_field_value("scenario"), get_field_value("risk_measure"))
Example #7
0
    def calc(self, instrument: InstrumentBase, risk_measure: RiskMeasure) -> PricingFuture:
        futures = []

        provider = instrument.provider
        scenario = self._scenario
        parameters = self._parameters
        location = self.market.location

        for date in self.__date_range:
            market = CloseMarket(location=location, date=close_market_date(location, date))
            risk_key = RiskKey(provider, date, market, parameters, scenario, risk_measure)
            futures.append(self._calc(instrument, risk_key))

        return HistoricalPricingFuture(futures)
Example #8
0
 def __risk_key(self, risk_measure: RiskMeasure, provider: type) -> RiskKey:
     return RiskKey(provider, self.__pricing_date, self.__market, self._parameters, self._scenario, risk_measure)
Example #9
0
def historical_risk_key(risk_key: RiskKey) -> RiskKey:
    market = LocationOnlyMarket(risk_key.market.location)
    return RiskKey(risk_key.provider, None, market, risk_key.params,
                   risk_key.scenario, risk_key.risk_measure)