Exemplo n.º 1
0
def test_finished_roll_pre_expiry_static_transition(dates):
    contract_dates = dates.iloc[0:2]
    ts = dates.iloc[0] + BDay(-2)
    cols = pd.MultiIndex.from_product([[0], ['front', 'back']])
    idx = [-9, -8]
    transition = pd.DataFrame([[1.0, 0.0], [0.0, 1.0]],
                              index=idx,
                              columns=cols)
    wts = mappings.static_transition(ts, contract_dates, transition)
    wts_exp = [(0, 'CLZ16', 1.0, ts)]
    assert wts == wts_exp
Exemplo n.º 2
0
def test_non_numeric_column_static_transition(dates):
    contract_dates = dates.iloc[0:2]
    ts = dates.iloc[0] + BDay(-8)
    cols = pd.MultiIndex.from_product([["CL1"], ['front', 'back']])
    idx = [-2, -1, 0]
    transition = pd.DataFrame([[1.0, 0.0], [0.5, 0.5], [0.0, 1.0]],
                              index=idx,
                              columns=cols)

    wts = mappings.static_transition(ts, contract_dates, transition)
    wts_exp = [("CL1", 'CLX16', 1.0, ts)]
    assert wts == wts_exp
Exemplo n.º 3
0
def test_static_bad_transitions(dates):
    contract_dates = dates.iloc[[0]]
    ts = dates.iloc[0] + BDay(-8)

    # transition does not contain 'front' column
    cols = pd.MultiIndex.from_product([[0], ['not_front', 'back']])
    idx = [-2, -1, 0]
    transition = pd.DataFrame([[1.0, 0.0], [0.5, 0.5], [0.0, 1.0]],
                              index=idx,
                              columns=cols)

    with pytest.raises(ValueError):
        mappings.static_transition(ts, contract_dates, transition)

    # transition does not sum to one across rows
    cols = pd.MultiIndex.from_product([[0], ['front', 'back']])
    transition = pd.DataFrame([[1.0, 0.0], [0.5, 0.0], [0.0, 1.0]],
                              index=idx,
                              columns=cols)

    with pytest.raises(ValueError):
        mappings.static_transition(ts, contract_dates, transition)

    # transition is not monotonic increasing in back
    transition = pd.DataFrame([[0.7, 0.3], [0.8, 0.2], [0.0, 1.0]],
                              index=idx,
                              columns=cols)

    with pytest.raises(ValueError):
        mappings.static_transition(ts, contract_dates, transition)
Exemplo n.º 4
0
def test_not_in_roll_one_generic_filtering_front_contracts_static_transition(
        dates):  # NOQA
    contract_dates = dates.iloc[0:2]
    ts = dates.iloc[1] + BDay(-8)
    cols = pd.MultiIndex.from_product([[0], ['front', 'back']])
    idx = [-2, -1, 0]
    transition = pd.DataFrame([[1.0, 0.0], [0.5, 0.5], [0.0, 1.0]],
                              index=idx,
                              columns=cols)

    wts = mappings.static_transition(ts, contract_dates, transition)
    wts_exp = [(0, 'CLZ16', 1.0, ts)]
    assert wts == wts_exp
Exemplo n.º 5
0
def test_invalid_contract_dates():
    ts = [pd.Timestamp("2016-10-19")]
    cols = pd.MultiIndex.from_product([[0, 1], ['front', 'back']])
    idx = [-1, 0]
    trans = pd.DataFrame([[1.0, 0.0, 1.0, 0.0], [0.0, 1.0, 0.0, 1.0]],
                         index=idx,
                         columns=cols)

    non_unique_index = pd.Series(
        [pd.Timestamp('2016-10-20'),
         pd.Timestamp('2016-11-21')],
        index=['instr1', 'instr1'])
    with pytest.raises(ValueError):
        mappings.roller(ts,
                        non_unique_index,
                        mappings.static_transition,
                        transition=trans)

    non_unique_vals = pd.Series(
        [pd.Timestamp('2016-10-20'),
         pd.Timestamp('2016-10-20')],
        index=['instr1', 'instr2'])
    with pytest.raises(ValueError):
        mappings.roller(ts,
                        non_unique_vals,
                        mappings.static_transition,
                        transition=trans)

    non_monotonic_vals = pd.Series(
        [pd.Timestamp('2016-10-20'),
         pd.Timestamp('2016-10-19')],
        index=['instr1', 'instr2'])

    with pytest.raises(ValueError):
        mappings.static_transition(ts[0], non_monotonic_vals, transition=trans)

    not_enough_vals = pd.Series([pd.Timestamp('2016-10-19')], index=['instr1'])
    with pytest.raises(IndexError):
        mappings.static_transition(ts[0], not_enough_vals, transition=trans)
Exemplo n.º 6
0
def test_no_roll_date_two_generics_static_transition(dates):
    dt = dates.iloc[0]
    contract_dates = dates
    ts = dt + BDay(-8)
    cols = pd.MultiIndex.from_product([[0, 1], ['front', 'back']])
    idx = [-2, -1, 0]
    transition = pd.DataFrame(
        [[1.0, 0.0, 1.0, 0.0], [0.5, 0.5, 0.5, 0.5], [0.0, 1.0, 0.0, 1.0]],
        index=idx,
        columns=cols)

    wts = mappings.static_transition(ts, contract_dates, transition)
    wts_exp = [(0, 'CLX16', 1.0, ts), (1, 'CLZ16', 1.0, ts)]
    assert wts == wts_exp
Exemplo n.º 7
0
def test_roll_with_holiday(dates):
    contract_dates = dates.iloc[-2:]
    ts = pd.Timestamp("2016-11-17")
    cols = pd.MultiIndex.from_product([[0], ['front', 'back']])
    idx = [-2, -1, 0]
    transition = pd.DataFrame([[1.0, 0.0], [0.5, 0.5], [0.0, 1.0]],
                              index=idx,
                              columns=cols)

    holidays = [np.datetime64("2016-11-18")]
    # the holiday moves the roll schedule up one day, since Friday is
    # excluded as a day
    wts = mappings.static_transition(ts, contract_dates, transition, holidays)
    wts_exp = [(0, 'CLZ16', 0.5, ts), (0, 'CLF17', 0.5, ts)]
    assert wts == wts_exp