# 数据源切换记录：通达信本机客户端

## 结果：`run_daily_update.cmd --check` 通过

```
ready              : true          ✅
pythonVersion      : 3.12.10       ✅
missingModules     : []            ✅
missingPaths       : []            ✅
missingSourcePaths : []            ✅
warnings           : []            ✅
sourcePaths:
  tdxRoot   : C:\new_tdx64
  shDaily   : C:\new_tdx64\vipdoc\sh\lday     (4820 files)
  szDaily   : C:\new_tdx64\vipdoc\sz\lday     (4322 files)
  finance   : C:\new_tdx64\vipdoc\cw          (1673 files)
  gbbq      : C:\new_tdx64\T0002\hq_cache\gbbq (5449.8 KB)
```

## 关键结论：静态包路线不必要

原先担心 `gbbq` 没有官方静态包、无法脱离通达信客户端。实测结论是：
**通达信客户端的「盘后数据下载」一次性把全部 5 项数据都生成了**，包括 `gbbq`、
`tdxhy.cfg`、`shs.tnf`、`szs.tnf`、`vipdoc\cw\gpcw*.dat`。
因此不需要抓取官方静态 zip，只需让客户端定期自动执行下载。

在线静态包（`hsjday.zip` 523.8MB / `tdxfin.zip` 523.9MB / `tdxgp.zip` 712.2MB）
仍可作为「长时间没更新后的全量补种」手段，但不必需。

## 已修复的两个环境缺陷

### 1. 依赖缺失（发布包漏打包）

`requirements.txt` 声明 `pyarrow>=15`、`duckdb>=1.0`，但发布包 `vendor\` 里没有。
已安装到 `vendor\`（未改系统 Python）：

```
pyarrow 25.0.1
duckdb  1.5.5
```

### 2. `configure_host.ps1` 写出带 BOM 的 TOML（**脚本 bug**）

原脚本用 `Set-Content -Encoding UTF8`，Windows PowerShell 5.1 会写入 UTF-8 BOM。
而 `src/fundamental_mvp/config.py` 用 `tomllib.loads(path.read_text(encoding="utf-8"))` 读取，
**`tomllib` 不接受前导 BOM**，报错 `Invalid statement (at line 1, column 1)`，
导致 `--check` 的 `sourcePaths` 为空、`ready=false`。

证据：脚本写出的文件首字节为 `EF BB BF`，而脚本自己生成的 `.bak` 备份首字节为 `5B 70 61`
（`[pa`），即原文件无 BOM。

已修：`scripts\configure_host.ps1` 改为显式无 BOM 写入：

```powershell
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText($configPath, $content, $utf8NoBom)
```

并把当前 `config\local_paths.toml` 重写为无 BOM 版本。

> 注意：本机的 `write` 工具也会写入 BOM，修改该 TOML 时必须用
> `[System.IO.File]::WriteAllText` + `UTF8Encoding($false)`。

## 数据下载实测记录（2026-09-14）

通达信「盘后数据下载」窗口（`盘后数据下载`，class `#32770`）实测字段：

- 进度静态文本控件 id=`1224`
- 进度条 id=`501`（class `msctls_progress32`）
- 「下载所有A股类品种的日线数据」按钮 id=`1420`
- 日期范围两个 `SysDateTimePick32`：id=`1237`、id=`1238`
- 「日线和实时行情数据」按钮 id=`1424`
- 「取消下载」id=`1`、「最小化」id=`2`

下载过程分两段自动续跑，完成后文本变为「下载完毕.」：

```
正在下载沪深京日线数据..[20210802-20250802] 9577/9577
正在下载沪深京日线数据..[20250803-20260914] 9577/9577
下载完毕.
```

窗口内官方提示（重要）：

> 交易日在15:45后才能下载到当天沪深京数据，其它市场行情数据请在相应市场收盘以后下载。

**因此自动下载时间应设在 15:45 之后。** 原计划的 15:50 只比门槛晚 5 分钟，偏紧；
建议 16:00 或更晚，给通达信服务器留出生成时间。

`TdxW.exe` 支持的命令行开关（从二进制提取）：

```
/downdata    ← 直接调起数据下载功能
/closejy
/autojy
/datawarn
/specjjdata
/speclofdata
/specextdata
...
```
