很多量化项目的第一行代码是: pd.read_csv("bars.csv") 问题通常也从这里开始。 这份数据属于哪个市场?时间戳是 bar 的开始还是结束?是否经过复权处理?最新一根是否已经收盘? volume=0 是无成交、停牌、休市,还是采集失败?这些问题如果在数据进入研究层之前没有答案,后面再精细的因子、参数搜索和 Walk-Forward ,都会建立在不稳定的输入上。 写清楚一份数据契约非常重要。 区分 DataFrame 与数据契约 DataFrame 是一个容器,不能回答“这行数据从哪里来”,也不能回答“当时策略究竟看到了什么”。数据契约则是行情接入层与研究层之间的一份明确约定:字段有什么含义、时间如何解释、哪些记录可以计算信号,以及出问题时如何追溯。 我会为每一根标准化 K 线至少保留以下字段。 字段 含义 为什么要保留 symbol 供应商定义的标的代码 防止自定义 ticker 与真实数据代码混用。 bar_timestamp_utc 原始时间戳转换后...