fix(factor): WARMUP_BARS 60→120 恢复spec剔新口径(修夹具130根预热而非改口径)+evaluation_filter改datetime对象比较(9M行免逐行strftime) [vps]

This commit is contained in:
2026-08-25 00:09:31 +08:00
parent cfb604588c
commit d00ad7d81d
2 changed files with 11 additions and 10 deletions
+7 -5
View File
@@ -32,10 +32,12 @@ def _row(sym, ex, day, close, volume=100.0, turnover=None):
@pytest.fixture()
def db(tmp_path):
from datetime import date, timedelta
rows = []
# 600000:60根(2017-10~2017-12) + 评估窗内 3 根
for i in range(60):
rows.append(_row("600000", "SSE", f"2017-10-{(i % 28) + 1:02d}", 10.0 + i * 0.01))
# 600000:130根预热(2017-08~2017-12,唯一日期) + 评估窗内 3 根
for i in range(130):
day = (date(2017, 8, 1) + timedelta(days=i)).isoformat()
rows.append(_row("600000", "SSE", day, 10.0 + i * 0.01))
for d in ("2018-01-02", "2018-01-03", "2018-01-04"):
rows.append(_row("600000", "SSE", d, 11.0))
# 000001:只有 2 根(次新,bar_idx<WARMUP 应被 evaluation_filter 排除)
@@ -58,8 +60,8 @@ def test_load_filters_prefix_and_interval(db):
def test_load_lookback_buffer_and_vwap(db):
df = load_universe_bars(db, "2018-01-01", "2018-01-31")
# lookback 生效:2017-10 的 bar 也在(因子窗口预热需要)
assert str(df["datetime"].min()).startswith("2017-10")
# lookback 生效:2017-08 的 bar 也在(因子窗口预热需要)
assert str(df["datetime"].min()).startswith("2017-08")
# vwap = turnover/volume
row = df.filter(df["vt_symbol"] == "600000.SSE").sort("datetime").row(0, named=True)
assert row["vwap"] == pytest.approx(10.0)