feat(data): 15min双源集成(data_source路由 + baostock格式适配)

- _resolve_dir_key: 15min支持raw/qfq双源(移除raw15min抛错)
- _check_adjust_cfg: 按interval查dir(minute_15_raw_dir/qfq_dir)
- read_parquet_15min: datetime列优先(baostock时分,旧date兼容)
- config: 加 minute_15_qfq_dir/minute_15_raw_dir
- test: 更新raw15min路由断言(6 passed)

实测容器: 600000 15min qfq 336bars close6.1977 / raw 336bars close6.6200,
datetime时分正确(09:45:00). 15min双源分期项落地.
This commit is contained in:
2026-07-09 19:34:43 +08:00
parent a372544045
commit 0810259911
4 changed files with 37 additions and 25 deletions
+10 -5
View File
@@ -65,15 +65,20 @@ def test_iter_bars_raw_missing_dir_raises(monkeypatch):
adjust="raw", cfg=_cfg({})))
def test_iter_bars_raw_15min_unsupported(monkeypatch):
"""raw 仅日线;15min+raw 报错(raw 15min 待分期项)。"""
def test_iter_bars_raw_15min_routes_dedicated_dir(monkeypatch):
"""raw 15min 路由 minute_15_raw_dirbaostock 双源,分期项已落地)。"""
seen = []
monkeypatch.setattr(
"sanguo_trader.data_source._read_fn",
lambda iv: lambda s, st, e, c, dir_key: [],
lambda iv: lambda s, st, e, c, dir_key: seen.append(dir_key) or [],
)
with pytest.raises(ValueError, match="日线"):
list(iter_bars(["600000"], "2024-01-01", "2024-01-31", "15m",
adjust="raw", cfg=_cfg({"minute_15_raw_dir": "/x"})))
assert seen == ["minute_15_raw_dir"]
# 缺 minute_15_raw_dir 配置 → 明确报错(不 fallback,防混源)
with pytest.raises(ValueError, match="minute_15_raw_dir"):
list(iter_bars(["600000"], "2024-01-01", "2024-01-31", "15m",
adjust="raw", cfg=_cfg({"raw_dir": "/x"})))
adjust="raw", cfg=_cfg({})))
def test_unsupported_interval_rejected():