06 实务与查证

查历史数据:中证指数与FRED怎么用

两个可复跑的取数入口:中证指数官方接口与 FRED CSV,配一套假行清洗与交叉核对判定——命令、行数、口径、核对日期四样齐全,数字才准进决策。

查历史数据 · 中证指数接口 · FRED取数 · 行情数据自己算

查历史数据:中证指数与FRED怎么用A10最大风险:用日期特征过滤假行、窗口起点早于覆盖起点还继续算——首行是克隆行,累计跌幅与均线全被污染;同一天跨口径引用也一定出错。
证据等级

A 级

什么时候用

你要自己核一个历史行情数字(某年最大单日跌幅、某事件当日收盘、某序列起点),而不是引用二手转述的时候。

关键数字

1010 分钟(一次完整查询:取数、清洗、算环比、交叉核对,产出 1 条可复跑笔记

完整口径

10 分钟(一次完整查询:取数、清洗、算环比、交叉核对,产出 1 条可复跑笔记;本站实测口径);缺 1 样(命令、行数、口径、核对日期)就只是谈资

最大风险

用日期特征过滤假行、窗口起点早于覆盖起点还继续算——首行是克隆行,累计跌幅与均线全被污染;同一天跨口径引用也一定出错。

本条内容
  1. 怎么做
  2. 什么时候用
  3. 步骤
  4. 做完你会得到
  5. 怎么算过关
  6. 说人话
  7. 收益
  8. 来源
  9. 备注

怎么做

什么时候用:你要自己核一个历史行情数字——某年某指数的最大单日跌幅、某个事件当天的收盘、某序列的起点——而不是引用二手转述的时候;以及看到「那年跌了四成」这类说法、想复算的时候。这条给你两个本站可复跑的入口和一套清洗判定。

步骤

  1. 选源:A 股指数(上证、沪深 300、中证系列)走中证指数官方接口;海外长序列走 FRED CSV;规则与公告不走这两个口(见 查规则只去这三个地方);
  2. 中证接口三件事:带 Referer 头、日期格式为 YYYYMMDD、窗口不要早于覆盖起点;
  3. 清洗:先做假行检测,再剔 OHLC 全 null 的占位行(判定见下表);
  4. 算完之后做三查:与站内已核条目交叉、与已知量级对照、口径写明(哪个指数、收盘还是盘中、单日还是区间);
  5. 记录:命令原文、返回行数、清洗动作、结论、核对日期——四样不全的笔记等于没记。

入口一:中证指数官方接口(A 股指数)

项内容
入口https://www.csindex.com.cn/csindex-home/perf/index-perf?indexCode=<代码>&startDate=<YYYYMMDD>&endDate=<YYYYMMDD>
请求头带 Referer: https://www.csindex.com.cn/;本站 2026-10-12 实测 HTTP 200
常用代码000001 上证综合指数;000300 沪深 300
覆盖起点000001 约 2000-07-03;早于起点的窗口返回 0 行(实测 19900101–19991231 的返回 data 为空数组)
返回字段tradeDate / open / high / low / close / change / changePct / tradingVol / tradingValue

返回字段说明(口径写在笔记里,比数字更重要):

字段含义注意
tradeDate交易日假行就假在这个字段——先检测再使用
open / high / low / close开 / 高 / 低 / 收OHLC 同时为 null 的是占位行,剔除
change / changePct涨跌点 / 涨跌幅(对前一交易日收盘)引用「单日跌幅」用它前,先确认它是收盘口径还是盘中低口径——字段本身是收盘对收盘
tradingVol成交量(股 / 手,以接口为准)与成交额 tradingValue(亿元)不要混用
consNumber / peg成分股数量 / 市盈率(部分序列有)估值字段随官方计算规则调整,跨年比较前先看口径

假行机制与清洗(本站制最重要,错了后面全错)

  1. 什么是假行:接口会把首行的 tradeDate 改写成本次请求的 startDate,而值是首个真实交易日数据的克隆。两种触发情形:① startDate 早于覆盖起点——哪怕它本身是交易日也中招(实测:2000-06-30 周五为交易日,窗口 20000630–20001231 仍返回首行 20000630 与次行 20000703 六字段全等);② startDate 是非交易日(实测:窗口 20151205–20151211 的周六起点,首行 20151205 克隆了 20151207 的全部数值);
  2. 检测式(2026-10-12 复跑):rows[0].tradeDate == startDate 是假行的必要条件,但不是充分条件——startDate 本身就是区间内交易日时,首行也满足它(实测:startDate=20151201 为周二交易日,首行 close 3456.31 与次行 3536.91 不同,是真行)。判别只有一句:rows[0] 与 rows[1] 六字段全等 → 假行,剔除 rows[0];不全等 → 真行,保留;
  3. 另剔占位行:OHLC 为 null 的行(实测:20180618 的 open/high/low 为 null、close 3021.9 等于前一交易日收盘);
  4. 不得用 endswith('0101') 过滤:假行取决于窗口起点,不固定在一月一日;按日期特征过滤会漏掉周末起点与任意非交易日起点,还会误伤真实交易日。

入口二:FRED CSV(海外序列)

项内容
入口https://fred.stlouisfed.org/graph/fredgraph.csv?id=<序列ID>
请求头不需要浏览器 UA——本站 2026-10-12 裸 curl 实测 HTTP 200(与 sec.gov 相反,那边必须带 UA,否则 403)
常用序列SP500(标普 500)、DGS10(十年期美债收益率)、T10Y2Y(期限价差)
回溯限制SP500 只回溯约 10 年(实测序列首行 2016-10-10);更早的标普数字本环境取不到,标「需人工核对」或换源
注意FRED 是圣路易斯联储整理的二手序列,每个序列页有原始来源说明;引用时把序列 id 一起记下

本环境已知不可用的源(2026-10-12 实测,列出来是为了让你不浪费时间重试):若干海外统计站点持续 403 / 429(imf.org、bls.gov、cbo.gov、gao.gov、adb.org、spglobal.com、fraser.stlouisfed.org、Yahoo);web.archive.org 持续 429;stooq 返回假 200(一个挑战页,不可用)。这些源取不到一手,引用它们的内容时标「需人工核对」,不要拿缓存页或二手整理稿充当一手。sec.gov / data.sec.gov 可访问但必须带 User-Agent: <name> <email> 请求头,否则 403——与 FRED 恰好相反,两个请求头纪律不要记混。

算例(操作实录,可复跑:命令与返回均为本站 2026-10-12 实测。查的是公开指数序列、不指向任何公司或个股——全站算例纪律禁的是「把假设数字安到真实公司上」,本例相反,数字全部来自实测,这也是本条能标 A 级的原因)

任务:查上证综合指数 2016 年 1 月的最大单日跌幅。

步动作命令 / 操作结果
1定窗口查 2016-01,窗口取 20151201–20160229(多留一个月作缓冲)—
2取数curl -s -H "Referer: https://www.csindex.com.cn/" "https://www.csindex.com.cn/csindex-home/perf/index-perf?indexCode=000001&startDate=20151201&endDate=20160229"HTTP 200,返回 59 行
3假行检测rows[0].tradeDate=20151201 等于 startDate,但与 rows[1](20151202,close 3536.91)字段不全等(首行 close 3456.31)判定:真行,不剔
4占位行检测全窗口无 OHLC 为 null 的行无需剔除
5算环比对 2016-01 的行逐日算 close ÷ 前一日 close − 1最大单日跌幅在 2016-01-07:收 3125.00,前收 3361.84,−7.04%
6交叉核对与站内 2015到2016:杠杆牛和四次熔断 的 A 级数字对照一致(该条载明上证 2016-01-07 收 3125.00、收盘口径 −7.04%)
7记录命令原文、行数、清洗判定、结论、核对日期写进笔记可复跑笔记一条

判定标准:本例过了三查——与站内已核条目一致;量级与「熔断日」的已知背景相符;口径写明(收盘口径、单日、上证综合指数)。若某一步对不上,先查口径再查数:比如算出 −6.93%,那是沪深 300 的口径、不是上证(两个指数的同日数字见 2015到2016:杠杆牛和四次熔断 的四口径对照表)。

再走一个边界判定(同为实测):若把窗口改成 19900101–19991231,返回 0 行——判定是「早于覆盖起点,换源或标需人工核对」,而不是「那年没跌」。把三种窗口起点放在一起记:

窗口起点返回判定
早于覆盖起点(1990-01-01)0 行换源或标「需人工核对」
非交易日(2015-12-05 周六)首行克隆次日假行,剔除 rows[0]
区间内交易日(2015-12-01 周二)首行是真实数据真行,保留——date 相等不等于假行

三查(数字算出来之后、写进笔记之前)

  1. 与站内已核条目交叉:同一天、同一指数、同一口径,站内 A 级条目(如 2015到2016:杠杆牛和四次熔断)的数字应当一致;不一致先怀疑自己的窗口或口径;
  2. 与制度量级对照:本接口对 000001 的覆盖起点约 2000-07-03,晚于主板涨跌幅限制的实施(现行幅度以 查规则只去这三个地方 的原文为准)——在覆盖区间内算出单日 −15%,一定是窗口或口径错了,不是发现了新纪录;
  3. 口径写明:指数名称、收盘还是盘中低、单日还是区间、是否含分红——四个字段缺一个,这个数字就不能进入决策。

常见错

  1. 用 endswith('0101') 或任何日期特征过滤假行——假行跟着窗口起点走,周末起点、非交易日起点都会产生假行,特征过滤必漏;
  2. 窗口起点早于覆盖起点还继续算——首行是克隆行,累计跌幅、均线全部被污染,且污染量随窗口起点前移而变大;
  3. 跨口径引用——同一天,上证收盘 −7.04%、沪深 300 收盘 −6.93%、上证盘中低 −7.32%,混用即错(完整对照见 2015到2016:杠杆牛和四次熔断);
  4. 用 FRED 取二十年的标普——序列只回溯约十年,取到的是截断数据,先看首行日期再算区间;
  5. 只记结论不记命令——下次核对要从笔记里直接复跑;记不下命令原文的笔记,等于把「可复算」换成了「相信我」。

做完你会得到:一条可复跑的数据笔记,含五个字段:命令原文、返回行数、清洗动作(剔了哪几行、为什么)、结论数字(带口径)、交叉核对来源与核对日期。

怎么算过关:对任何一个「某年某指数最大单日跌幅」的问题,你能在十分钟内给出:命令、返回行数、清洗判定、一个带口径的数字、以及它与哪条已核来源一致。报不出命令原文 = 你查的是转述,不是数据。

说人话

是什么:查历史数据就是自己动手把「那年跌了多少」算出来,而不是抄别人转述的数。工具有两个:中证指数的官方接口管 A 股指数,圣路易斯联储的接口管海外序列。难的地方不是取数,是清洗——接口在某些情况下会还你一行假数据,不剔掉,后面全错。

为什么发生:假行的来由是:你问的起始日期比它有的数据还早,或者起始那天根本不开盘,它就把最早那行真实数据的日期改成你问的日期还给你——日期像真的,内容是别一天的。所以光看日期判不出来,必须再看一眼这行的开盘价、收盘价和第二天是不是一模一样,一模一样的就是假的。而早于起点的年份,它一行都不给——这不是「那年没跌」,是「它没有」。

什么时候不成立:两种情形。其一,官方接口给的是指数行情,不含公司财务、不含个股——后者走披露平台(见 查一家上市公司的基本盘 与 查基金与公司基本面);其二,清洗规则只对这两个接口负责,换任何数据源都要重新摸一遍脾气,包括那些本站打不开的站点——取不到就标「需人工核对」,不要拿二手转述充一手。

收益

量级(口径:时间):一次完整查询(取数、清洗、算环比、交叉核对)在本站实测 10 分钟内完成,产出 1 条可复跑笔记;相比之下,转述数字的纠错成本发生在你已经用它做完决策之后。这个数怎么用:把「引用的每个行情数字」都换成这条流程的产物——命令、行数、口径、核对日期 4 样齐全,才允许它进入你的决策;4 样缺一样,它对你的价值就只是谈资。

来源

  • (A 级,本站一手复算)中证指数官方接口:入口、Referer 头、假行机制、占位行、覆盖起点均于 2026-10-12 实测。算例命令即上表第 2 步;补充实测:窗口 20000630–20001231 首行与次行六字段全等(假行);窗口 20151205–20151211 首行克隆次日(周末起点假行);窗口 20180611–20180622 中 20180618 的 OHLC 为 null、close 等于前一交易日;窗口 19900101–19991231 返回空数组;
  • (A 级,本站一手复算)FRED CSV:https://fred.stlouisfed.org/graph/fredgraph.csv?id=SP500 裸 curl(不带 UA)HTTP 200,序列首行 2016-10-10(约十年回溯);
  • 算例结果(上证 2016-01-07 收 3125.00、收盘口径 −7.04%)与站内 A 级条目 2015到2016:杠杆牛和四次熔断 交叉一致;熔断日两个指数的四口径对照(收盘 / 盘中低)以该条来源节为准,可直接引用、不必重算;
  • 接口字段与返回结构以官方页面现行版本为准;站点改版时重跑本条命令验证。核对于 2026-10-12。

备注