QVeris
历史行情数据指南

用于回测的
免费股票数据

比较免费 API、CSV 下载和托管平台,并在相信回测结果前核对复权、退市股票、时间戳、缺口与许可。

Whiteboard workflow for defining a backtest, choosing a free stock data source, checking quality, and running the test

核心摘要

推荐起点

对于许多初次回测,文档清晰的日线 OHLCV API 或 CSV 已经足够;分钟级策略则需要更细粒度数据和严格时间检查。

“免费”的含义

通常伴随历史深度、请求次数、交易所覆盖、更新时效或用途限制,并不代表数据完整。

隐藏风险

看似平滑的价格图仍可能包含幸存者偏差、错误复权、交易日缺口或未来信息。

回测原则

保留原始快照,只标准化一次,自动执行校验,并为每次结果记录准确的数据版本。

选择适合回测的免费股票数据

先写清回测规格:市场、股票池、K 线周期、历史深度、复权方式,以及是否需要退市证券。能够可重复满足这些要求的数据源才是合适的数据源。

历史数据 API

适合按股票代码与日期区间重复查询。应比较 K 线周期、单次最大行数、复权与原始价格、公司行动和调用限额。

CSV 或 Parquet 归档

适合大规模组合扫描,因为文件可版本化并在本地查询,无需反复调用 API。需检查字段、压缩方式和更新频率。

时点股票池

每个历史日期都应使用当时符合条件的股票代码,并包含后来退市的标的。直接套用今天的成分列表,会在策略运行前就引入幸存者偏差。

原始价格与复权价格

模拟成交通常需要当时可交易的原始价格和明确的公司行动;研究总回报可以使用复权序列,但 OHLC 各字段必须采用一致方法。

信息可用时间

基本面和分类数据要保留市场真正能够获知它们的日期与时间。只使用报告期末或后续修订值,会泄露未来信息。

Python 示例:为回测准备行情数据

在计算信号前,把每个来源标准化为相同的 OHLCV 字段,按事件时间排序,并拒绝重复时间戳。请将示例端点替换为文档化的数据供应商。

import os
import requests
import pandas as pd

url = "https://api.example.com/v1/daily"
params = {"symbol": "AAPL", "apikey": os.environ["STOCK_API_KEY"]}
response = requests.get(url, params=params, timeout=20)
response.raise_for_status()

rows = response.json()["data"]
df = pd.DataFrame(rows)
df["date"] = pd.to_datetime(df["date"], utc=True)
df = df.sort_values("date").drop_duplicates("date")
print(df[["date", "open", "high", "low", "close", "volume"]].tail())
步骤为什么重要最低检查项
请求超时和 HTTP 错误处理可避免静默失败。状态码与供应商错误信息。
标准化稳定列名可隔离分析逻辑与供应商格式。类型、UTC 日期、数值列。
验证错误记录可能生成看似可信的错误图表。顺序、重复、空值、价格边界。
对齐信号与成交时钟

信号只能使用决策时点已经可见的数据,成交则应落在之后可交易的事件上。用本根 K 线收盘价生成信号,又按同一收盘价成交,通常属于未来数据偏差。

使用交易所日历

应根据对应场所生成预期交易日,而不是简单排除周末;节假日、提前收盘、停牌和夏令时切换都需要显式处理。

模拟真实可投资性

纳入退市、代码变化、流动性筛选、点差、费用和合理订单规模。遗漏失败公司,可能成为回测收益虚高的主要原因。

冻结训练集与测试集

调参前先按时间切分,只在训练窗口拟合转换规则,并保留最终未触碰区间。对具有时间顺序的市场数据随机拆行并不安全。

用 QVeris 灵活接入股票数据

目前没有一个经过核实的 QVeris 结果,可以提供回测所需的全部时点字段。先通过 QVeris 文档了解调用方式,再到 Playground 检查候选历史数据能力,确认后再冻结数据版本。

  • 发现股票数据能力,并在调用前检查输入参数。
  • 让应用代码只关注股票代码、日期与标准化输出。
  • 当 Agent 需要当前金融数据时,使用可审计的能力调用。

常见问题

哪里能获得免费股票回测数据?

可从文档化的历史数据 API、可下载归档或回测平台数据开始,并按市场、周期、深度、复权和许可筛选。

Yahoo Finance 够用吗?

可用于原型和日线研究,但在正式使用前仍需独立核对复权、缺口、代码历史与使用条款。

回测需要包含退市股票吗?

只要测试历史股票池,就需要包含。排除后来消失的证券,可能显著高估收益并低估风险。

应该用复权收盘价回测吗?

取决于策略。总回报研究可以使用规则明确的复权数据;成交模拟则需要原始可交易价格,并单独处理公司行动。

参考资料与下一步

Massive 股票平面文件文档
Alpha Vantage API 文档
Twelve Data API 文档
使用 Python 获取免费股票数据
QVeris Playground

免费股票回测数据 | QVeris Guides