Exemplo n.º 1
0
 def get_universe_factor_exposure(
     self,
     start_date: dt.date,
     end_date: dt.date = None,
     assets: DataAssetsRequest = DataAssetsRequest(UniverseIdentifier.gsid,
                                                   []),
     format: ReturnFormat = ReturnFormat.DATA_FRAME
 ) -> Union[List[Dict], pd.DataFrame]:
     """ Retrieve universe factor exposure data for existing risk model
         :param start_date: start date for data request
         :param end_date: end date for data request
         :param assets: DataAssetsRequest object with identifier and list of assets to retrieve for request
         :param format: which format to return the results in
         :return: factor exposure for assets requested """
     results = GsFactorRiskModelApi.get_risk_model_data(
         model_id=self.id,
         start_date=start_date,
         end_date=end_date,
         assets=assets,
         measures=[
             Measure.Universe_Factor_Exposure, Measure.Asset_Universe
         ],
         limit_factors=False).get('results')
     universe = assets.universe if assets.universe else results[0].get(
         'assetData').get('universe')
     factor_exposure = build_asset_data_map(results, universe,
                                            'factorExposure')
     if format == ReturnFormat.DATA_FRAME:
         factor_exposure = pd.DataFrame.from_dict(
             {(i, j): factor_exposure[i][j]
              for i in factor_exposure.keys()
              for j in factor_exposure[i].keys()},
             orient='index')
     return factor_exposure
Exemplo n.º 2
0
    def get_asset_universe(
        self,
        start_date: dt.date,
        end_date: dt.date = None,
        assets: DataAssetsRequest = DataAssetsRequest(UniverseIdentifier.gsid,
                                                      []),
        format: ReturnFormat = ReturnFormat.DATA_FRAME
    ) -> Union[List[Dict], pd.DataFrame]:
        """ Retrieve asset universe data for existing risk model
            :param start_date: start date for data request
            :param end_date: end date for data request
            :param assets: DataAssetsRequest object with identifier and list of assets to retrieve for request
            :param format: which format to return the results in
            :return: risk model universe """

        if not assets.universe and not end_date:
            end_date = start_date
        results = GsFactorRiskModelApi.get_risk_model_data(
            model_id=self.id,
            start_date=start_date,
            end_date=end_date,
            assets=assets,
            measures=[Measure.Asset_Universe],
            limit_factors=False).get('results')
        dates = [
            dt.datetime.strptime((data.get('date')), '%Y-%m-%d').date()
            for data in results
        ]
        universe = [data.get('assetData').get('universe') for data in results]
        dates_to_universe = dict(zip(dates, universe))
        if format == ReturnFormat.DATA_FRAME:
            dates_to_universe = pd.DataFrame(dates_to_universe)
        return dates_to_universe
Exemplo n.º 3
0
 def get_residual_variance(
     self,
     start_date: dt.date,
     end_date: dt.date = None,
     assets: DataAssetsRequest = DataAssetsRequest(UniverseIdentifier.gsid,
                                                   []),
     format: ReturnFormat = ReturnFormat.DATA_FRAME
 ) -> Union[List[Dict], pd.DataFrame]:
     """ Retrieve residual variance data for existing risk model
         :param start_date: start date for data request
         :param end_date: end date for data request
         :param assets: DataAssetsRequest object with identifier and list of assets to retrieve for request
         :param format: which format to return the results in
         :return: residual variance for assets requested """
     results = GsFactorRiskModelApi.get_risk_model_data(
         model_id=self.id,
         start_date=start_date,
         end_date=end_date,
         assets=assets,
         measures=[Measure.Residual_Variance, Measure.Asset_Universe],
         limit_factors=False).get('results')
     universe = assets.universe if assets.universe else results[0].get(
         'assetData').get('universe')
     residual_variance = build_asset_data_map(results, universe,
                                              'residualVariance')
     if format == ReturnFormat.DATA_FRAME:
         residual_variance = pd.DataFrame(residual_variance)
     return residual_variance
Exemplo n.º 4
0
    def get_factor_portfolios(
        self,
        start_date: dt.date,
        end_date: dt.date = None,
        assets: DataAssetsRequest = DataAssetsRequest(
            RiskModelUniverseIdentifierRequest.gsid, []),
        format: ReturnFormat = ReturnFormat.DATA_FRAME
    ) -> Union[Dict, pd.DataFrame]:
        """ Get factor portfolios data for existing risk model

        :param start_date: start date for data request
        :param end_date: end date for data request
        :param assets: DataAssetsRequest object with identifier and list of assets to retrieve for request
        :param format: which format to return the results in

        :return: factor portfolios data
        """
        results = GsFactorRiskModelApi.get_risk_model_data(
            model_id=self.id,
            start_date=start_date,
            end_date=end_date,
            assets=assets,
            measures=[Measure.Factor_Portfolios],
            limit_factors=False).get('results')
        pfp_data = results if format == ReturnFormat.JSON else build_pfp_data_dataframe(
            results)
        return pfp_data
Exemplo n.º 5
0
    def get_data(self,
                 measures: List[Measure],
                 start_date: dt.date,
                 end_date: dt.date = None,
                 assets: DataAssetsRequest = DataAssetsRequest(
                     RiskModelUniverseIdentifierRequest.gsid, []),
                 limit_factors: bool = True) -> Dict:
        """ Get data for multiple measures for existing risk model

        :param measures: list of measures for general risk model data request
        :param start_date: start date for data request
        :param end_date: end date for data request
        :param assets: DataAssetsRequest object with identifier and list of assets to retrieve for request
        :param limit_factors: limit factors included in factorData and covariance matrix to only include factors
                which the input universe has non-zero exposure to

        :return: factor portfolios data
        """
        return GsFactorRiskModelApi.get_risk_model_data(
            model_id=self.id,
            start_date=start_date,
            end_date=end_date,
            assets=assets,
            measures=measures,
            limit_factors=limit_factors)
Exemplo n.º 6
0
    def get_issuer_specific_covariance(
        self,
        start_date: dt.date,
        end_date: dt.date = None,
        assets: DataAssetsRequest = DataAssetsRequest(
            RiskModelUniverseIdentifierRequest.gsid, []),
        format: ReturnFormat = ReturnFormat.DATA_FRAME
    ) -> Union[Dict, pd.DataFrame]:
        """ Get issuer specific covariance data for existing risk model

        :param start_date: start date for data request
        :param end_date: end date for data request
        :param assets: DataAssetsRequest object with identifier and list of assets to retrieve for request
        :param format: which format to return the results in

        :return: issuer specific covariance matrix (covariance of assets with the same issuer)
        """
        isc = GsFactorRiskModelApi.get_risk_model_data(
            model_id=self.id,
            start_date=start_date,
            end_date=end_date,
            assets=assets,
            measures=[Measure.Issuer_Specific_Covariance],
            limit_factors=False).get('results')
        isc_data = isc if format == ReturnFormat.JSON else get_isc_dataframe(
            isc)
        return isc_data
Exemplo n.º 7
0
    def get_covariance_matrix(
        self,
        start_date: dt.date,
        end_date: dt.date = None,
        format: ReturnFormat = ReturnFormat.DATA_FRAME
    ) -> Union[Dict, pd.DataFrame]:
        """ Get covariance matrix data for existing risk model

        :param start_date: start date for data request
        :param end_date: end date for data request
        :param format: which format to return the results in

        :return: covariance matrix of daily factor returns
        """
        results = GsFactorRiskModelApi.get_risk_model_data(
            model_id=self.id,
            start_date=start_date,
            end_date=end_date,
            assets=None,
            measures=[
                Measure.Covariance_Matrix, Measure.Factor_Name,
                Measure.Factor_Id
            ],
            limit_factors=False).get('results')
        covariance_data = results if format == ReturnFormat.JSON else get_covariance_matrix_dataframe(
            results)
        return covariance_data
Exemplo n.º 8
0
    def get_factor_returns_by_id(
        self,
        start_date: dt.date,
        end_date: dt.date = None,
        format: ReturnFormat = ReturnFormat.DATA_FRAME
    ) -> Union[Dict, pd.DataFrame]:
        """ Get factor return data for existing risk model keyed by factor id

        :param start_date: start date for data request
        :param end_date: end date for data request
        :param format: which format to return the results in

        :return: factor returns by factor id
        """
        results = GsFactorRiskModelApi.get_risk_model_data(
            model_id=self.id,
            start_date=start_date,
            end_date=end_date,
            assets=None,
            measures=[
                Measure.Factor_Return, Measure.Factor_Name, Measure.Factor_Id
            ],
            limit_factors=False).get('results')
        factor_data = build_factor_data_dataframe(results, 'id') if format == ReturnFormat.DATA_FRAME else \
            build_factor_data_map(results, 'id')
        return factor_data
Exemplo n.º 9
0
    def get_covariance_matrix(
        self,
        start_date: dt.date,
        end_date: dt.date = None,
        assets: DataAssetsRequest = None,
        format: ReturnFormat = ReturnFormat.DATA_FRAME
    ) -> Union[Dict, pd.DataFrame]:
        """ Get covariance matrix data for existing risk model

        :param start_date: start date for data request
        :param end_date: end date for data request
        :param assets: DataAssetsRequest object with identifier and list of assets to limit the covariance matrix by
        :param format: which format to return the results in

        :return: covariance matrix of daily factor returns
        """

        limit_factors = True if assets else False
        measures = [
            Measure.Covariance_Matrix, Measure.Factor_Name, Measure.Factor_Id
        ]
        if assets:
            measures.append(Measure.Universe_Factor_Exposure)
        results = GsFactorRiskModelApi.get_risk_model_data(
            model_id=self.id,
            start_date=start_date,
            end_date=end_date,
            assets=assets,
            measures=measures,
            limit_factors=limit_factors).get('results')
        covariance_data = results if format == ReturnFormat.JSON else get_covariance_matrix_dataframe(
            results)
        return covariance_data
Exemplo n.º 10
0
    def get_factor_returns_by_id(
        self,
        start_date: dt.date,
        end_date: dt.date = None,
        assets: DataAssetsRequest = None,
        format: ReturnFormat = ReturnFormat.DATA_FRAME
    ) -> Union[Dict, pd.DataFrame]:
        """ Get factor return data for existing risk model keyed by factor id

        :param start_date: start date for data request
        :param end_date: end date for data request
        :param assets: DataAssetsRequest object with identifier and list of assets to limit the factors by
        :param format: which format to return the results in
        :return: factor returns by factor id
        """
        limit_factors = True if assets else False
        measures = [
            Measure.Factor_Return, Measure.Factor_Name, Measure.Factor_Id
        ]
        if assets:
            measures.append(Measure.Universe_Factor_Exposure)
        results = GsFactorRiskModelApi.get_risk_model_data(
            model_id=self.id,
            start_date=start_date,
            end_date=end_date,
            assets=assets,
            measures=measures,
            limit_factors=limit_factors).get('results')
        factor_data = build_factor_data_dataframe(results, 'id') if format == ReturnFormat.DATA_FRAME else \
            build_factor_data_map(results, 'id')
        return factor_data
Exemplo n.º 11
0
def test_get_risk_model_data(mocker):
    query = {'startDate': '2020-01-01', 'endDate': '2020-03-03'}

    results = {
        'results': [{
            'date':
            '2020-02-05',
            'assetData': {
                'universe': ['2407966', '2046251', 'USD'],
                'specificRisk': [12.09, 45.12, 3.09],
                'factorExposure': [{
                    '1': 0.23,
                    '2': 0.023
                }],
                'historicalBeta': [0.12, 0.45, 1.2]
            },
            'factorData': [{
                'factorId': '1',
                'factorName': 'USD',
                'factorCategory': 'Currency',
                'factorCategoryId': 'CUR'
            }],
            'covarianceMatrix': [[0.089, 0.0123, 0.345]],
            'issuerSpecificCovariance': {
                'universeId1': ['2407966'],
                'universeId2': ['2046251'],
                'covariance': [0.03754]
            },
            'factorPortfolios': {
                'universe': ['2407966', '2046251'],
                'portfolio': [{
                    'factorId': 2,
                    'weights': [0.25, 0.75]
                }]
            }
        }],
        'totalResults':
        1,
        'missingDates': []
    }

    # mock GsSession
    mocker.patch.object(GsSession.__class__,
                        'default_value',
                        return_value=GsSession.get(Environment.QA, 'client_id',
                                                   'secret'))
    mocker.patch.object(GsSession.current, '_post', return_value=results)

    # run test
    response = GsFactorRiskModelApi.get_risk_model_data(
        model_id='id',
        start_date=dt.date(2020, 1, 1),
        end_date=dt.date(2020, 3, 3))
    GsSession.current._post.assert_called_with(
        '/risk/models/data/{id}/query'.format(id='id'), query)
    assert response == results