diff --git a/sanguo_factor/challenger_lgbm.py b/sanguo_factor/challenger_lgbm.py index 1eccb856..66b06cd6 100644 --- a/sanguo_factor/challenger_lgbm.py +++ b/sanguo_factor/challenger_lgbm.py @@ -148,7 +148,11 @@ def _load_close_wide(vnpy_db: str, columns_ref: pd.Index, start: str, end: str) from sanguo_data.config import find_config_path, load_config db = load_config(find_config_path()).data_paths["vnpy_db"] purge_cache(db, start, end) - bars = load_universe_bars(db, start, end, symbols=list(columns_ref)) + # symbols 期望裸代码(universe 内部 guess_exchange 拼 exchange 查库;截面盘 + # 列名带 .SZSE 后缀直传=symbol 全格式查不中→恒空,2026-10-10 真跑实证); + # loader 回拼 vt_symbol=f"{sym}.{ex}" 还原全格式,与截面盘列名天然对齐 + bare = [str(c).split(".")[0] for c in columns_ref] + bars = load_universe_bars(db, start, end, symbols=bare) _ = bars.select(["datetime", "vt_symbol", "close"]).to_pandas() wide = _.pivot(index="datetime", columns="vt_symbol", values="close").sort_index() wide.index = pd.to_datetime(wide.index) diff --git a/tests/factor/test_challenger_lgbm.py b/tests/factor/test_challenger_lgbm.py index 56a185f9..639625e2 100644 --- a/tests/factor/test_challenger_lgbm.py +++ b/tests/factor/test_challenger_lgbm.py @@ -284,7 +284,7 @@ def test_load_close_wide_real_path(monkeypatch): "2025-01-01", "2025-01-31") assert calls["db"] == "fake.db" assert calls["start"] == "2025-01-01" and calls["end"] == "2025-01-31" - assert calls["symbols"] == ["a.SSE", "b.SSE"] + assert calls["symbols"] == ["a", "b"] # 裸码传入(universe 内部拼 exchange;全格式查不中=恒空,10-10 真跑实证) assert isinstance(wide.index, pd.DatetimeIndex) assert list(wide.columns) == ["a.SSE", "b.SSE"] assert wide.loc[pd.Timestamp("2025-01-03"), "a.SSE"] == pytest.approx(11.0)