2026 年股票历史行情数据分析:从 CSV 下载到收益率计算

简介: 本文系统讲解股票行情CSV数据的规范处理:从日线/分钟/逐笔数据选型,到字段校验、复权识别、日期连续性检查,再到代码防篡改、清洗标准化及四大分析前质检项,助你规避复权混用、停牌误填等常见陷阱。

从行情下载到收益率分析,中间至少隔着一次完整的数据校验。交易日缺失可能来自周末、节假日或停牌,价格突然跳变也可能是分红除权,而不一定是市场真实波动。

我做历史行情分析时,会先确认数据连续性和复权方式,再按证券代码分别计算收益率,避免把代码切换或日期错位当成行情变化。

先确定需要哪种行情数据

股票行情数据按时间粒度,大致可以分成三类。

  • 日线数据:一行对应一个交易日,适合研究长期走势、收益率和波动率,也是最容易整理成 CSV 的类型。
  • 分钟数据:常见粒度包括 1 分钟、5 分钟和 30 分钟,文件体积明显更大,对接口频率和存储要求也更高。
  • 逐笔数据:记录成交或委托变化,数据量最大,通常还涉及单独的数据授权。

如果只是练习 pandas、回测基础指标或者制作行情图,我建议先从日线数据开始。直接上分钟线,很容易把时间花在下载失败和字段清洗上。

CSV 文件至少保留哪些字段

一份可以继续分析的日线 CSV,建议保留以下字段:

字段 含义 注意事项
symbol 证券代码 建议同时保留市场标识
trade_date 交易日期 统一为 YYYY-MM-DD
open 开盘价 明确是否复权
high 最高价 应不低于开盘价和收盘价
low 最低价 应不高于开盘价和收盘价
close 收盘价 计算收益率的基础字段
volume 成交量 注意“股”“手”等单位差异
amount 成交额 确认币种和单位
adj_factor 复权因子 做长期序列时建议保留

文件名里最好也写清楚市场、周期和日期范围,例如:

cn_stock_daily_2025-01-01_2025-12-31.csv

半年后再打开文件,光看名字就能知道里面是什么,省得重新猜。

行情采集最常见的几个坑

第一个坑是复权口径混用。同一只股票的原始收盘价、前复权价和后复权价不能直接拼接。遇到分红、拆股等情况,错误的价格序列会产生一个并不存在的暴涨或暴跌。

第二个坑是交易日不连续。周末、节假日、停牌都可能导致日期缺口,不能看到日期缺失就自动补价格。是否填充,要看后续指标的计算方式。

第三个坑是证券代码被表格软件改写。以零开头的代码导入 Excel 后,可能被当成整数。保存 CSV 时,我一般把代码列明确设为字符串。

还有一个容易被忽略的问题是接口限频。批量采集几千个代码时,不要只盯着请求速度。设置合理间隔、失败重试和断点记录,往往比开大量并发更稳。如果采集公开网页,还要遵守网站条款,不绕过登录、验证码和付费授权。

我会怎样整理下载后的 CSV

拿到原始文件后,我通常先做一次标准化:

import pandas as pd

df = pd.read_csv("raw_quotes.csv", dtype={
   "symbol": str})

df["trade_date"] = pd.to_datetime(
    df["trade_date"],
    errors="coerce"
)

price_cols = ["open", "high", "low", "close", "volume", "amount"]
df[price_cols] = df[price_cols].apply(
    pd.to_numeric,
    errors="coerce"
)

df = (
    df.dropna(subset=["symbol", "trade_date", "close"])
      .drop_duplicates(subset=["symbol", "trade_date"])
      .sort_values(["symbol", "trade_date"])
)

df["daily_return"] = df.groupby("symbol")["close"].pct_change()

df.to_csv(
    "stock_daily_clean.csv",
    index=False,
    encoding="utf-8-sig"
)

这里使用 utf-8-sig,主要是为了减少中文字段在部分表格软件中打开时出现乱码的情况。

分析前先做四项检查

我不会下载完就直接算指标,而是先检查:

  • 同一个证券代码和交易日期是否重复;
  • 最高价、最低价与开收盘价的关系是否合理;
  • 成交量、成交额是否出现异常负数;
  • 单日涨跌是否来自复权切换、代码变更或字段错位。

检查通过后,再计算收益率、均线、成交量变化和滚动波动率。这样得到的结果,至少能确认异常来自行情本身,而不是 CSV 在采集或合并时出了问题。

常见问题

Q:股票行情 CSV 可以直接用于回测吗?

不建议直接使用。还需要确认复权方式、停牌处理、退市样本、交易费用以及是否存在未来数据泄漏。

Q:CSV 和数据库应该怎么选?

少量日线数据用 CSV 足够直观。数据达到分钟级、多市场或多年增量更新时,更适合使用 Parquet 或数据库,查询和存储效率会更稳定。

Q:免费行情数据可靠吗?

可以用于学习和初步研究,但要核对授权范围、更新频率与字段口径。正式业务或对准确性要求较高的项目,应优先使用来源明确、许可清楚的数据服务。

相关文章
人工智能 缓存 前端开发
11532 55
人工智能 JavaScript 开发工具
4525 14
开发工具 Swift git
1821 4
人工智能 Java BI
1159 1
人工智能 JavaScript 测试技术
1970 2
Web App开发 人工智能 API
1035 1
缓存 JavaScript Shell
2008 3
人工智能 JavaScript 测试技术
995 4

热门文章

最新文章