SPB Git forge

spb/wp15_uqo

Public MIT
3commits 1branches 1releases
7.6 MBsize
maindefault branch
51 min agolast push
TeX 53.6% Python 46.2%
1.8 KB · 60 lines python
Raw Blame History
1import sys2from pathlib import Path34sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))56import polars as pl78from intraday_fragility.schema import integrity_flags91011def make_df(rows):12    return pl.DataFrame(13        rows,14        schema={"timestamp": pl.Datetime("ns", "UTC"), "open": pl.Float64,15                "high": pl.Float64, "low": pl.Float64, "close": pl.Float64,16                "volume": pl.Float64, "ticker": pl.String},17        orient="row",18    )192021TS = "2020-01-02T14:30:00"222324def test_valid_bar_not_flagged():25    import datetime as dt26    ts = dt.datetime(2020, 1, 2, 14, 30, tzinfo=dt.timezone.utc)27    df = make_df([[ts, 10.0, 11.0, 9.5, 10.5, 100.0, "AAA"]])28    f = integrity_flags(df)29    assert not f["flag_ohlc_violation"][0]30    assert not f["flag_nonpositive_price"][0]31    assert not f["flag_negative_volume"][0]32    assert not f["flag_duplicate_key"][0]333435def test_high_below_close_flagged():36    import datetime as dt37    ts = dt.datetime(2020, 1, 2, 14, 30, tzinfo=dt.timezone.utc)38    df = make_df([[ts, 10.0, 10.2, 9.5, 10.5, 100.0, "AAA"]])39    assert integrity_flags(df)["flag_ohlc_violation"][0]404142def test_low_above_open_flagged():43    import datetime as dt44    ts = dt.datetime(2020, 1, 2, 14, 30, tzinfo=dt.timezone.utc)45    df = make_df([[ts, 9.0, 11.0, 9.5, 10.5, 100.0, "AAA"]])46    assert integrity_flags(df)["flag_ohlc_violation"][0]474849def test_duplicate_key_flagged():50    import datetime as dt51    ts = dt.datetime(2020, 1, 2, 14, 30, tzinfo=dt.timezone.utc)52    df = make_df([53        [ts, 10.0, 11.0, 9.5, 10.5, 100.0, "AAA"],54        [ts, 10.0, 11.0, 9.5, 10.5, 200.0, "AAA"],55        [ts, 10.0, 11.0, 9.5, 10.5, 100.0, "BBB"],56    ])57    f = integrity_flags(df)58    assert f["flag_duplicate_key"].sum() == 259    assert not f["flag_duplicate_key"][2]60