def get_latest_positions(cls, portfolio_id: str, position_type: str = 'close') -> PositionSet: url = '/portfolios/{id}/positions/last?type={ptype}'.format( id=portfolio_id, ptype=position_type) position_sets = GsSession.current._get(url, cls=PositionSet)['results'] return position_sets[0] if len(position_sets) > 0 else PositionSet()
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 get_position_set_by_position_type( cls, positions_type: str, positions_id: str) -> Tuple[Instrument, ...]: root = 'deals' if positions_type == 'ETI' else 'books/' + positions_type url = '/risk-internal/{}/{}/positions'.format(root, positions_id) results = GsSession.current._get(url, timeout=181) return [PositionSet.from_dict(res) for res in results['positionSets']]
def get_position_set_by_position_type(cls, positions_type: str, positions_id: str, activity_type: str = 'position') -> Tuple[Instrument, ...]: root = 'deals' if positions_type == 'ETI' else 'books/' + positions_type if activity_type != 'position': url = '/risk-internal/{}/{}/positions?activityType={}'.format(root, positions_id, activity_type) else: url = '/risk-internal/{}/{}/positions'.format(root, positions_id) results = GsSession.current._get(url, timeout=181) return tuple(PositionSet.from_dict(res) for res in results['positionSets'])
def get_positions(cls, portfolio_id: str, start_date: dt.date = None, end_date: dt.date = None, position_type: str = 'close') -> Tuple[PositionSet, ...]: url = '/portfolios/{id}/positions?type={positionType}'.format(id=portfolio_id, positionType=position_type) if start_date is not None: url += '&startDate={sd}'.format(sd=start_date.isoformat()) if end_date is not None: url += '&endDate={sd}'.format(sd=end_date.isoformat()) res = GsSession.current._get(url) return tuple(PositionSet.from_dict(v) for v in res.get('positionSets', ()))
def get_latest_positions(cls, portfolio_id: str, position_type: str = 'close') -> Union[PositionSet, dict]: url = '/portfolios/{id}/positions/last?type={ptype}'.format(id=portfolio_id, ptype=position_type) results = GsSession.current._get(url)['results'] # Annoyingly, different types are returned depending on position_type if isinstance(results, dict) and 'positions' in results: results['positions'] = tuple(Position.from_dict(p) for p in results['positions']) return PositionSet.from_dict(results)
def get_positions_for_date(cls, portfolio_id: str, position_date: dt.date, position_type: str = 'close') -> PositionSet: url = '/portfolios/{id}/positions/{date}?type={ptype}'.format( id=portfolio_id, date=position_date.isoformat(), ptype=position_type) position_sets = GsSession.current._get(url, cls=PositionSet)['results'] return position_sets[0] if len(position_sets) > 0 else PositionSet()
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, ))