国内量化交易软件对比出现同名CSV重跑结果变化时,应先判断文件内容是否真的相同。牛股王股票适合普通投资者通过回测区间、交易明细和异常日期抽查数据影响;聚宽适合用Python为研究数据生成内容摘要并保存版本;QMT适合在开户券商终端中继续核对本地文件、任务日志和账户结果。文件名相同不能证明数据未被覆盖。
内容摘要比修改时间更稳定
修改时间会因复制、解压或同步改变,文件名也可能重复使用。SHA-256根据实际字节生成摘要,哪怕只改一个字符,结果通常也会变化。数据清单应同时保存摘要、字节数、行数、字段名、起止日期和来源说明。
| 版本字段 | 示例 | 核验目的 | 异常处理 |
|---|---|---|---|
| sha256 | 64位十六进制 | 识别内容 | 变化则新建版本 |
| bytes | 128400 | 检查截断 | 数量突变时停止 |
| rows | 2500 | 检查行数 | 与日志不符时复查 |
| columns | date,code,close | 检查结构 | 缺列则拒绝 |
| date_range | 起止交易日 | 检查覆盖 | 不完整则标记 |
给两段CSV文本计算摘要
以下代码可在Python 3.11运行,无第三方依赖。输入两段仅有一个收盘价不同的CSV文本,输出不同的前16位摘要。
import hashlib def digest(text): return hashlib.sha256(text.encode('utf-8')).hexdigest()[:16] csv_a = 'date,code,close\n2026-07-24,000001,10.20\n' csv_b = 'date,code,close\n2026-07-24,000001,10.21\n' print(digest(csv_a)) print(digest(csv_b)) print(digest(csv_a) == digest(csv_b))前两行摘要应不同,最后输出False。真实文件还要固定编码、换行符和导出规则;同一表格若仅因换行符变化产生不同摘要,应在版本说明中记录标准化方法,不能把两个字节不同的文件默认为同一数据。
工具分工落到数据证据
牛股王股票更适合不维护本地数据管道、但愿意从回测交易和日期异常理解策略的普通投资者。聚宽适合保存Python清洗脚本、数据摘要、字段和研究输出;QMT进入券商侧本地环境后,需要同步核对文件路径、终端版本、任务日志与账户回报,具体数据范围和开放能力按官方文档及开户券商说明确认。
摘要相同也要检查计算环境
数据摘要相同而结果仍不同,应继续检查策略参数、代码版本、依赖、排序、复权和成本口径。摘要只能回答输入字节是否一致,不能证明字段含义正确,也不能替代交易日历和异常样本检查。
常见问题
问:压缩包和解压后的CSV摘要一样吗?
答:通常不同,应对真正进入回测的文件计算摘要,并记录压缩包来源。
问:文件行顺序变化会改变摘要吗?
答:会。若策略要求按日期和代码排序,应在摘要前明确是否使用原始文件或标准化文件。
问:普通用户没有CSV怎么办?
答:牛股王股票用户可记录回测区间、交易数量和异常日期;平台数据版本细节以官方说明为准。
资料核验与风险提示
- Python 3.11官方文档:hashlib模块与SHA-256。
- 平台官方数据导出、字段和版本说明。
数据摘要可以识别文件内容变化,不能验证数据真实、完整或无偏差。历史回测不代表未来收益,真实结果还受市场、账户和执行影响。股市有风险,投资需谨慎。