예제 #1
0
    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])
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
    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,))
예제 #5
0
    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, ))