最近在整理自己的量化分析工具箱把过去两年用过的数据方案重新复盘了一遍正好有朋友咨询Python上哪套接口做股票分析最省心。我自己是从Tushare换到Wind试用版、中间还自己写过爬虫最后长期停在AKShare上的。这个库在圈子里口碑一直不错GitHub上Star数很高社区更新也勤快值得专门写一篇实际使用笔记。AKShare是一个基于Python的开源财经数据接口库核心能力是通过各类公开网页接口把沪深A股、港股、美股、期货、基金、宏观指标等数据统一封装成规范的数据结构返回给调用者。对个人投资者、量化爱好者和独立研究者来说它的吸引力很直接免费、开源、覆盖范围广、持续维护。这篇文章适合正在选型数据源的Python开发者以及想自己动手做股票分析但不想被商业数据源价格劝退的朋友。1. 为什么我最终把AKShare作为主力数据源1.1 免费之外真正打动我的是接口的顺手程度很多人一上来就对比AKShare和Tushare Pro哪个好但我的真实体验是这两个工具的设计思路差别很大。Tushare Pro走的是积分制路线注册后基础接口能用但想调高频数据、完整财务数据需要攒积分或者付费对刚入门的人存在门槛。AKShare的思路不一样它的数据源主要是东方财富、同花顺、新浪财经这些公开网页的数据接口项目本身只是把这些接口统一封装成Python函数所以只要这些网站公开能看的数据AKShare基本都能拉不需要额外的积分体系。更关键的是返回值格式。AKShare几乎所有接口都返回pandas的DataFrame对象列名直接是中文比如开盘收盘涨跌幅。这意味着我拿到数据后直接就能用pandas做计算不需要像自己写爬虫那样还得解析Json、处理嵌套结构。省下来的时间不是一点半点。用生活化的方式理解自己写爬虫像是去菜市场挨个摊位砍价买菜Tushare Pro像是办了一张会员卡、部分菜要积分换AKShare则像一个摆好了所有菜品、还帮你洗好切好的生鲜超市——你只管拿回家做菜就行。1.2 与几种常见方案的横向对比我把自己实际对比过的几条路线整理成一张表方便大家按自己的情况判断方案费用数据覆盖学习成本稳定性适合场景AKShare免费A股、港股、美股、基金、期货、宏观等低函数即接口中高依赖数据源网页变动个人研究、策略回测、日常跟踪Tushare Pro积分制部分付费偏A股为主数据质量高中需要申请token和积分高对数据质量有要求的研究者Wind/Choice按年收费价格高极全中自带终端和API极高机构用户、专业投研自己写爬虫免费但费人力可定制高需维护解析逻辑低目标网站改版就挂有特殊数据需求且时间充裕从上表能看出来AKShare的定位非常清晰它不是万能的数据质量也比不上Wind这种商业终端但对于个人量化研究和日常股票分析来说覆盖面和性价比是最均衡的。我的体会是先用AKShare跑通整个分析流程等真正有商业化需求再考虑付费数据源这条路最务实。还需要提一句它的更新机制。AKShare基本保持较高频率的版本更新因为底层数据源的网页结构一变接口就会失效所以社区会快速修复。这意味着你用的时候要多留意版本尽量pip install akshare --upgrade保持最新否则很容易遇到昨天还能跑今天报错的尴尬。2. 环境准备与五类高频股票接口实战2.1 安装和第一个数据请求安装没有特殊之处直接在命令行执行pip install akshare --upgrade需要Python 3.8以上版本这个在官方文档里有明确说明。装完之后建议先验证一下版本号import akshare as ak print(ak.__version__)能正常输出版本号说明环境没问题。接下来跑一个最简单的接口拉取A股历史日线行情import akshare as ak df ak.stock_zh_a_hist( symbol000001, perioddaily, start_date20240101, end_date20240301, adjustqfq ) print(df.head())这段代码的含义symbol是股票代码000001是平安银行period是K线周期start_date和end_date是起止日期adjust是复权方式。这里我特意用了qfq前复权因为做技术分析、画均线、算涨跌幅时前复权数据能消除分红送股造成的价格跳空让指标曲线连续。第一次跑通这个接口后你基本就掌握了AKShare的调用逻辑——记住一句话AKShare的函数名就是你要什么数据参数就是数据的筛选条件。后续所有接口都是这个套路。2.2 每一类接口到底解决什么问题我在实际分析中经常用的接口大约是五类按业务含义拆开看就很好记了第一类是历史行情接口代表就是stock_zh_a_hist。它返回的是股票过去一段时间每天的开高低收、成交量、成交额、换手率等是做技术分析、计算收益率、回测策略的基础数据。第二类是实时行情快照最常用的是stock_zh_a_spot_em。这个接口返回沪深京全部A股某一天的实时数据快照包括最新价、涨跌幅、成交额等。我每天收盘后会拉一次全市场快照用来做涨幅榜、选股排序效率很高。第三类是个股基本信息用stock_individual_info_em。输入股票代码后返回公司名称、行业、总市值、流通市值、上市日期这些基础资料。做个股筛选时行业归属和市值规模是分组的核心维度。第四类是财务数据常用的是stock_financial_abstract。它返回上市公司的主要财务指标摘要比如营收、净利润、资产负债率、ROE等。做基本面分析时这些数据比行情数据更容易拿到手因为不用翻财报PDF。第五类是资金流向用stock_individual_fund_flow。它返回个股的大单、中单、小单净流入数据。虽然资金流向指标的解读有争议但配合涨跌幅看短线情绪还是有一定参考价值。我建议新手上路先把这个分类框架记住后续需要什么数据就往对应类别里找不用面对网站上海量的函数列表不知所措。3. 从行情到基本面完整跑通一只股票的常规分析流程3.1 先解决数据清洗和字段规范化AKShare返回的数据虽然已经是DataFrame但直接拿来做计算前我强烈建议先做两件小事。第一把列名里的空格和特殊符号清理掉第二把日期的字符串类型转成datetime类型。否则后面做时间序列操作时踩坑的几率很高。下面是我常用的清洗代码可以直接抄import pandas as pd import akshare as ak # 获取原始数据 raw_df ak.stock_zh_a_hist( symbol000001, perioddaily, start_date20230101, end_date20240301, adjustqfq ) # 列名清洗去掉空格统一为小写 df raw_df.rename(columnslambda x: x.strip()) df.columns [col.lower() for col in df.columns] # 日期转datetime并设为索引 df[日期] pd.to_datetime(df[日期]) df df.set_index(日期).sort_index() print(df.head())这里有个细节要注意rename(columnslambda x: x.strip())是为了防止列名里有肉眼看不见的空格。AKShare不同版本的返回列名格式偶尔会有变化统一清洗一次后面代码就不会因为列名对不上而报错。3.2 计算日收益率与波动率拿到清洗后的行情数据接下来的操作就完全是pandas基本功了。计算日收益率、20日滚动波动率、60日均线这些指标是任何股票分析都绕不开的基础组件。# 日收益率 df[daily_return] df[收盘].pct_change() # 20日滚动年化波动率252个交易日近似一年 df[volatility_20] df[daily_return].rolling(window20).std() * (252 ** 0.5) # 60日均线和120日均线 df[ma_60] df[收盘].rolling(window60).mean() df[ma_120] df[收盘].rolling(window120).mean() # 观察最新几行 print(df[[收盘, daily_return, volatility_20, ma_60, ma_120]].tail())这样的好处是所有指标都在同一个DataFrame里后续画图、回测、筛选都顺手。我自己习惯在分析流程一开始就把能算的指标全部算好后面就不用反复回头重算。3.3 拉取财务摘要和资金流向拼接基本面信号行情只是价格维度我还想快速看一下公司基本面。AKShare的stock_financial_abstract可以一次拉回多项核心财务指标finance_df ak.stock_financial_abstract(symbol000001) print(finance_df.head())这个接口返回的字段比较多有净利润、营业收入、资产负债率、净资产收益率等。实际使用时我通常只挑几列key_metrics finance_df[ finance_df[指标].isin([净利润, 营业总收入, 净资产收益率(ROE)]) ] print(key_metrics)需要注意财务数据是定期披露的一年四次季报、半年报、年报不是每天变化。所以财务数据更适合做中低频的策略筛选而不是每天高频跑。再看资金流向接口fund_flow ak.stock_individual_fund_flow(stock000001, marketsh) print(fund_flow.tail())这个接口返回每天的净流入和分类资金数据。market参数要区分sh和sz因为沪深两大交易所的代码体系不同。我自己踩过坑用marketsz去查沪市股票结果返回空数据排查了半天才发现是参数写错了。3.4 把行情、财务、资金流揉成一张综合评分表数据都备齐后分析动作就变成了简单的拼表打分。比如我想快速判断一支股票当前处在什么状态可以这样组织行情维取最新收盘价相对60日均线的偏离度偏离太大注意回调风险基本面维ROE是否连续高于15%净利润同比是否为正资金维近5日大单净流入是否为正作为短期情绪参考把这三个维度的信号汇总每满足一个条件记一分最后加总。这样一只股票在当前时点的综合状态就很直观了。这本质上是一个迷你多因子打分模型虽然粗糙但作为数据分析入门的完整闭环非常值得动手跑一遍。4. 实际调用中的那些坑反爬、字段变动与数据清洗4.1 接口突然失效的真相与应对策略用AKShare时间长了一定会遇到昨天代码还能跑今天报错的情况。这不是代码问题多半是底层数据源网页结构变了。我有一次早上跑批量任务发现stock_zh_a_spot_em返回空数据一开始以为是网络问题查了半天去GitHub Issues一看很多人都在反馈同样的情况官方在几小时后发布了新版本修复。这个经历给我的教训是三条第一AKShare一定要保持版本更新出了问题先升级再排查第二批量任务最好做异常捕获单次接口失败不能影响整体任务第三对于关键数据源可以考虑多准备一个备用方案比如用新浪接口做备份或者本地缓存历史数据。4.2 反爬限制别把免费接口当成生产环境在压榨虽然AKShare的接口大多是公开网页接口但完全不设防地高频调用很容易被数据源限制。我实测过连续快速循环调用行情接口几百次之后就会出现返回空数据或者报错的情况。合理的使用方式是控制请求频率。比如批量拉取几千只股票的历史行情时不要用同步循环暴力调而是加一个随机sleepimport time import random for code in stock_list: try: df ak.stock_zh_a_hist(symbolcode, perioddaily, start_date20230101, end_date20231231, adjustqfq) # 处理数据... except Exception as e: print(f{code} 拉取失败: {e}) time.sleep(random.uniform(0.5, 1.5))这个随机延时看似简单实测下来接口稳定性和成功率提升很多。核心逻辑是让请求节奏模拟人的操作行为而不是机器循环。4.3 股票代码格式一个最容易忽略的拦截点A股股票代码有6位纯数字但接口有时需要带前缀。比如拉取个股资金流时stock000001搭配marketsh这个前缀不是代码的一部分而是作为单独参数传进去的。我第一次用就因为没有区分sh和sz导致一半股票查出来是空的。后来我总结出一个规则60开头、68开头是上交所00开头、30开头是深交所。北交所的股票代码以8开头或者4开头拉取时接口和数据源又有区别。代码太多记不住的话可以建一个本地映射表把股票代码、交易所、名称一次性存好后面所有接口调用都用这个映射表转换一劳永逸。4.4 数据字段的可变性做任何分析前先做字段校准AKShare的接口字段名在不同版本之间偶有调整这是开源项目面对网页改版的无奈也是使用者要接受的现实。我现在的习惯是每次升级版本后先跑一个最小样例打印出返回数据的列名确认和预期一致后再跑全量任务。另外返回的数据类型也要留意。部分接口的百分比字段返回的是字符串比如1.23%直接用float()转换会报错需要先去掉百分号。数值字段中的--或空字符串也时有出现这些都需要在清洗阶段处理掉。我的统一做法是写一个clean_numeric函数把所有列都过一遍def clean_numeric(series): return ( pd.to_numeric( series.astype(str).str.replace(%, ).str.replace(,, ), errorscoerce ) )这个函数会把空值变成NaN方便后续用dropna()或者fillna()处理。实战效果很好推荐大家直接收藏。5. 让AKShare真正支撑起日常分析缓存、定时与组合策略5.1 本地缓存大幅降低重复请求频率像我这种经常反复测试同一批股票数据的人如果不做本地缓存每次跑回测都要重新从网络拉一遍几万行数据既慢又容易被限流。目前我的做法是拉下来的数据落地成CSV或者Parquet文件文件名包含股票代码和数据日期范围。每次请求前先检查本地有没有对应文件有就直接读没有才走AKShare接口。同时给本地文件加一个有效期标记比如行情数据当天有效财务数据一周有效避免用过期的缓存影响分析结果。这里给出一段简单缓存逻辑import os import pandas as pd def load_data_cached(symbol, start_date, end_date, cache_dir./cache): cache_file f{cache_dir}/{symbol}_{start_date}_{end_date}.csv if os.path.exists(cache_file): return pd.read_csv(cache_file, index_col0, parse_datesTrue) df ak.stock_zh_a_hist( symbolsymbol, perioddaily, start_datestart_date, end_dateend_date, adjustqfq ) os.makedirs(cache_dir, exist_okTrue) df.to_csv(cache_file) return df这个封装解决了我80%的重复拉取问题。5.2 定时任务每天收盘后自动更新数据手工跑脚本总会有忘记的时候所以我现在用系统定时任务把每日数据更新自动化了。在Linux服务器上就是crontab在Windows上可以用任务计划程序。我的习惯是每天下午15点30分之后跑一次全市场快照因为A股15点收盘15点后数据才完整稳定。更新任务的核心逻辑很简单先拉取全市场快照数据保存到一个按日期命名的文件里然后对持仓或者自选股列表逐个增量更新历史行情K线。增量更新的意思是只拉取本地缓存最新日期之后的数据再拼接上去这样每天的请求量很小不会被限流。5.3 结合其他开源库做更深度的策略测试AKShare把数据送到你手里之后剩下的就是发挥空间了。我自己常用的组合是用pandas做数据清洗和指标计算用matplotlib或者plotly画K线和指标图用backtrader做简单的策略回测举个例子我从AKShare拉取茅台的历史行情然后用backtrader跑一个简单的双均线策略整个过程不到100行代码。对于个人研究来说这个链路完全够用。另外AKShare不只做股票我还用它拉取宏观利率数据、基金净值数据、外汇行情。做大类资产配置分析时这些数据能在同一个库里统一获取确实省了很多找数据源的精力。5.4 说句实在话边界在哪里AKShare不是万能的对它的定位要清晰。它依赖的是公开网页数据源所以不适合作为高频实盘交易的数据通道——毫秒级报价、准确及时的盘口数据这些它给不了也不应该指望它能给。它的价值更多体现在日线级别的分析、策略研究和中低频的投资决策辅助上。但对绝大多数个人投资者和量化学习者的需求来说这套接口已经能覆盖很完整的分析了。如果你想认真做股票数据分析不必急于去买昂贵的商业数据终端先用AKShare把完整流程跑起来建立起自己的分析框架等确实需要更专业、更稳定的数据服务时再考虑付费方向这样投入产出比最高。最后分享一个我坚持了两年的习惯每次升级AKShare之后我不会急着跑全量任务而是先用一只熟悉的股票把五个核心接口全部跑一遍确认字段和数据类型没变化再进行后续批量操作。这个先验再跑的小流程帮我避开了好多次数据对不上的难题建议你也能用上。
企业数字化 ERP 产品动态
相关推荐
大模型多Agent系统:协作架构与任务调度实战指南 1. 这不是“多个AI凑在一起”——大模型多Agent系统的真实面貌很多人第一次听到“大模型多Agent”时,下意识会想:不就是让几个ChatGPT同时在线,你问一句我答一句,轮流发言?这种理解偏差非常普遍,也恰恰是踩… · 2026/9/26 7:42:40
大模型多Agent系统工程实践:任务复杂度阈值与三层协作架构 1. 这不是“多个模型拼在一起”——大模型多Agent系统的真实面貌你可能已经看过不少标题带“多Agent”“智能体协作”的文章,点进去发现全是几个LLM API调用串起来的流程图,配上“未来已来”“颠覆性突破”这类词。但实操过三个以上真实业务场景的工程师… · 2026/9/26 7:42:40
Spring Boot智能农业管理系统毕设实战:数据库设计、大数据分析与避坑指南 每年到毕设季,我都能收到一堆“救命”私信。今年最典型的一条是:“博主,我选了基于Spring Boot的智能农业管理系统,还带着大数据,现在不知道从哪下手,源码有,文档有,但一跑起来全是问… · 2026/9/26 7:42:40
华为ICT大赛备赛全攻略:赛道选择、真题用法与官方书籍阅读指南 华为ICT大赛这几年在高校圈的热度肉眼可见地往上蹿,我身边不少学弟学妹从大二就开始盯着这个比赛,原因很实在——它不光是简历上能写的一行字,更是一次把课堂里零散的网络、云计算、AI知识串成体系的机会。但问题也来了:赛道到底怎… · 2026/9/26 8:18:34
基于Qt开发实现的任务管理器:进程枚举、性能曲线与避坑指南 简介:这是一份基于Qt开发的任务管理器项目资料,面向正在学习Qt GUI编程、系统进程管理或课程设计的学生与开发者。资源内含设计报告Word文档和完整项目源码,源码在Ubuntu 14.04环境下使用Qt Creator开发,实现了系统信息、进程信息… · 2026/9/26 8:18:34
Agent Skills实战指南:从零搭建高效技能包工作流 最近一直在折腾 agent-skills 这套东西,起因很简单:用 Claude Code 和 Codex 写代码、做自动化任务时,总觉得每次都要把同一套规则、同一个流程反复说一遍,费 token 不说,Agent 发挥也不稳定。后来把常见的操作沉淀成 … · 2026/9/26 8:18:34
Agent Skills实战指南:从概念到安装调试的完整梳理 接到这个标题“agent-skills”的时候,我第一反应是:这不就是当前 AI Agent 开发圈里被讨论最多、却也最容易被误解的一个概念吗?如果你最近刷过 GitHub、看过 Codex 或 Claude Code 的更新日志,大概率已经见过 skills、superpower… · 2026/9/26 8:18:34
AI安全渗透测试平台实战:四层纵深架构与十六大领域攻防 1. 项目概述:这不是一个“玩具平台”,而是一套可落地的AI安全工程实践体系“AI全栈安全渗透测试平台搭建实战:十六大领域7900API4大AI智能体”——这个标题里没有一个词是虚的,全是实打实的工程量、技术边界和业务约束。我带团队从… · 2026/9/26 8:18:34
YOLO海底垃圾检测实战:185张图像数据集训练与调优指南 简介:这份资源面向从事海洋环境监测、水下目标识别与计算机视觉方向的研究者及YOLO算法学习者,提供一套可直接用于训练与验证的海底垃圾目标检测数据集,覆盖生物罐、布料、玻璃等常见海底废弃物类别。压缩包共371个文件,以185张jp… · 2026/9/26 8:18:28
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46