コード例 #1
0
def test_rule_m_():
    date: dt = RelativeDate('1M', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 4)
    date: dt = RelativeDate('4M', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 25)
コード例 #2
0
def test_rule_b():
    date: dt = RelativeDate('-1b', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 15)
    date: dt = RelativeDate('+1b', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 20)
コード例 #3
0
def test_rule_z_():
    date: dt = RelativeDate('1Z', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 3)
    date: dt = RelativeDate('4Z', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 24)
コード例 #4
0
def test_rule_r_():
    date: dt = RelativeDate('1R', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 7)
    date: dt = RelativeDate('4R', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 28)
コード例 #5
0
def test_rule_w_():
    date: dt = RelativeDate('1W', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 6)
    date: dt = RelativeDate('4W', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 27)
コード例 #6
0
def test_rule_y():
    date: dt = RelativeDate('2y', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2023, 1, 19)
    date: dt = RelativeDate('-2y', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2019, 1, 21)
コード例 #7
0
def test_rule_k():
    date: dt = RelativeDate('1k', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2022, 1, 19)
    date: dt = RelativeDate('-1k', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2020, 1, 20)
コード例 #8
0
def test_rule_t_():
    date: dt = RelativeDate('1T', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 5)
    date: dt = RelativeDate('4T', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 26)
コード例 #9
0
def test_rule_v_():
    date: dt = RelativeDate('1V', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 2)
    date: dt = RelativeDate('4V', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 23)
コード例 #10
0
def test_rule_u():
    date: dt = RelativeDate('1u', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 20)
    date: dt = RelativeDate('2u', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 21)
    date: dt = RelativeDate('-2u', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 14)
コード例 #11
0
def test_rule_g():
    date: dt = RelativeDate('1g', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 26)
    date: dt = RelativeDate('3g', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 2, 9)
    date: dt = RelativeDate('-1g', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 12)
コード例 #12
0
ファイル: test_datagrid.py プロジェクト: xuover/gs-quant
def test_rdate_datagrid(mocker):
    mocker.patch.object(GsSession.__class__, 'default_value',
                        return_value=GsSession.get(Environment.QA, 'client_id', 'secret'))
    name = 'Testing'
    SPX = get_test_entity('MA4B66MW5E27U8P32SB')
    close = DataCoordinate(
        measure=DataMeasure.CLOSE_PRICE,
        frequency=DataFrequency.DAILY,
    )

    last_trade_price = DataCoordinate(
        measure=DataMeasure.TRADE_PRICE,
        frequency=DataFrequency.REAL_TIME,
    )
    rows = [
        DataRow(SPX),
    ]
    columns = [
        DataColumn(name="1d Chg (RT)",
                   processor=ChangeProcessor(AppendProcessor(close, last_trade_price,
                                                             start=RelativeDate("-1d",
                                                                                base_date=date(2021, 1, 22)))))
    ]

    datagrid = DataGrid(name=name, rows=rows, columns=columns)
    start_date = datagrid.columns[0].processor.children['a'].start
    assert start_date.base_date == RelativeDate('-1d', base_date=date(2021, 1, 22)).base_date
    assert start_date.rule == RelativeDate('-1d').rule

    datagrid.initialize()
    datagrid.poll()
    assert str(datagrid._data_queries[0].query.start) == '2021-01-21'

    as_dict = datagrid.as_dict()
    start = as_dict['parameters']['columns'][0]['parameters']['a']['parameters']['start']
    assert start['type'] == 'relativeDate'
    assert start['value'] == {'rule': '-1d', 'baseDate': '2021-01-22'}

    # Check that base_date is not persisted when not passed in.
    columns = [
        DataColumn(name="1d Chg (RT)",
                   processor=ChangeProcessor(AppendProcessor(close, last_trade_price,
                                                             start=RelativeDate("-1d"))))
    ]
    datagrid = DataGrid(name=name, rows=rows, columns=columns)
    as_dict = datagrid.as_dict()
    start = as_dict['parameters']['columns'][0]['parameters']['a']['parameters']['start']
    assert start['type'] == 'relativeDate'
    assert start['type'] == 'relativeDate'
    assert start['value'] == {'rule': '-1d'}
コード例 #13
0
ファイル: datagrid.py プロジェクト: xuover/gs-quant
    def _resolve_rdates(self, rule_cache: Dict = None):
        # TODO: Thread this...
        rule_cache = rule_cache or {}
        # Default to no calendar for rdate for external and oauth
        calendar = [] if not GsSession.current.is_internal() and isinstance(GsSession.current, OAuth2Session) else None

        for entity_id, rules in self.rdate_entity_map.items():
            entity = self.entity_map.get(entity_id)
            currencies = None
            exchanges = None
            if isinstance(entity, Entity):
                entity_dict = entity.get_entity()
                currency = entity_dict.get("currency")
                exchange = entity_dict.get("exchange")
                currencies = [currency] if currency else None
                exchanges = [exchange] if exchange else None
            for rule_base_date_tuple in rules:
                rule, base_date = rule_base_date_tuple[0], rule_base_date_tuple[1]
                cache_key = get_rdate_cache_key(rule_base_date_tuple[0], rule_base_date_tuple[1], currencies,
                                                exchanges)
                date_value = rule_cache.get(cache_key)
                if date_value is None:
                    if base_date:
                        base_date = dt.datetime.strptime(base_date, "%Y-%m-%d").date()
                    date_value = RelativeDate(rule, base_date).apply_rule(currencies=currencies,
                                                                          exchanges=exchanges,
                                                                          holiday_calendar=calendar)
                    rule_cache[cache_key] = date_value
                self.rule_cache[get_entity_rdate_key(entity_id, rule, base_date)] = date_value
コード例 #14
0
def get_df_with_retries(fetcher, start_date, end_date, exchange, retries=1):
    """
    Loads results from Data Service by calling fetcher function. Shifts query date range back by business days until
    result is not empty or retry limit reached. This is a fallback feature in case a data upload is late. Measure
    implementations should be written such that retries are usually not required.

    :param fetcher: a no-argument function runs a data query and returns a DataFrame
    :param start_date: initial start date for query
    :param end_date: initial end date for query
    :param exchange: exchange to use for holiday calendar
    :param retries: maximum number of retries
    :return: DataFrame
    """
    retries = max(retries, 0)
    while retries > -1:
        with DataContext(start_date, end_date):
            result = fetcher()
        if not result.empty:
            break
        kwargs = {'exchanges': [exchange]} if exchange else {}
        # no need to include any part of the previous date range since it's known to be empty
        end_date = RelativeDate('-1b',
                                base_date=start_date).apply_rule(**kwargs)
        start_date = end_date
        retries -= 1
    return result
コード例 #15
0
def test_rule_parsing():
    assert RelativeDate('A')._get_rules() == ['A']
    assert RelativeDate('1d')._get_rules() == ['1d']
    assert RelativeDate('-1d')._get_rules() == ['-1d']
    assert RelativeDate('1y-1d')._get_rules() == ['1y', '-1d']
    assert RelativeDate('-1y-1d')._get_rules() == ['-1y', '-1d']
    assert RelativeDate('-1y+1d')._get_rules() == ['-1y', '1d']
コード例 #16
0
def test_currency_holiday_calendars():
    replace = Replacer()
    replace('gs_quant.api.gs.data.GsDataApi.query_data',
            Mock(side_effect=mock_holiday_data))
    rdate = RelativeDate('-1b', base_date=dt(2022, 4, 12))
    assert dt(2022, 4, 11) == rdate.apply_rule(currencies=[])
    assert dt(2022, 4, 11) == rdate.apply_rule(currencies=['GBP'])
    assert dt(2022, 4, 8) == rdate.apply_rule(currencies=['USD'])
    assert dt(2022, 4, 8) == rdate.apply_rule()
    replace.restore()
コード例 #17
0
ファイル: backtest_utils.py プロジェクト: xuover/gs-quant
def get_final_date(inst, create_date, duration, holiday_calendar=None):
    global final_date_cache
    cache_key = (inst, create_date, duration, holiday_calendar)
    if cache_key in final_date_cache:
        return final_date_cache[cache_key]

    if duration is None:
        final_date_cache[cache_key] = dt.date.max
        return dt.date.max
    if isinstance(duration, (dt.datetime, dt.date)):
        final_date_cache[cache_key] = duration
        return duration
    if hasattr(inst, str(duration)):
        final_date_cache[cache_key] = getattr(inst, str(duration))
        return getattr(inst, str(duration))

    final_date_cache[cache_key] = RelativeDate(
        duration, create_date).apply_rule(holiday_calendar=holiday_calendar)
    return final_date_cache[cache_key]
コード例 #18
0
def test_rule_e():
    date: dt = RelativeDate('e', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 31)
コード例 #19
0
def test_chaining():
    date: dt = RelativeDate('J+14d+0u+4u', base_date=dt(
        2021, 1, 19)).apply_rule(holiday_calendar=holiday_calendar)
    assert date == dt(2021, 1, 22)
コード例 #20
0
def test_rule_a_():
    date: dt = RelativeDate('A', base_date=dt(2021, 1, 19)).apply_rule()
    assert date == dt(2021, 1, 1)