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
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
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
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