コード例 #1
0
ファイル: assets.py プロジェクト: wechen1/gs-quant
    def get_latest_positions(cls, asset_id: str, position_type: str = 'close') -> Union[PositionSet, dict]:
        url = '/assets/{id}/positions/last?type={ptype}'.format(id=asset_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 results
コード例 #2
0
    def get_latest_positions(
            asset_id: str,
            position_type: PositionType = None) -> Union[PositionSet, dict]:
        url = '/assets/{id}/positions/last'.format(id=asset_id)
        if position_type is not None:
            url += '?type={ptype}'.format(ptype=position_type if isinstance(
                position_type, str) else position_type.value)

        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 results
コード例 #3
0
def test_get_asset_positions_for_date(mocker):
    marquee_id = 'MQA1234567890'
    position_date = dt.date(2019, 2, 19)

    mock_response = {
        'results': ({
            'id':
            'mock1',
            'positionDate':
            '2019-02-19',
            'lastUpdateTime':
            '2019-02-19T12:10:32.401Z',
            'positions': [{
                'assetId': 'MQA123',
                'quantity': 0.3
            }, {
                'assetId': 'MQA456',
                'quantity': 0.7
            }],
            'type':
            'open',
            'divisor':
            100
        }, {
            'id':
            'mock2',
            'positionDate':
            '2019-02-19',
            'lastUpdateTime':
            '2019-02-20T05:04:32.981Z',
            'positions': [{
                'assetId': 'MQA123',
                'quantity': 0.4
            }, {
                'assetId': 'MQA456',
                'quantity': 0.6
            }],
            'type':
            'close',
            'divisor':
            120
        })
    }

    expected_response = (PositionSet(
        'mock1', dt.date(2019, 2, 19), dup.parse('2019-02-19T12:10:32.401Z'),
        (Position(assetId='MQA123', quantity=0.3),
         Position(assetId='MQA456', quantity=0.7)), 'open', 100),
                         PositionSet(
                             'mock2', dt.date(2019, 2, 19),
                             dup.parse('2019-02-20T05:04:32.981Z'),
                             (Position(assetId='MQA123', quantity=0.4),
                              Position(assetId='MQA456', quantity=0.6)),
                             'close', 120))

    # 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 = GsAssetApi.get_asset_positions_for_date(marquee_id,
                                                       position_date)

    GsSession.current._get.assert_called_with(
        '/assets/{id}/positions/{date}'.format(id=marquee_id,
                                               date=position_date))

    testfixtures.compare(response, expected_response)

    mock_response = {
        'results': [{
            'id':
            'mock',
            'positionDate':
            '2019-02-19',
            'lastUpdateTime':
            '2019-02-20T05:04:32.981Z',
            'positions': [{
                'assetId': 'MQA123',
                'quantity': 0.4
            }, {
                'assetId': 'MQA456',
                'quantity': 0.6
            }],
            'type':
            'close',
            'divisor':
            120
        }]
    }

    expected_response = (PositionSet(
        'mock', dt.date(2019, 2, 19), dup.parse('2019-02-20T05:04:32.981Z'),
        (Position(assetId='MQA123', quantity=0.4),
         Position(assetId='MQA456', quantity=0.6)), 'close', 120), )

    # 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 = GsAssetApi.get_asset_positions_for_date(marquee_id,
                                                       position_date, "close")

    testfixtures.compare(response, expected_response)

    GsSession.current._get.assert_called_with(
        '/assets/{id}/positions/{date}?type=close'.format(id=marquee_id,
                                                          date=position_date))