如何用 Python 获取 A 股历史 K 线数据?(前复权/后复权详解) 一句话回答用一个支持 OHLCV 历史查询的行情数据 API如 AlphaFeed几行代码就能拿到 A 股任意标的的日/周/月 K 线关键是要选对复权方式——算收益率用前复权做长期价格比较用后复权看真实成交价用不复权。下面把整个流程讲清楚。为什么获取 K 线数据没有想象中简单新手常见的做法是从行情软件里导出 CSV或者去网页上扒数据。这两种方式的问题是无法批量、无法自动化、无法程序化更新大多数导出的数据没有说明复权方式导致你算出来的收益率是错的分红送股会让价格出现断崖式跳空如果不处理任何基于价格的计算都会失真。正确的做法是用一个数据 API 直接把结构化的 K 线拉进 Python同时明确指定复权方式。三行代码获取日 K 线fromalphafeedimportAlphaFeed afAlphaFeed(api_keyyour-api-key)# 获取贵州茅台最近 10 根日 K 线dfaf.klines.get(600519.SH,period1d,count10,to_dataframeTrue)print(df[[trade_date,open,high,low,close,volume]])标的代码统一使用{代码}.{交易所后缀}格式后缀交易所示例.SH上交所600519.SH.SZ深交所000001.SZ.BJ北交所920047.BJ.US美股AAPL.US.HK港股00700.HK支持的周期日线接口支持多种周期通过period参数指定period含义适用市场1d日线A股 / 美股 / 港股1w周线A股 / 美股 / 港股1M月线A股 / 美股 / 港股1Q季线A股 / 美股 / 港股1Y年线A股 / 美股 / 港股1m/5m/15m/30m/60m分钟线A股复权方式这是最容易踩坑的地方上市公司分红、送股、配股后股价会出现向下的跳空缺口。这个缺口不是真的下跌而是除权造成的。如果你直接用原始价格算收益率就会凭空多出一笔亏损。复权就是用来消除这种失真的。AlphaFeed 的 K 线接口用adjust参数控制复权方式值说明什么时候用forward前复权-比例复权默认计算收益率、画图看趋势backward后复权-比例复权长期回测、跨越多次除权的价格比较forward_additive前复权-差值复权观察绝对价差backward_additive后复权-差值复权观察绝对价差none不复权需要真实历史成交价如核对委托价# 前复权默认——最近的价格 当前真实价格历史价格被下调df_fwdaf.klines.get(600519.SH,period1d,count250,adjustforward,to_dataframeTrue)# 后复权——历史价格 真实价格越靠近现在数值越大适合长期回测df_bwdaf.klines.get(600519.SH,period1d,count250,adjustbackward,to_dataframeTrue)# 不复权——原样返回真实成交价df_rawaf.klines.get(600519.SH,period1d,count250,adjustnone,to_dataframeTrue)一个实用的判断准则你要算过去一年涨了多少 → 用forward或backward两者算出的收益率一致你要做长周期回测、把多年前的价格和今天比 → 用backward前复权在遇到新的除权时会整体重算历史值会变动不利于回测复现你要核对某天的真实挂单价、涨跌停价 → 用none。比例复权用乘法因子还原价格适合算收益率差值复权用加减法还原适合看绝对价差。按时间区间获取用start_time和end_time毫秒时间戳指定区间importdatetimefromalphafeedimportAlphaFeed afAlphaFeed(api_keyyour-api-key)startint(datetime.datetime(2024,1,1).timestamp()*1000)endint(datetime.datetime(2024,12,31).timestamp()*1000)dfaf.klines.get(000001.SZ,period1d,start_timestart,end_timeend,to_dataframeTrue)print(f2024 全年共{len(df)}个交易日)也可以用end_timecount获取某天之前的最近 N 根 K 线endint(datetime.datetime(2024,6,30).timestamp()*1000)dfaf.klines.get(600519.SH,period1d,count20,end_timeend,to_dataframeTrue)保存到本地避免重复请求拿到 DataFrame 后建议落盘后续分析直接读本地文件# CSV通用、可读df.to_csv(600519_daily.csv,indexFalse)# Parquet体积小、读写快适合大量标的需先 pip install pyarrowdf.to_parquet(600519_daily.parquet)提示to_parquet需要pyarrow或fastparquet引擎先pip install pyarrow不想装依赖就用 CSV。常见问题FAQQ返回的数据包含哪些字段A日线包含symbol、name、trade_date、open、high、low、close、volume分钟线用trade_time代替trade_date。Q默认是什么复权方式A默认forward前复权-比例复权。不指定adjust时即为该值。Q一次能取多久的历史A用count控制返回条数或用start_time/end_time指定任意区间两者可组合。Q需要付费吗A单只标的的历史 K 线在免费额度内即可体验批量、全市场查询需要 Starter 及以上方案。详见官网定价页。小结获取 A 股历史 K 线的关键不是能不能拿到数据而是拿到的是不是你以为的那份数据——复权方式选错后面所有计算都会跑偏。用 AlphaFeed 这类支持显式adjust参数的接口一行代码就能拿到干净、可复现的 OHLCV。

相关新闻

最新新闻

牛顿环干涉的MATLAB仿真:从物理模型到虚拟实验

牛顿环干涉的MATLAB仿真:从物理模型到虚拟实验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 10:21:31
ARM官方ML-KWS-for-MCU源码深度静态评测:从MFCC到CMSIS-NN的完整嵌入式语音识别链路

ARM官方ML-KWS-for-MCU源码深度静态评测:从MFCC到CMSIS-NN的完整嵌入式语音识别链路

1. 项目定位与源码全景规划——ARM 为什么把这份 KWS 示例开源出来圈内做嵌入式或者端侧语音的老伙计,对ML-KWS-for-MCU应该不陌生。这是 ARM 官方在 GitHub 上开源的一套关键词唤醒(Keyword Spotting)参考实现,目标平台直接锁死 …

2026/9/6 10:21:31
高铁测试场景解析:车型组合与枢纽站调度能力验证

高铁测试场景解析:车型组合与枢纽站调度能力验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 10:21:31
2026年MacBook选购指南:从芯片内存到系统优化,避开所有坑

2026年MacBook选购指南:从芯片内存到系统优化,避开所有坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/6 10:21:31
重写_write函数解决CLion中STM32 printf中文乱码问题

重写_write函数解决CLion中STM32 printf中文乱码问题

写这篇文章的起因,是我在 CLion 里调一个 STM32 项目时,发现 printf 输出的中文全是乱码,而且不管怎么改编码设置都无济于事。后来我把目光从 IDE 设置挪到了标准库实现上,一顿排查之后,真正解决问题的居然是重写了一个…

2026/9/6 10:21:30
RK3588部署YOLOv8帧率优化:从NPU到数据链路的实战指南

RK3588部署YOLOv8帧率优化:从NPU到数据链路的实战指南

先说一个我最近被问烂了的问题:在 RK3588 上部署 YOLOv8,标称 NPU 算力 6 TOPS,按理说跑个轻量检测模型应该轻轻松松 30 FPS,可实际一测只有十几帧,甚至还会偶发卡顿。如果你也踩过这个坑,或者正打算在 RK3…

2026/9/6 10:16:30