feat: operationalize local Tushare Qlib research
This commit is contained in:
@@ -3,8 +3,11 @@ PROJECT_PYTHONPATH := src:.
|
||||
SMOKE_DIR := artifacts/local-smoke
|
||||
RESEARCH_DIR := artifacts/research-smoke
|
||||
PARITY_REPORT := artifacts/mock-parity/report.json
|
||||
TUSHARE_PROVIDER ?= data/qlib/tushare-csi500-2018-2025-v2
|
||||
TUSHARE_SNAPSHOT ?= artifacts/local-tushare/scoped-source-manifest.json
|
||||
TUSHARE_EVIDENCE_DIR ?= artifacts/tushare
|
||||
|
||||
.PHONY: test architecture standard bundle smoke verify research research-verify parity parity-verify doctor secret-scan status status-check notebook-check notebook-smoke local
|
||||
.PHONY: test architecture standard bundle smoke verify research research-verify parity parity-verify doctor secret-scan status status-check notebook-check notebook-smoke tushare-check-root tushare-snapshot tushare-build tushare-verify tushare-lineage tushare-backtest tushare-replay local
|
||||
|
||||
test:
|
||||
PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m unittest discover -s tests -p '*.py' -q
|
||||
@@ -56,4 +59,69 @@ notebook-check:
|
||||
notebook-smoke:
|
||||
$(PYTHON) tools/run_colab_notebook.py notebooks/quant_os_colab.ipynb --execute
|
||||
|
||||
tushare-check-root:
|
||||
@test -n "$(TUSHARE_MIRROR_ROOT)" || (echo "set TUSHARE_MIRROR_ROOT=/path/to/tushare-mirror" >&2; exit 2)
|
||||
|
||||
tushare-snapshot: tushare-check-root
|
||||
$(PYTHON) tools/tushare_snapshot.py \
|
||||
--mirror-root "$(TUSHARE_MIRROR_ROOT)" \
|
||||
--start 2018-01-01 \
|
||||
--end 2025-12-31 \
|
||||
--apis daily adj_factor trade_cal stock_basic index_daily index_weight \
|
||||
--index-codes 000905.SH \
|
||||
--output "$(TUSHARE_SNAPSHOT)"
|
||||
|
||||
tushare-build: tushare-check-root
|
||||
$(PYTHON) tools/tushare_qlib.py build \
|
||||
--mirror-root "$(TUSHARE_MIRROR_ROOT)" \
|
||||
--output-dir "$(TUSHARE_PROVIDER)" \
|
||||
--start 2018-01-01 \
|
||||
--end 2025-12-31 \
|
||||
--market-name tushare_csi500 \
|
||||
--benchmark-index-code 000905.SH \
|
||||
--universe-index-code 000905.SH \
|
||||
--minimum-observations 60 \
|
||||
--ohlc-policy fail \
|
||||
--output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-build.json"
|
||||
|
||||
tushare-verify:
|
||||
$(PYTHON) tools/tushare_qlib.py verify "$(TUSHARE_PROVIDER)" \
|
||||
--output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-verify.json"
|
||||
|
||||
tushare-lineage:
|
||||
$(PYTHON) tools/tushare_lineage.py \
|
||||
--source-manifest "$(TUSHARE_SNAPSHOT)" \
|
||||
--provider-dir "$(TUSHARE_PROVIDER)" \
|
||||
--output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-lineage.json"
|
||||
|
||||
tushare-backtest:
|
||||
PYTHONHASHSEED=0 PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m platforms.qlib_runner \
|
||||
--provider-uri "$(TUSHARE_PROVIDER)" \
|
||||
--market tushare_csi500 \
|
||||
--benchmark SH000905 \
|
||||
--start 2019-01-02 \
|
||||
--end 2025-12-30 \
|
||||
--feature-start 2018-01-02 \
|
||||
--lookback 20 \
|
||||
--topk 50 \
|
||||
--n-drop 5 \
|
||||
--rebalance weekly \
|
||||
--output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-momentum-run-1.json"
|
||||
|
||||
tushare-replay: tushare-backtest
|
||||
PYTHONHASHSEED=0 PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m platforms.qlib_runner \
|
||||
--provider-uri "$(TUSHARE_PROVIDER)" \
|
||||
--market tushare_csi500 \
|
||||
--benchmark SH000905 \
|
||||
--start 2019-01-02 \
|
||||
--end 2025-12-30 \
|
||||
--feature-start 2018-01-02 \
|
||||
--lookback 20 \
|
||||
--topk 50 \
|
||||
--n-drop 5 \
|
||||
--rebalance weekly \
|
||||
--output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-momentum-run-2.json"
|
||||
cmp "$(TUSHARE_EVIDENCE_DIR)/csi500-momentum-run-1.json" \
|
||||
"$(TUSHARE_EVIDENCE_DIR)/csi500-momentum-run-2.json"
|
||||
|
||||
local: architecture standard test bundle smoke verify research research-verify parity parity-verify doctor secret-scan status-check notebook-check notebook-smoke
|
||||
|
||||
Reference in New Issue
Block a user