QVeris

金融与市场数据

用于回测的历史市场数据

选择保留历史时点范围、公司行动和缺失记录的数据,并将时间戳与现实成交及成本对齐。

发布日期:2026年4月13日 · QVeris团队制作

多屏幕上的历史价格图表与市场分析
多屏幕上的历史价格图表与市场分析
多屏幕上的历史价格图表与市场分析

用于回测的历史市场数据必须匹配决策时钟

应按策略的信息集选数据,而不是按宣传的最长历史选数据。日频基本面策略需要时点正确的报表、申报可用时间、公司行动与历史成分;日内策略需要交易日历、时间戳、报价或成交粒度、缺失K线策略、延迟假设与现实价差。即使数据今天准确,只要包含后续修订,也可能不适合模拟过去决策。

UNIVERSE当时可交易谁?

活跃、退市、更名、被收购和多股类证券,以及历史指数或筛选成分。

INFORMATION当时知道什么?

可用时间、修订、财期、来源、单位、币种与版本。

EXECUTION当时如何成交?

信号延迟、下一可成交价格、买卖价差、费用、滑点、成交量与市场冲击。

当数据质量可能改变回测结论时,请使用本指南

本指南适合量化研究人员、AI 投资智能体工程师、回测平台团队、数据工程师与模型风险审核人员,目标是构建可解释、可复现的历史数据集。内容聚焦研究与受控模拟,不涉及自主下单,也不承诺策略在实盘中有效。

研究因子与组合测试

在每个决策日重建历史成分、特征、价格与成本。

工程版本化数据管道

规范化供应商数据,同时保留原始载荷、时间戳、结构与血缘。

治理可审计 AI 工作流

证明每项研究结果由哪些数据、工具、参数与代码产生。

下载数据前先写清研究契约

应先明确决策时间、可投资范围、资产类别、交易场所、币种、时区、常规或盘前盘后时段、数据粒度、复权规则、执行延迟、成本以及训练—验证—测试窗口。只要其中一项未定义,两名工程师就可能为同一策略构建不同数据集,而且都看似正确。

决策项必须定义保留证据
投资范围历史成分、生效日期、非活跃与退市证券证券主数据快照与成分版本
信息时钟事件、发布、申报、接收与决策时间时区、来源时间戳与获取时间
执行模型可成交价格、延迟、价差、费用、滑点、借券与容量书面假设与情景参数

分离原始历史、时点连接、模拟与审计

供应商采集层应与研究就绪数据集分离。原始载荷与结构进入版本化证券主数据、交易日历和公司行动存储;时点连接生成不可变研究快照;回测引擎通过明确执行模型消费这些快照;审计层记录数据、代码、参数与结果。

01原始供应商层

请求、载荷、结构、获取时间与供应商标识。

02参考数据层

证券身份、代码历史、场所、交易时段与公司行动。

03PIT 数据集构建层

As-of 连接、缺失数据规则、复权策略与验证报告。

04回测引擎

信号、可成交价格、成本、组合记账与风险约束。

05样本外门禁

锁定时间窗口、调参边界与最终评估策略。

06审计层

数据集版本、代码哈希、参数、随机种子、日志与生成报告。

通过八个受控步骤构建时点正确的回测数据集

01冻结历史投资范围

保存成分生效日期,并包含后来消失的证券。

02采集原始价格与日历

保留供应商字段、时区、场所、周期、请求与获取时间。

03版本化公司行动

把拆股、分红、并购、分拆与代码变更和原始K线分开保存。

04按可用时间连接特征

使用记录实际可观察时间,而不只是其描述的财期或事件日期。

05模拟可执行订单

适当延后成交,并建模价差、费用、滑点、借券与容量。

06锁定样本外窗口

分离训练、调参与评估,并保存参数、代码和数据哈希。

07运行基准数据检查

测试已知拆股、退市、节假日、缺失周期与修订日期。

08冻结研究产物

发布不可变清单,把数据集、代码、配置与结果绑定在一起。

按时间向前切分,而不是随机打乱历史

随机交叉验证会让后来的市场环境影响更早的训练折,并破坏策略在生产中面对的时间顺序。应使用扩展或滚动训练窗口,只在历史部分调参,再在下一个未触碰区间评估。当标签、特征或持仓跨越切分边界时,应增加 gap 或 embargo。

训练只使用当时可用历史

在每个训练窗口内冻结特征定义与转换,不能使用完整样本统计量进行标准化。

调参模型选择留在历史内部

在测试区间之前的验证区间选择参数。反复查看测试结果会让测试集变成训练数据。

测试锁定最终留出集

只有在数据、特征、参数与成本假设冻结后才运行最终留出集,并报告每个窗口,而不只报告汇总值。

官方 scikit-learn TimeSeriesSplit 文档说明了按时间排序的折叠方式和可选 gap 参数。

阻止让回测表现优于现实的捷径

SURVIVORSHIP当前标的重写历史

用今天的成分构造历史范围,会静默删除破产、退市和被剔除标的。必须按每个决策日重建成分。

LOOK-AHEAD期间日期不等于可用时间

年末报表并不会在年末立即可知。应按申报或发布日期连接,并单独保存后续修订。

ADJUSTMENT后复权改变价格历史

保留原始值与事件表,对信号、成交、股数和组合记账一致应用一套书面策略。

EXECUTIONK线不是保证成交价

基于收盘价生成的信号不能自动按同一收盘价成交。应加入决策延迟、价差、流动性、费用与市场冲击。

根据执行模型选择日频、日内、成交或报价数据

当信号在收盘后形成、订单最早在下一可交易时段执行时,日频OHLCV可能足够。日内K线适合分时规则,但会压缩周期内成交与报价的先后顺序。成交数据能看到实际成交,却不展示完整机会集合;报价数据增加买价、卖价和价差信息,同时显著提高存储与处理要求。粒度更细不等于更真实,策略必须定义哪个事件能够触发决策、哪个后续事件能够成交。

DAILY组合与因子测试

核验交易日、官方收盘定义、拆股与分红处理、非交易日、过期价格和下一时段执行。

INTRADAY时间敏感策略

核验K线边界、时区、夏令时、集合竞价、盘前盘后、周期缺口,以及无成交时K线为空还是缺失。

TRADE / QUOTE微观结构与成交

模拟订单前核验交易场所、条件代码、更正、取消、序列、报价方向、NBBO假设与时间戳精度。

结构漂移同样重要。供应商字段、枚举值、端点默认值和复权行为可能在首次下载后变化。应在规范列旁保存结构版本与原始载荷,把回填视为新数据版本,比较行数和数值变化,并且绝不覆盖曾生成报告结果的快照。

版本化数据集契约,并执行向后 as-of 连接

数据清单应让团队无需阅读 Notebook 注释也能复现数据决策。把它与不可变数据集放在一起,并在每次运行前验证。

{
  "dataset_version": "us-equity-pit-2026-07",
  "universe_as_of": "2024-01-01",
  "include_delisted": true,
  "session": "regular",
  "timezone": "America/New_York",
  "bar_interval": "1d",
  "price_adjustment": "split_and_dividend",
  "feature_time_field": "available_at",
  "fill_rule": "next_session_open",
  "cost_model": {"commission_bps": 1, "slippage_bps": 5}
}

对于不规则到达的特征,应先排序两张表,并让每个决策行只连接当时已经可用的最新记录。向前连接会泄露未来信息。

features = features.sort_values("available_at")
decisions = decisions.sort_values("decision_at")

dataset = pd.merge_asof(
    decisions,
    features,
    left_on="decision_at",
    right_on="available_at",
    by="instrument_id",
    direction="backward",
    allow_exact_matches=True
)

assert (dataset["available_at"] <= dataset["decision_at"]).all()

FMP 等供应商可以提供原型中的一个数据层,但仍应对照当前账户验证历史范围、复权行为、非活跃证券覆盖、限制与权利,并在规范列旁保存供应商响应与获取时间。

需求在FMP核验本地保存
Daily / intraday OHLCV周期、时区、历史、复权字段、缺口原始响应、请求、获取时间
Fundamentals财期、申报日期、修订、单位数据版本与可用时间
Universe非活跃与退市代码、标识历史成分生效区间

实施资料:pandas merge_asof 与 FMP API 快速入门。

无法复现同一运行的历史数据集应被拒绝

  • 覆盖: 预期交易日、标的、场所与退市覆盖,并有明确缺口报告。
  • 时间: UTC规范、交易所日历、夏令时规则与可观察时间连接。
  • 经济性: 拆股、分红、费用、价差、滑点、借券与容量。
  • 可复现: 不可变快照、结构版本、代码哈希、参数、随机种子与运行日志。
  • 权利: 允许的存储、衍生使用、团队访问、发布与再分发。
  • 身份: 稳定证券 ID、代码变更、上市地与多股类证券解析正确。
  • K 线: 最高价不低于开盘或收盘价,最低价不高于它们,周期边界与交易日历一致。
  • 公司行动: 已知拆股、分红、并购与退市得到书面规则规定的处理。
  • 泄漏: 每个特征满足 available_at ≤ decision_at,修订值保留为独立版本。
  • 错误: 无记录、休市、授权拒绝、超时、限流与供应商失败可明确区分。

在历史数据构建开始前设置边界

安全凭据与权利留在服务端

使用范围受限的密钥,对日志脱敏,把供应商授权绑定到工作负载,并按合同限制存储或再分发。

成本批量获取前先估算

限制证券、场所、回看期、结构、页数、重试与响应大小。缓存不可变原始分区,避免重复下载未变化历史。

延迟测量完整构建链路

跟踪供应商、网络传输、规范化、PIT 连接、验证与快照发布,而不只是 API 响应延迟。

把可疑表现追溯到数据契约

现象优先检查原因修复动作
收益异常高前视连接、仅幸存者范围、同收盘价成交审计可用时间、历史成分与执行延迟
拆股日显示暴跌混用原始与复权价格;缺少事件因子从原始价格与版本化公司行动重建
多次运行不一致供应商回填、可变快照、结构或代码漂移固定数据集、结构、代码、参数、随机种子与依赖
周期缺失节假日、停牌、低流动性、分页缺口或供应商失败比较交易日历、缺口报告与原始请求日志

把 discover、inspect、probe、call、validate 与 audit 作为独立门禁

01discover

按所需范围发现历史价格、证券主数据、公司行动或监管文件能力。

02inspect

检查参数、覆盖、供应商身份、示例、输出结构与质量信号。

03probe

在大规模历史数据执行前验证候选参数并取得报价。

04call

执行有界请求,并保留搜索、工具、执行与供应商请求 ID。

05validate

应用身份、日历、时间戳、复权、缺口、权利与可复现性检查。

06audit

使用调用历史与积分账本核对结果和最终结算。

工具与来源控制

QVeris可让AI工作流在日期、额度、供应商身份与来源元数据约束下调用已授权行情、报表与文件工具。模型总结前应先保存原始证据。

研究责任仍然存在

QVeris不会自动消除前视或幸存者偏差,不保证成交,不验证策略,不授予数据权利,也不承诺实盘表现。这些需要研究设计、测试、合同与人工复核。

相关指南:市场数据 MCP 服务器、金融数据 MCP 服务器以及财务报表分析。

用于回测的历史市场数据常见问题

回测需要哪些历史市场数据?

让投资范围、粒度、时间戳、公司行动、退市、特征与执行假设匹配策略决策时钟。

回测应使用复权还是未复权价格?

保留原始价格与事件,再对信号、成交、股数和记账一致应用书面策略。

如何避免幸存者偏差?

使用历史成分,并包含每个模拟日期可投资的退市、被收购和更名证券。

如何避免前视偏差?

按可用时间连接每个特征,并把模拟行动延后到信息可观察之后。

免费历史数据足够回测吗?

可用于原型,但质量取决于退市、复权、缺口、时间戳、历史、权利与可复现性,而不只是价格。

QVeris能帮助处理回测数据吗?

QVeris可治理已授权工具与来源,研究系统仍负责时间对齐、偏差控制、执行与许可。

OHLCV K 线足够用于日内回测吗?

只有当策略与成交模型不需要 K 线内部被压缩的事件顺序、价差、深度或场所信息时才可能足够。执行敏感研究可能需要成交、报价或订单簿数据。

核对时间戳、连接、评估、供应商与 MCP 行为

档案链接有效不代表已获访问权限、字段可用、价格确定或当前调用成功;执行前须检查当前契约。

用于回测的历史市场数据 | QVeris Guides