コード例 #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
ファイル: portfolio.py プロジェクト: mn98/gs-quant
    def _create(self):
        # If a priceables portfolio, try resolving to MQ portfolio
        if self.__priceables:
            self.save()
            self.priceables = None
            return

        # If a positions portfolio, create using MQ API
        port = GsPortfolioApi.create_portfolio(
            portfolio=MQPortfolio(name=self.name,
                                  currency=self.currency,
                                  entitlements=self.entitlements.to_target()))
        PositionedEntity.__init__(self, port.id, EntityType.PORTFOLIO)
        Entity.__init__(self, port.id, EntityType.PORTFOLIO)
        self.__id = port.id
        self._PositionedEntity__entity_type = EntityType.PORTFOLIO
        self.entitlements = Entitlements.from_target(port.entitlements)
        self.currency = Currency(port.currency)

        # If the portfolio contains positions, upload them to the MQ portfolio and schedule reports
        if self.position_sets:
            position_sets = self.position_sets
            self.position_sets = None
            self.update_positions(position_sets, False)
            self._schedule_first_reports(
                [pos_set.date for pos_set in position_sets])
            self.position_sets = None
コード例 #3
0
def test_create_portfolio(mocker):
    id_1 = 'MP1'

    portfolio = Portfolio(id=id_1, currency='USD', name='Example Port')

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

    # run test
    response = GsPortfolioApi.create_portfolio(portfolio)
    GsSession.current._post.assert_called_with('/portfolios', portfolio, cls=Portfolio)
    assert response == portfolio
コード例 #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, ))