通达信板块管理器(tdx-block-manager)
直改通达信 T0002\blocknew 下的板块文件与注册表,实现板块的注册、滚动备份、
回滚与查看——全程命令行/对话完成,不用在通达信界面里手工点选。
一、通达信板块机制(先懂原理再用工具)
- 板块 = 两个东西:
- 成员文件:<通达信根>\T0002\blocknew\<文件名>.blk(每行一个 7 位码:1=沪0=深,UTF-8 文本)
- 注册记录:<通达信根>\T0002\blocknew\blocknew.cfg(板块名↔文件名映射) - blocknew.cfg 结构:120 字节定长记录,依次拼接:
- 偏移 0~49:板块显示名(GBK 编码,\x00填充)
- 偏移 50~119:blk 文件名(ASCII,\x00填充) - 铁律:
- 只放 blk 文件、不写 cfg → 通达信里不显示(显示名与文件名是分离注册的)
- 文件名必须 ASCII(习惯用拼音缩写,如 显示名「目标条件股」↔ 文件名MBTJG);中文名想显示靠 cfg 里的显示名字段
- 写 blk / cfg 必须在通达信完全退出后——通达信运行中退出会把内存里的板块配置回写,覆盖你的改动
- 写 cfg 前先备份(工具已内置自动备份blocknew_bak_时间戳.cfg)
二、用法(脚本:scripts/tdx_blocks.py)
python scripts/tdx_blocks.py list # 列出全部已注册板块
python scripts/tdx_blocks.py register \
--display "QLB_昨日" --file QLB_ZR --source QLB.blk # 注册新板块(可同时从现有板块复制成员)
python scripts/tdx_blocks.py snapshot \
--from-block QLB --to-file QLB_ZR # 把当前板块滚动另存为"昨日"板块
python scripts/tdx_blocks.py write \
--file QLB_ZR --codes codes.txt # 用代码清单写板块(6 位码自动加市场前缀)
python scripts/tdx_blocks.py restore \
--file QLB --from QLB_bak_20261102_105044.blk # 从备份回滚板块
通用参数:--tdx-root "D:\通达信"(默认自动探测 D:\通达信 / C:\new_tdx 等常见位置)。
安全设计:检测到 TdxW.exe 在运行时,写操作默认拒绝并提示先退出通达信;--force 可跳过检查(不推荐)。
三、推荐场景:今日/昨日/前日 多板块链式对照
让每日自动选股在更新板块前,把"更新前"的历史池子逐级滚动另存:
- 一次性注册(N 板块就注册 N-1 个历史板块):
bash register --display "XX_昨日" --file XX_ZR --source XX.blk register --display "XX_前日" --file XX_QLR --source XX.blk - 每日更新流程里、写
XX.blk之前,按从旧到新的顺序逐级滚动:
bash snapshot --from-block XX_ZR --to-file XX_QLR # 前日 ← 昨日 snapshot --from-block XX --to-file XX_ZR # 昨日 ← 当前 # 最后写 XX.blk = 今日 - 结果:通达信里「XX」=今日、「XX_昨日」=昨日、「XX_前日」=前日,每天自动滚动对照
⭐ 链式滚动铁律:必须从最旧的开始滚(前日←昨日 → 昨日←当前 → 最后写今日)。
顺序颠倒会把中间那份覆盖丢失。
四、故障排查
| 现象 | 原因 | 处理 |
|---|---|---|
| blk 放进 blocknew 重启后仍不显示 | 没注册 blocknew.cfg | 用 register 注册 |
| cfg 记录写入后重启又消失 | 通达信退出时回写覆盖 | 必须先退通达信再写 cfg |
| 显示乱码 | 显示名没用 GBK 编码 | 用本工具 register(内置 GBK) |
| 板块有名字但双击无股票 | blk 内容不是 7 位码 | 用 write 重写(自动补市场前缀) |
| 想找回某天被覆盖的板块 | 有 QLB_bak_*.blk 备份或每日存档 |
用 restore 回滚 |