def save(self, overwrite: Optional[bool] = False): if self.portfolios: raise ValueError('Cannot save portfolios with nested portfolios') if self.__id: if not overwrite: raise ValueError( f'Portfolio with id {id} already exists. Use overwrite=True to overwrite' ) else: if not self.__name: raise ValueError('name not set') self.__id = GsPortfolioApi.create_portfolio( MarqueePortfolio('USD', self.__name)).id _logger.info( f'Created Marquee portfolio {self.__name} with id {self.__id}') position_set = PositionSet( position_date=self.__position_context.position_date, positions=tuple( Position( asset_id=GsAssetApi.get_or_create_asset_from_instrument(i)) for i in self.instruments)) if len(position_set.positions) > 0: GsPortfolioApi.update_positions(self.__id, [position_set])
def update_positions(self, position_sets: List[PositionSet], net_positions: bool = True): if self.positioned_entity_type == EntityType.PORTFOLIO: if not position_sets: return currency = GsPortfolioApi.get_portfolio(self.id).currency new_sets = [] for pos_set in position_sets: if pos_set.reference_notional is None: incorrect_set = any([ pos.quantity is None or pos.weight is not None for pos in pos_set.positions ]) if incorrect_set: raise MqValueError( 'If you would like to upload position sets without notionals, ' 'every position must have a quantity and cannot have a weight.' ) new_sets.append(pos_set) else: new_sets.append( self._convert_pos_set_with_weights(pos_set, currency)) GsPortfolioApi.update_positions( portfolio_id=self.id, position_sets=[p.to_target() for p in new_sets]) time.sleep(3) else: raise NotImplementedError
def update_positions(self, position_sets: List[PositionSet], schedule_reports: bool = True): if self.positioned_entity_type == EntityType.PORTFOLIO: if not position_sets: return existing_positions_dates = self.get_position_dates() new_position_dates = [p.date for p in position_sets ] if position_sets else [] reports = [ r.latest_end_date for r in self.get_reports() if r.latest_end_date ] latest_date_covered_by_reports = min(reports) if reports else None latest_position_date_in_reports = max([d for d in existing_positions_dates if d <= latest_date_covered_by_reports]) \ if latest_date_covered_by_reports else min(new_position_dates) start_date = min(latest_position_date_in_reports, min(new_position_dates)) end_date = max(new_position_dates) GsPortfolioApi.update_positions( portfolio_id=self.id, position_sets=[p.to_target() for p in position_sets]) if schedule_reports: self._schedule_reports(start_date=start_date, end_date=end_date) else: raise NotImplementedError
def save(self): if not self.name: raise ValueError('name not set') try: portfolio_id = GsPortfolioApi.get_portfolio_by_name(self.name).id except ValueError: from gs_quant.target.portfolios import Portfolio as MarqueePortfolio portfolio_id = GsPortfolioApi.create_portfolio(MarqueePortfolio('USD', self.name)).id _logger.info('Created Marquee portfolio with ID: {}'.format(portfolio_id)) position_set = PositionSet( position_date=dt.date.today(), positions=tuple(Position(asset_id=GsAssetApi.get_or_create_asset_from_instrument(i)) for i in self.instruments)) GsPortfolioApi.update_positions(portfolio_id, (position_set,))
def save(self, overwrite: Optional[bool] = False): if self.portfolios: raise ValueError('Cannot save portfolios with nested portfolios') if self.__id: if not overwrite: raise ValueError( f'Portfolio with id {id} already exists. Use overwrite=True to overwrite' ) else: if not self.__name: raise ValueError('name not set') try: self.__id = GsPortfolioApi.get_portfolio_by_name( self.__name).id if not overwrite: raise RuntimeError( f'Portfolio {self.__name} with id {self.__id} already exists. Use overwrite=True to overwrite' ) except ValueError: from gs_quant.target.portfolios import Portfolio as MarqueePortfolio self.__id = GsPortfolioApi.create_portfolio( MarqueePortfolio('USD', self.__name)).id _logger.info( f'Created Marquee portfolio {self.__name} with id {self.__id}' ) position_set = PositionSet( position_date=dt.date.today(), positions=tuple( Position( asset_id=GsAssetApi.get_or_create_asset_from_instrument(i)) for i in self.instruments)) GsPortfolioApi.update_positions(self.__id, (position_set, ))