simonlin1212/a-stock-data · 上手攻略
- 仓库:simonlin1212/a-stock-data
- 链接:https://github.com/simonlin1212/a-stock-data
- 分类:trending / database
- Stars:6761 | 周增:+161
- 作者:Tom
- 更新:2026-07-11
这是什么
a-stock-data 是一个面向 AI 编程助手(Claude Code / OpenClaw / Codex)设计的 A 股全栈数据 Skill 文件,本质是一份结构化 Markdown 文档,内嵌全部可运行 Python 代码,可直接被 AI 读取并在对话中执行。
它解决的核心问题是:A股数据源极度分散——行情在通达信协议、研报在东财 PDF、资金流在另一个接口、龙虎榜又在别处——普通开发者需要逐一对接十几个接口、背各种特殊 Header 与鉴权逻辑。a-stock-data 把这些全部封装好,让 AI 编程助手直接能调用。
当前版本:V3.3.1(2026-06-28),10 层架构、40 个端点、13 个数据源。
解决什么问题
-
数据源分散:东财、同花顺、通达信(mootdx)、巨潮、新浪、百度股市通、iwencai……每个接口格式不同、鉴权不同、限流规则不同,一一对接费时费力。
-
接口频繁失效:akshare 曾是 A 股数据 Python 生态的事实标准,但维护不稳定,大量接口已失效;百度的 PAE 接口也在 2026 年陆续下线。V3.0 起本项目彻底移除 akshare 依赖,全部直连 HTTP API。
-
东财 IP 风控:东财接口有严格 IP 限流,高频调用会被封。V3.2 起内置统一限流入口
em_get(),让 AI 直接生成防封代码。 -
mootdx 0.11.x 兼容性问题:mootdx 0.11.x 版本有 BESTIP.HQ 空字符串 bug,导致全新环境下 import 崩溃。本项目提供
tdx_client()helper 规避该问题。
快速安装
前提依赖
pip install mootdx requests pandas stockstats
版本要求:mootdx >= 0.10(建议用最新,0.11.x 通过 tdx_client() helper 兼容);requests / pandas / stockstats 无特殊版本限制。
⚠️ iwencai 语义搜索是唯一需要 API Key 的功能(申请地址),其他所有数据源(mootdx / 腾讯 / 东财 / 同花顺 / 百度股市通 / 新浪 / 巨潮)全部零 Key、免费。
安装 Skill 文件
# 1. 创建 skill 目录
mkdir -p ~/.claude/skills/a-stock-data
# 2. 下载 SKILL.md
curl -o ~/.claude/skills/a-stock-data/SKILL.md \
https://raw.githubusercontent.com/simonlin1212/a-stock-data/main/SKILL.md
# 3. 安装 Python 依赖
pip install mootdx requests pandas stockstats
安装后,在 Claude Code / OpenClaw 对话中说「帮我看看 688017 的估值」之类的话,AI 会自动激活该 Skill 并执行内嵌代码。
注意:本 Skill 建议通过上下文注入使用,不做自动加载(
origin: custom),以避免非 A 股话题也被注入无关数据函数。
核心用法(可复制代码片段)
以下代码均摘录自 V3.3.1 SKILL.md,经实测可用。AI 编程助手可直接引用。
1. 创建 mootdx 客户端(规避 0.11.x bug)
import socket
from mootdx.quotes import Quotes
_TDX_SERVERS = [
('119.97.185.59', 7709), ('124.70.133.119', 7709),
('123.60.73.44', 7709), ('124.71.9.153', 7709),
]
def _probe(ip, port, timeout=2.0):
try:
with socket.create_connection((ip, port), timeout=timeout):
return True
except Exception:
return False
def tdx_client(market='std'):
for ip, port in _TDX_SERVERS:
if _probe(ip, port):
return Quotes.factory(market=market, server=(ip, port))
# fallback → bestip → 裸 factory
try:
return Quotes.factory(market=market, bestip=True)
except Exception:
return Quotes.factory(market=market)
client = tdx_client()
2. 获取日 K 线数据
# ⚠️ 参数名是 frequency,不是 category!
# frequency=9 → 日线(默认),8→1分钟,0→5分钟,1→15分钟,2→30分钟,3→60分钟
klines = client.bars(symbol='688017', frequency=9, offset=10)
# 返回: open, close, high, low, vol, amount, datetime
⚠️ 已知 bug(历史遗留):
category=参数名会被 mootdx**kwargs静默吞掉,导致任何非日线的 K 线请求都静默退化成日线而不报错。这是 V3.2.5 修复前的代码里广泛存在的问题,请务必使用frequency=而非category=。
3. 实时报价(46 字段)
quotes = client.quotes(symbol=['688017', '300476'])
# 返回: price, open, high, low, last_close, bid1~bid5, ask1~ask5, vol, amount 等
4. 东财个股资金流(已内置防封)
import time, random, requests
UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
EM_SESSION = requests.Session()
EM_SESSION.headers.update({"User-Agent": UA})
EM_MIN_INTERVAL = 1.0
_em_last_call = [0.0]
def em_get(url, params=None, timeout=15, **kwargs):
"""东财统一请求入口:自动节流 + 会话复用"""
wait = EM_MIN_INTERVAL - (time.time() - _em_last_call[0])
if wait > 0:
time.sleep(wait + random.uniform(0.1, 0.5))
try:
return EM_SESSION.get(url, params=params, timeout=timeout, **kwargs)
finally:
_em_last_call[0] = time.time()
# 调用龙虎榜示例
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
params = {
"reportName": "RPT_LHB_PLATINUM_STATISTICSALL",
"columns": "ALL", "pageSize": "10",
"sortColumns": "NET_BUY_AMT", "sortTypes": "-1"
}
data = em_get(url, params=params)
5. 北向资金(沪股通/深股通分钟级)
# 同花顺北向实时接口(零鉴权,约 73ms 响应)
import requests
r = requests.get(
"https://data.10jqka.com.cn/funds/hgt/",
headers={"Referer": "https://data.10jqka.com.cn/"}
)
# 返回沪股通分钟级买卖流量数据
6. 研报 PDF 下载
import requests
def download_pdf(url, save_path):
r = requests.get(url, headers={
"Referer": "https://reportapi.eastmoney.com/"
}, timeout=20)
with open(save_path, 'wb') as f:
f.write(r.content)
return save_path
# 配合 eastmoney_industry_reports() 获取研报 URL 后下载
7. 涨停池/打板情绪
# 东财涨停池(连板数、封板资金、炸板次数)
params = {
"reportName": "RPT_STOCK_LIMIT_UP",
"columns": "ALL",
"filter": "UP_NUM>1", # 只看连板股
"pageSize": "20",
"sortColumns": "UP_NUM", "sortTypes": "-1"
}
data = em_get(
"https://datacenter-web.eastmoney.com/api/data/v1/get",
params=params
)
典型适用场景
| 场景 | 对话示例 |
|---|---|
| 个股估值 | 「帮我估一下 688017,给我 PE/PEG/消化时间」 |
| 强势股/题材归因 | 「今天哪些股票走强,主要是什么题材」 |
| 北向资金 | 「今天北向资金流入流出怎么样」 |
| 龙虎榜 | 「002475 最近上过龙虎榜吗,哪些营业部在买」 |
| 全市场龙虎榜 | 「今天龙虎榜哪些票净买入最多」 |
| 涨停打板 | 「今天涨停多少家、最高几连板、炸板率多少」 |
| 研报检索 | 「人形机器人产业链最近的研报,特别是丝杠和减速器」 |
| ETF 期权 | 「50ETF 平值期权的隐含波动率和 Delta 是多少」 |
| 互动易 | 「比亚迪最近投资者都在问什么,公司怎么回应的」 |
| 批量估值对比 | 「帮我对比这 5 只半导体股的估值」 |
坑与注意
-
mootdx 海外 IP 问题:mootdx 走 TCP 7709 通达信协议,海外网络环境通常全部超时(无响应)。
tdx_client()会快速失败并给出明确报错,而非无限等待。国内用户无此问题。 -
复权口径:mootdx
bars()返回的是不复权原始价(通达信数据本身无 adjust 参数)。跨除权除息日做估值/回测须自行复权,或改用带前复权的腾讯财经日 K 数据。 -
东财 IP 封禁阈值:每秒 > 5 次 / 单 IP 并发 ≥ 10 / 1 分钟 ≥ 200 次会触发临时封禁。本 Skill 所有东财请求已内置
em_get()限流,但 AI 在批量筛选(如循环 100 只股查龙虎榜)时可能忘记降速,使用者应主动提醒 AI:「每只股票之间加 1.5 秒间隔」。 -
部分大陆住宅 IP 对东财有间歇风控:表现为
HTTP 000或空数据,非代码 bug,换网络或加重试即可。 -
财联社快讯已下线(cls.cn 旧 API 404,V3.2 标记废弃):用东财全球资讯替代,数据同源。
-
iwencai 语义搜索需要 API Key(申请入口):其他所有端点零 Key 免费。
-
分钟 K 线 bug(V3.2.5 修复):旧版代码
category=参数被静默吞掉,分钟线请求静默退化为日线。确保使用的是 V3.2.5+ 版本(当前最新 V3.3.1)。
数据源优先级说明
| 优先级 | 数据源 | 用途 | 封 IP 风险 |
|---|---|---|---|
| 1(首选) | mootdx(通达信) | K线、五档盘口、财务快照、F10 | 不封 |
| 2 | 腾讯财经 | PE/PB/市值/换手率/涨跌停/指数/ETF | 不封 |
| 3 | 新浪/巨潮/同花顺 | 财报三表、公告、一致预期、热点 | 低 |
| 4(仅独有数据) | 东财 eastmoney | 龙虎榜/融资融券/资金流/研报/PDF | 有风险,须限流 |
与同类对比
| 工具/仓库 | 类型 | 优势 | 不足 |
|---|---|---|---|
| a-stock-data(本文) | AI 助手指令集 | 零安装、自包含、40端点、AI直接用 | 需 AI 助手配合,非独立工具 |
| akshare | Python 库 | 生态成熟 | 维护不稳定,大量接口失效 |
| tushare | Python 库 | 有结构化文档 | 需要积分/Key,数据延迟 |
| JoinQuant | 平台 | 专业回测功能 | 平台绑定,非开放 API |
| iFinD | 商业数据 | 数据全 | 昂贵,个人用户门槛高 |
a-stock-data 的独特价值在于作为 AI 编程助手的上下文 Skill,把数据获取嵌入到 AI 工作流里——你用自然语言描述需求,AI 自动组合多个端点取数,而非自己写 Python 脚本。
一句话结论
A 股数据获取的事实标准——不依赖 akshare,40 个端点零 Key 免费,内置防封,AI 编程助手直接调用;国内 Python 开发者或使用 Claude Code / OpenClaw 做 A 股研究的首选数据 Skill。
版本:V3.3.1 · 2026-06-28 验证 · 作者:Simon 林 · 抖音「Simon林」· 公众号「硅基世纪」