ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

告别 akshare 依赖!a-stock-data V3.0 A 股全栈数据工具包:7 层架构一站式搞定投研数据

告别 akshare 依赖!a-stock-data V3.0 A 股全栈数据工具包:7 层架构一站式搞定投研数据 1. 为什么我最终把 akshare 从投研脚本里拆了出去如果你写过 A 股数据脚本大概率经历过这种循环早上跑得好好的采集任务下午突然报KeyError翻源码发现是某个字段改名了或者升级一次 pandas 之后read_html的返回结构变了整条链路跟着崩。akshare 本身很优秀但它的定位是「聚合封装」一旦上游页面改版你只能等版本更新而投研任务不等人。a-stock-data V3.0 走的是另一条路它把 13 个数据源拆成 7 层架构每层直连原生 HTTP 或 TCP 接口不再套一层第三方封装。行情层用 mootdx 走通达信协议研报层直连东财 reportapi资金筹码层用东财 datacenter 的 push2his 端点。这样做的好处是故障点少、字段可控坏处是你得自己管配置和鉴权。这篇面向的是想用 Python 跑通「采集 → 清洗 → 因子落地」全链路的投研开发者。我会把 7 层架构逐层拆开给出可复制的config.toml骨架、TaoToken 统一 Key 的配置方式以及每层的验证命令和报错排查动作。你不需要先装 Claude Code普通 Python 脚本就能复用里面的内嵌代码。2. TaoToken 前置把模型调用和 Key 管理先理顺a-stock-data 本身不依赖大模型也能跑但 V3.0 的很多场景——比如用自然语言检索研报、让 AI 助手帮你归因题材——需要接一个稳定的模型入口。我试过把 Key 散落在各个脚本里结果换环境时到处找后来统一收敛到 TaoToken 上。TaoToken 在这里的角色是「统一 Key 统一入口」你申请一个 Key就能在模型对话、Coding Plan、API 调用之间复用不用为每个工具单独配一套凭证。对投研场景来说这意味着你的数据采集脚本和 AI 分析脚本可以共用同一份配置。具体操作上先去控制台创建 Key控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite创建完把 Key 写进环境变量别硬编码进脚本。我习惯用.env加python-dotenv这样本地和服务器都能复用# .env TAOTOKEN_API_KEYsk-你的key TAOTOKEN_BASE_URLhttps://taotoken.net/api如果你主要做长期编码和 Agent 任务比如让 AI 持续帮你写因子、跑回测可以看下 Coding Plan 的额度设计Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入文档在这里里面有各语言 SDK 的调用示例接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite注意TaoToken 是模型调用入口不是数据源。A 股行情、研报、公告这些数据仍然由 a-stock-data 的 7 层架构直连获取两者职责别混。3. 可复制配置config.toml 骨架与 7 层参数a-stock-data V3.0 的配置我建议拆成两块一块管数据源一块管模型调用。下面这份config.toml骨架你可以直接复制按需改字段。# config.toml [general] cache_dir ./cache timeout 10 retry 3 user_agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) [llm] provider taotoken base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY model claude-sonnet max_tokens 4096 [layers.quote] # 行情层mootdx 腾讯财经 百度K线 primary mootdx fallback [tencent, baidu] enable_ma true [layers.report] # 研报层东财 reportapi 同花顺 iwencai source eastmoney enable_pdf true iwencai_key_env IWENCAI_KEY [layers.signal] # 信号层同花顺 百度股市通 东财DC northbound_cache true dragon_tiger true [layers.capital] # 资金面/筹码层东财 datacenter push2his margin_trading true block_trade true holder_count true fund_flow_days 120 [layers.news] # 新闻层东财 财联社 cls_realtime true eastmoney_news true [layers.fundamental] # 基础数据mootdx 东财 新浪 financial_fields 37 f10 true [layers.announcement] # 公告层巨潮 cninfo mootdx cninfo true exchange [sh, sz, bj]几个关键点说明一下。[llm]段里的api_key_env指向环境变量名而不是直接写 Key这样你提交代码时不会泄露。[layers.quote]的primary设成 mootdx 是因为它走 TCP 协议封 IP 风险最低腾讯和百度作为 fallback字段更全但需要处理请求头。[layers.capital]是 V3.0 新增的重点fund_flow_days 120对应 120 日个股资金流这个参数别设太大否则首次拉取会慢。[layers.report]里的iwencai_key_env是唯一需要额外 Key 的地方问财语义搜索要单独申请其余接口零鉴权。装依赖的时候注意V3.0 已经不需要 akshare 了pip install mootdx requests pandas stockstats python-dotenv tomli如果你用 Python 3.11 以下tomli用来读 toml3.11 可以直接用内置的tomllib。4. 逐层验证从行情到公告的跑通命令配置写完别急着跑全链路一层一层验证出问题好定位。下面是我常用的验证顺序。4.1 行情层验证# verify_quote.py import tomli from mootdx.quotes import Quotes with open(config.toml, rb) as f: cfg tomli.load(f) client Quotes.factory(marketstd) df client.bars(symbol600519, frequency9, offset10) print(df[[datetime, open, close, vol]].tail())frequency9是日线offset10取最近 10 根。如果返回空先检查 mootdx 的服务器连接海外环境走 TCP 容易超时这是已知问题。4.2 研报层验证# verify_report.py import requests url https://reportapi.eastmoney.com/report/list params {industryCode: *, pageSize: 5, pageNo: 1} headers {User-Agent: Mozilla/5.0} r requests.get(url, paramsparams, headersheaders, timeout10) print(r.json()[data][:2])东财 reportapi 零鉴权但pageSize别设太大5 到 10 条够验证。如果返回 403检查 User-Agent 是否被识别。4.3 资金筹码层验证# verify_capital.py import requests url https://datacenter-web.eastmoney.com/api/data/v1/get params { reportName: RPT_MARGIN_DAILY, columns: ALL, pageSize: 5, sortColumns: TRADE_DATE, sortTypes: -1, } r requests.get(url, paramsparams, timeout10) print(r.json()[result][data])这是融资融券的端点RPT_MARGIN_DAILY换成RPT_BLOCKTRADE就是大宗交易换成RPT_HOLDERNUMLATEST就是股东户数。V3.0 把这类查询封装成了eastmoney_datacenter()统一函数你可以在 SKILL.md 里找到复用逻辑。4.4 模型调用验证数据层跑通后验证 TaoToken 的模型入口# verify_llm.py import os from openai import OpenAI client OpenAI( api_keyos.environ[TAOTOKEN_API_KEY], base_urlhttps://taotoken.net/api, ) resp client.chat.completions.create( modelclaude-sonnet, messages[{role: user, content: 用一句话解释PE和PEG的区别}], ) print(resp.choices[0].message.content)如果你想先在网页上试模型效果可以直接用模型对话入口模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite5. 本篇常见报错排查跑这套链路时我踩过的坑集中在几个地方列出来你对照着查。mootdx 连接超时报socket.timeout或ConnectionRefused。mootdx 走通达信 TCP 行情端口需要国内网络环境。如果你在海外服务器上跑要么换成本地机器要么在config.toml里把primary改成tencent用 HTTP 接口替代。同花顺行业接口 401V3.0 已经把这个接口替换成东财零鉴权接口了。如果你还在用旧代码调同花顺会拿到 401。检查你的[layers.signal]配置确认走的是东财 DC 而不是同花顺。腾讯 API 字段错位网上很多教程说第 43 位是 PB实测下来第 46 位才是。字段索引错一位估值算出来就全歪了。建议用官方校准过的字段映射别照抄博客。iwencai 返回空问财语义搜索需要 API Key没配IWENCAI_KEY环境变量就会静默返回空。这个 Key 要单独申请不是 TaoToken 的 Key。北向资金历史数据不全V3.0 做了本地缓存第一次调用只拿到近期数据多调几次缓存会补全。别以为是接口坏了等缓存跑满就行。pandas 版本冲突虽然 V3.0 移除了 akshare但 stockstats 对 pandas 版本有要求。如果报AttributeError: DataFrame object has no attribute append说明你 pandas 太新append在 2.0 被移除了改用pd.concat。6. 把数据链路和模型入口接起来数据层验证通过后下一步是让 AI 助手能直接调用这些数据。a-stock-data 的 SKILL.md 本身就是结构化 Markdown 加内嵌 Python你可以把它作为系统提示词喂给模型也可以把内嵌代码抽出来做成工具函数。如果你用 Claude Code 这类编码助手把 SKILL.md 放到 skills 目录后自然语言提问就能触发数据查询。如果你用普通 Python 脚本就按第 4 节的验证代码把每层封装成函数再用 TaoToken 的模型入口做分析层。长期做因子落地和 Agent 任务的话Coding Plan 的额度比按次调用更划算适合持续跑回测和批量分析的场景。接入细节看文档里面有工具调用和流式返回的示例。整套链路的核心思路是数据归数据模型归模型Key 统一管。a-stock-data 负责把 7 层数据源直连拉通TaoToken 负责把模型调用收敛到一个入口。两边都配好之后你换机器、换环境只需要改config.toml和环境变量脚本本身不用动。
返回列表