feat: add Tushare Qlib data bridge

This commit is contained in:
2026-07-26 13:41:24 +08:00
parent 48c5f64bbd
commit e5911ca454
15 changed files with 1804 additions and 8 deletions
+35
View File
@@ -17,6 +17,7 @@ sys.path.insert(0, str(ROOT / "src"))
from platforms.qlib_runner import (
QlibUnavailableError,
_main,
_validate_managed_provider_request,
build_alpha158_lightgbm_task,
generate_portable_momentum_signal,
run_native_momentum_backtest,
@@ -91,6 +92,35 @@ class QlibFixtureTest(unittest.TestCase):
end_time="2024-02-01",
)
def test_managed_provider_request_fails_before_terminal_session(self):
evidence = {
"managed": True,
"calendar": {
"start": "2024-01-02",
"end": "2024-01-11",
},
"market": {"name": "tushare_a"},
"benchmark": {"symbol": "SH999999"},
}
with self.assertRaisesRegex(
ValueError,
"simulator consumes the next provider session",
):
_validate_managed_provider_request(
evidence,
market="tushare_a",
benchmark="SH999999",
start_time="2024-01-02",
end_time="2024-01-11",
)
_validate_managed_provider_request(
evidence,
market="tushare_a",
benchmark="SH999999",
start_time="2024-01-02",
end_time="2024-01-10",
)
@unittest.skipUnless(
importlib.util.find_spec("pandas") is not None,
"pandas is optional outside the Qlib environment",
@@ -147,6 +177,7 @@ class QlibCliTest(unittest.TestCase):
"clock_contract": "test-clock",
"strategy_fidelity": "signal-only",
"a_share_rule_fidelity": "approximation",
"run_parameters": {"start_time": "2024-01-02"},
}
with tempfile.TemporaryDirectory() as temp:
output = Path(temp) / "nested" / "summary.json"
@@ -194,6 +225,10 @@ class QlibCliTest(unittest.TestCase):
self.assertEqual(payload["workflow"], "momentum")
self.assertEqual(payload["signal_rows"], 2)
self.assertEqual(payload["portfolio_frequencies"], ["1day"])
self.assertEqual(
payload["run_parameters"]["start_time"],
"2024-01-02",
)
self.assertIn('"workflow": "momentum"', printer.call_args.args[0])
def test_alpha158_cli_dispatches_with_validated_segments(self):