盘后数据下载到底在下载什么
打开通达信,点“盘后数据下载”,界面上会列出一堆选项:日线、五分钟线、一分钟线、专业财务数据、除权除息数据。很多人勾选完就开始下载,但没搞清楚这些数据下载下来之后存在哪里、怎么被调用。
盘后数据下载的本质,是把交易所盘后公布的标准化行情文件,转换成本地通达信能识别的二进制格式。日线数据存在 vipdoc/sh/lday/sh000001.day 这样的路径下,上海市场在 sh 文件夹,深圳在 sz 文件夹。分钟线则放在 minline 目录里,按市场和时间周期分文件夹。

不同时间序列的数据,物理存储是分开的。日线一个文件,五分钟线另一个文件,一分钟线又是独立文件。下载的时候如果没有勾选对应的周期,本地就没有那个时间序列的数据。很多人策略跑出来结果不对,第一件事该查的就是本地到底有没有下载对应周期的数据。
日线数据与分钟线数据的调用差异
日线数据是通达信最基础的时间序列。盘后下载日线,系统会把当天收盘后的日K线追加到 .day 文件末尾。这个文件是变长的,每根K线占32个字节,包含日期、开盘、最高、最低、收盘、成交额、成交量等字段。用通达信的公式系统调用日线数据很简单,C 就是收盘价,O 是开盘价,系统默认取日线周期。
分钟线数据的调用逻辑不一样。通达信的分钟线数据文件按周期分开存储,五分钟线一个文件,一分钟线一个文件。公式系统里用 MIN5 或者 MIN1 来指定周期。盘后下载的时候,五分钟线和一分钟线的数据量差异巨大。一分钟线一天有240根K线,一年就是五万多根,下载全市场一分钟线数据,硬盘占用和下载时间都远超日线。
实际操作中有一个坑:通达信的分钟线数据默认只保留最近若干个月,具体保留多久取决于版本和设置。下载盘后数据时,如果想把分钟线拉长到几年,需要确认软件设置里“分钟线保留数量”这个参数有没有调大。否则下载下来的数据只有最近一段,回测长周期策略就会出问题。
财务数据与除权数据的特殊处理
盘后数据下载里还有一个选项叫“专业财务数据”。这个数据不是时间序列的K线,而是一张张报表快照。下载之后,通达信会把财务数据存成独立的数据文件,公式系统里用 FINANCE 函数族来调用。财务数据的更新频率是季度,跟日线、分钟线完全不是一个节奏。
除权除息数据是另一个容易被忽略的细节。盘后下载时如果勾选了除权除息数据,通达信会在本地记录每只股票的除权信息。这个信息对回测至关重要。直接用未复权的价格跑策略,遇到送转股的时候价格会突然跳水,策略信号会完全失真。通达信公式系统里用 CLOSE 取到的是未复权价格,要得到复权价格需要配合除权数据做处理,或者用 FINANCE(1) 这类函数间接调整。
盘后下载的除权数据默认只覆盖最近一段时间的除权事件。如果回测跨度很长,需要手动补全更早的除权记录。通达信有一个“除权除息”数据下载入口,可以下载历史全量除权数据,这个操作跟常规盘后数据下载是分开的。
不同时间序列数据的实际获取路径
从通达信本地文件直接读取数据,是获取时间序列最底层的方式。日线文件是固定格式的二进制,每32字节一根K线。用Python读取的时候,按 struct 解包,日期字段是整型,价格字段是浮点型。分钟线文件的格式略有不同,字段顺序和字节数需要对照通达信的数据格式文档。
通达信自带的公式系统也能导出数据。在公式管理器里写一个简单公式,用 EXPORT 函数把指定时间序列的数据导出成文本文件。这种方法适合小批量数据获取,全市场全历史数据导出效率很低。
还有一种方式是通达信的“数据导出”功能,在K线图界面右键选择“导出数据”,可以选时间范围和周期。导出的文本文件是逗号分隔的,包含日期、开盘、最高、最低、收盘、成交量、成交额。这个功能对日线数据很友好,分钟线数据量大的时候导出速度会明显变慢。
数据下载后的校验步骤
盘后数据下载完成之后,不能直接拿来用。第一步要检查数据完整性。通达信日线数据文件的大小应该是32字节的整数倍,如果文件大小对不上,说明下载过程中有中断或者文件损坏。分钟线文件同理,按对应周期的字节数做整除校验。
第二步要检查时间序列的连续性。日线数据里,交易日应该是连续的,遇到节假日会跳过。如果发现某段时间的日线数据缺失,说明盘后下载没有覆盖到那个时间段,需要单独补下载。分钟线数据的连续性检查更麻烦,要对照交易日历逐日核对。
第三步要检查除权处理是否正确。随便找一只发生过送转的股票,对比除权日前后的价格。如果下载了除权数据,公式系统里用复权函数处理之后,价格曲线应该是平滑的。如果没有下载除权数据,除权日当天价格会出现断崖式下跌。
盘后数据下载是量化策略的地基。地基没打好,后面写再复杂的策略逻辑都是空中楼阁。不同时间序列的数据获取路径、存储格式、更新频率都不一样,搞清楚这些细节,才能保证策略回测的结果跟实盘逻辑对得上。