#!/usr/bin/env python3 # -*- coding: utf-8 -*- """fix_vps_config.py — 单元2: VPS config data_paths 统一到 C:/sanguo_vnpy_v2/data (正斜杠)。 - 备份原 config -> data_platform.yaml.bak_nas (NAS 路径版) - data_paths 改 VPS 本地 + daily_dir 统一 qfq (消除 daily/ vs qfq/ 分叉) - 保留其他段 (yaml safe_dump, 丢注释但语义不变) - 改完立即调 read_parquet_daily 验证 datareader 能读本地 注: rsync 同步仓库 config 会覆盖 VPS config (NAS 版)。部署 rsync 须 --exclude config, 或 VPS 用独立 config 文件。此处先改 VPS config 让回测读本地, 部署排除留作 TODO。 """ import shutil import sys from pathlib import Path import yaml CFG = Path(r"C:\sanguo_vnpy_v2\config\data_platform.yaml") bak = CFG.with_suffix(".yaml.bak_nas") if not bak.exists(): shutil.copy2(CFG, bak) print(f"backup -> {bak.name}") else: print(f"backup 已存在: {bak.name}") d = yaml.safe_load(CFG.read_text(encoding="utf-8")) print("OLD data_paths:", d.get("data_paths")) d["data_paths"] = { "daily_dir": "C:/sanguo_vnpy_v2/data/qfq", "raw_dir": "C:/sanguo_vnpy_v2/data/raw", "qfq_dir": "C:/sanguo_vnpy_v2/data/qfq", "minute_15_dir": "C:/sanguo_vnpy_v2/data/minute_15", "minute_15_qfq_dir": "C:/sanguo_vnpy_v2/data/minute_15", "minute_15_raw_dir": "C:/sanguo_vnpy_v2/data/minute_15", "vnpy_db": "C:/sanguo_vnpy_v2/data/quant_trading.db", "stock_list": "C:/sanguo_vnpy_v2/data/stock_basic_info.csv", } CFG.write_text(yaml.safe_dump(d, allow_unicode=True, sort_keys=False), encoding="utf-8") print("NEW data_paths:", d["data_paths"]) # 验证 datareader 读本地 sys.path.insert(0, r"C:\sanguo_vnpy_v2") from sanguo_data.config import load_config from sanguo_data.datareader import read_parquet_daily cfg = load_config() print("cfg daily_dir:", cfg.data_paths["daily_dir"]) print("cfg vnpy_db:", cfg.data_paths["vnpy_db"]) bars = read_parquet_daily("600519", "2026-07-01", "2026-07-22", cfg) print("600519 bars:", len(bars), "last:", bars[-1].datetime.date() if bars else "NONE") print("CONFIG FIX DONE" if bars else "CONFIG FIX WARN: 0 bars")