def get_factor_risk_report(self, risk_model_id: str = None, fx_hedged: bool = None) -> FactorRiskReport: if self.positioned_entity_type in [ EntityType.PORTFOLIO, EntityType.ASSET ]: position_source_type = self.positioned_entity_type.value.capitalize( ) reports = GsReportApi.get_reports( limit=100, position_source_type=position_source_type, position_source_id=self.id, report_type=f'{position_source_type} Factor Risk') if fx_hedged: reports = [ report for report in reports if report.parameters.fx_hedged == fx_hedged ] if risk_model_id: reports = [ report for report in reports if report.parameters.risk_model == risk_model_id ] if len(reports) > 1: raise MqError( f'This {position_source_type} has more than one factor risk report that matches ' 'your parameters. Please specify the risk model ID and fxHedged value in the ' 'function parameters.') if len(reports) == 0: raise MqError( f'This {position_source_type} has no factor risk reports that match your parameters.' ) return FactorRiskReport.from_target(reports[0]) raise NotImplementedError
def get_reports(self) -> List[Report]: if self.positioned_entity_type == EntityType.PORTFOLIO: reports_as_target = GsPortfolioApi.get_reports(portfolio_id=self.id) report_objects = [] for report in reports_as_target: if report.type == ReportType.Portfolio_Performance_Analytics: report_objects.append(PerformanceReport.from_target(report)) elif report.type in [ReportType.Portfolio_Factor_Risk, ReportType.Asset_Factor_Risk]: report_objects.append(FactorRiskReport.from_target(report)) else: report_objects.append(Report.from_target(report)) return report_objects raise NotImplementedError
def get_factor_risk_reports(self, fx_hedged: bool = None) -> List[FactorRiskReport]: if self.positioned_entity_type in [EntityType.PORTFOLIO, EntityType.ASSET]: position_source_type = self.positioned_entity_type.value.capitalize() reports = GsReportApi.get_reports(limit=100, position_source_type=position_source_type, position_source_id=self.id, report_type=f'{position_source_type} Factor Risk') if fx_hedged: reports = [report for report in reports if report.parameters.fx_hedged == fx_hedged] if len(reports) == 0: raise MqError(f'This {position_source_type} has no factor risk reports that match your parameters.') return [FactorRiskReport.from_target(report) for report in reports] raise NotImplementedError
def get_reports(self) -> List[Report]: """ Get a list of all reports associated with the portfolio :return: list of Report objects """ reports = [] reports_as_targets = GsPortfolioApi.get_reports(self.__portfolio_id) for report_target in reports_as_targets: if report_target.type in [ ReportType.Portfolio_Factor_Risk, ReportType.Asset_Factor_Risk ]: reports.append(FactorRiskReport.from_target(report_target)) if report_target.type == ReportType.Portfolio_Performance_Analytics: reports.append(PerformanceReport.from_target(report_target)) return reports