コード例 #1
0
def test_get_portfolio_positions_for_date(mocker):
    id_1 = 'MP1'
    date = dt.date(2019, 2, 18)

    mock_response = {'results': (
        PositionSet.from_dict({
            'id': 'mock1',
            'positionDate': '2019-02-18',
            'lastUpdateTime': '2019-02-19T12:10:32.401Z',
            'positions': [
                {'assetId': 'MQA123', 'quantity': 0.3},
                {'assetId': 'MQA456', 'quantity': 0.7}
            ]
        }),
    )}

    expected_response = (
        PositionSet('mock1', date, dup.parse('2019-02-19T12:10:32.401Z'), (
            Position(assetId='MQA123', quantity=0.3),
            Position(assetId='MQA456', quantity=0.7)
        ))
    )

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

    # run test
    response = GsPortfolioApi.get_positions_for_date(id_1, date)

    GsSession.current._get.assert_called_with('/portfolios/{id}/positions/{d}?type=close'.format(id=id_1, d=date), cls=PositionSet)

    assert response == expected_response
コード例 #2
0
 def from_portfolio_id(portfolio_id: str, date=None):
     portfolio = GsPortfolioApi.get_portfolio(portfolio_id)
     response = GsPortfolioApi.get_positions_for_date(portfolio_id, date) if date else \
         GsPortfolioApi.get_latest_positions(portfolio_id)
     response = response[0] if isinstance(response, tuple) else response
     positions = response.positions if isinstance(
         response, PositionSet) else response['positions']
     instruments = GsAssetApi.get_instruments_for_positions(positions)
     ret = Portfolio(instruments, name=portfolio.name)
     ret.__id = portfolio_id
     return ret
コード例 #3
0
ファイル: entity.py プロジェクト: EMAinasse/gs-quant
 def get_position_set_for_date(self,
                               date: dt.date,
                               position_type: PositionType = PositionType.CLOSE) -> PositionSet:
     if self.positioned_entity_type == EntityType.ASSET:
         response = GsAssetApi.get_asset_positions_for_date(self.id, date, position_type)[0]
         return PositionSet.from_target(response)
     if self.positioned_entity_type == EntityType.PORTFOLIO:
         response = GsPortfolioApi.get_positions_for_date(portfolio_id=self.id,
                                                          position_date=date,
                                                          position_type=position_type.value)
         return PositionSet.from_target(response) if response else None
     raise NotImplementedError
コード例 #4
0
ファイル: portfolio.py プロジェクト: goldmansachs/gs-quant
 def _get_instruments(self, position_date: dt.date, in_place: bool, return_priceables: bool = True):
     if self.id:
         dates_prior = list(filter(lambda date: date < position_date,
                                   GsPortfolioApi.get_position_dates(self.id)))
         if len(dates_prior) == 0:
             raise ValueError('Your portfolio has no positions on the PositionContext date')
         date = max(dates_prior)
         response = GsPortfolioApi.get_positions_for_date(self.id, date)
         positions = response.positions if response else []
         instruments = GsAssetApi.get_instruments_for_positions(positions)
         if in_place:
             self.__priceables = instruments
         return instruments
     return self.__priceables if return_priceables else self.all_instruments