feat(data): 恢复双源(task#79)—撮合raw+策略qfq, 分红除权准确

用户要模拟=回测准确: raw除权缺口致MA假信号, 必须双源。
- data_source: qfq→qfq_dir(干净qfq), raw→raw_dir; _check_adjust_cfg(cfg提供才校验)
- engine 双bar流: step(raw_bars,qfq_bars)撮合/盯市raw+策略on_bar qfq; run zip(raw,qfq)
- live_orchestrator: warmup用qfq(信号am); 去adjust参数(双源固定)
- raw_redownload --adjust(''raw/'qfq'); config qfq_dir
- 113/113通过
This commit is contained in:
2026-07-08 07:21:33 +08:00
parent ab703e93ba
commit c6b19f4244
7 changed files with 55 additions and 45 deletions
+5 -4
View File
@@ -48,15 +48,15 @@ def prefix_for(code: str) -> str:
return "sh" if code.startswith(("60", "68", "51", "56", "58")) else "sz"
def download_one(ak, code: str, start: str, end: str):
"""新浪源拉 raw 日线,返回 (df, None) 或 (None, err)。"""
def download_one(ak, code: str, start: str, end: str, adjust: str = ""):
"""新浪源拉日线adjust="" raw / "qfq" 前复权),返回 (df, None) 或 (None, err)。"""
sym = f"{prefix_for(code)}{code}"
try:
df = ak.stock_zh_a_daily(
symbol=sym,
start_date=start.replace("-", ""),
end_date=end.replace("-", ""),
adjust="", # raw 不复权
adjust=adjust,
)
except Exception as e: # noqa: BLE001
return None, f"{type(e).__name__}: {str(e)[:100]}"
@@ -100,6 +100,7 @@ def main():
ap.add_argument("--all", action="store_true", help="全市场(读 STOCK_LIST csv")
ap.add_argument("--start", default="2024-01-01")
ap.add_argument("--end", default=None, help="默认今天")
ap.add_argument("--adjust", default="", help="复权: '' raw / 'qfq' 前复权(双源用)")
args = ap.parse_args()
end = args.end or time.strftime("%Y-%m-%d")
@@ -122,7 +123,7 @@ def main():
ok = fail = rows = 0
for i, code in enumerate(codes, 1):
df, err = download_one(ak, code, args.start, end)
df, err = download_one(ak, code, args.start, end, args.adjust)
if df is None:
fail += 1
log.warning("[%d/%d] %s FAIL %s", i, len(codes), code, err)