docs+fix(data): run_daily_update重写raw+qfq增量 + daily-update-design v3双源

- run_daily_update.sh: 重写raw+qfq增量(跳daily_all_update新浪坏接口KeyError:date,
  持久路径data_cache/daily_update不进tmp, set -uo pipefail不-e); C-S3每日raw(撮合)+qfq(warmup)
- daily-update-design.md: v3.0变更记录+十六节(双源raw/qfq架构/脚本更新清单/launchd15:30部署/准确性验证/与v2关系)
- config/data_platform.yaml: minute_15_qfq_dir/minute_15_raw_dir(15min双源目录)
This commit is contained in:
2026-07-10 08:16:41 +08:00
parent 917d5bca2a
commit 86a7f8ef2d
2 changed files with 80 additions and 36 deletions
+39
View File
@@ -531,6 +531,7 @@ sanguo_vnpy/
| 2026-05-03 | v1.1 | 司马懿评审后修改:interval→15m, 严格增量追加, 日线进度文件, 全局源检测, DB轮转备份, 失败率告警 | 赵云 |
| 2026-05-05 | v1.2 | 东方财富集成:日线主源切换为东方财富(amount真实,反爬策略4s/请求+随机抖动), 腾讯降为备源 | 赵云 |
| 2026-05-06 | v2.0 | **重大架构变更**:BaoStock替代所有主源(无反爬、全量历史、amount真实);15min interval改为1mvnpy DB写入改为本地构建+rsync;新浪API已挂移除;多源fallback机制重构 | 赵云 |
| 2026-07-10 | v3.0 | **双源架构+脚本重构**raw/qfq双源(task#79,5yr全市场29600×2); run_daily_update.sh重写(raw+qfq增量,跳daily_all_update新浪坏接口,持久路径,不set-e); baostock_download.py(15min双源+reconnect retry限流鲁棒); raw_redownload断点续传; launchd 15:30 | 楚锋 |
---
@@ -774,3 +775,41 @@ M2 失败暂停:改为失败率检测(最近100只>80%切换源)。
历史回补:
日线+15minBaoStock(全量历史,无反爬)
```
---
## 十六、v3.0 双源架构 + 脚本重构(2026-07-10
### 16.1 背景:task#79 mixed-adjust 假跌
v2.0 `daily_dir` 是 mixed-adjusthfq bulk + raw tail 拼接),3-30 类单日 -94% 假跌。C-S3 模拟盘撮合/涨跌停需真实价,策略信号需无除权缺口 → **双源**
### 16.2 双源设计(raw + qfq
| 源 | 用途 | adjustflag | 目录(cfg.data_paths|
|----|------|-----------|------|
| **raw** | 撮合/涨跌停/成交价(真实交易价,含除权缺口)| akshare `adjust=""` / baostock `flag=3` | `raw_dir` / `minute_15_raw_dir` |
| **qfq** | 策略 on_bar 信号(前复权,无除权缺口 → MA 信号准)| akshare `adjust="qfq"` / baostock `flag=2` | `qfq_dir` / `minute_15_qfq_dir` |
| daily(mixed) | 仅 backtest 兼容,**模拟盘不用** | - | `daily_dir` |
`data_source.py _resolve_dir_key` 路由:日线/15min 均支持 raw/qfq 双源,缺配置明确报错(不 fallback 防混源)。
### 16.3 脚本更新清单
| 脚本 | 更新 | 用途 |
|------|------|------|
| `run_daily_update.sh` | **重写**:raw+qfq 增量(最近5天),跳 `daily_all_update`(新浪源坏 `KeyError:date`),持久路径 `data_cache/daily_update`(不进 /tmp 重启丢),`set -uo pipefail`(不 -e,单只失败不退)| 每日增量(C-S3 实走)|
| `baostock_download.py` | **新**15min 双源(qfq+raw),`reconnect()`+`download_one max_retries=3`(限流/broken pipe 自动 `bs.logout+login` 重连)| 15min 全量/增量 |
| `raw_redownload.py` | 断点续传(`exists()`/skip 已存在,扩范围重下覆盖)| raw/qfq 全量/增量 |
| `full_deploy_5yr.sh` | **新**5yr 全量部署 pipelineqfq→raw→rsync→验证)| 一次性部署 |
| `verify_dual_source.py` | **新**:容器内双源验证(fetch_day/iter_bars/除权日/抽检)| 部署验证 |
### 16.4 部署与验证
- **launchd** `com.sanguo.data-update`:每日 **15:30**`run_daily_update.sh`(收盘后增量 raw+qfq 最近 5 天 → NASMac 睡眠错过唤醒补跑)
- **数据量**:日线双源 5yr 全市场(qfq+raw 各 ~29600 文件);15min 沪深300 baostock131/300,限流续下,断点续传)
- **准确性验证**:除权日 raw 含缺口 / qfq 平滑(浦发 2022-07-21 raw -5.9% / qfq -0.6%;宁德 2023-04-26 raw -41.8% / qfq +5.4%);跨源一致(日线 raw close = 15min raw 当日末 bar);全市场抽检无 mixed 假跌
### 16.5 与 v2.0 的关系
v3.0 在 v2.0BaoStock 主源 + 本地构建 rsync)基础上,**新增双源(raw/qfq)** 区分撮合价与信号价,解决 mixed-adjust 假跌。`run_daily_update.sh` 从 v1 `daily_all_update` 包装改为 raw+qfq 直接增量(跳过新浪坏接口)。BaoStock 仍是 15min 主源(v2.0 遗产),日线用 akshare 新浪源 `stock_zh_a_daily`adjust ""/qfq 双源)。