AgentStack
SKILL verified MIT Self-run

A Stock Data

skill-taosheng777-biga-stock-skills-a-stock-data · by Taosheng777

当任务需要写代码实际获取A股数据时使用——拉取行情/K线(mootdx+腾讯+百度)、研报(东财+同花顺+iwencai)、信号(热点/北向/龙虎榜/解禁/行业)、资金面(融资融券/大宗/股东户数/分红/资金流)、新闻、财务三表/F10、公告(巨潮)、打板(涨停池/连板/炸板率)、ETF期权(T型报价/希腊字母/IV)、舆情互动(互动易/热榜/人气榜)等真实数据。十层数据源·43端点(含3官方备胎)·内嵌全部可运行代码,自包含零依赖外部文件;优先用通达信(mootdx)/腾讯(不封IP),东财接口已内置限流防封,主源被封可查「备用源速查」降级。仅在需要调用数据接口取数时使用:A股概念解释、投资观点讨论、策略问答等无需取数的话题不要加载本skill。

No reviews yet
0 installs
0 views
view→install

Install

$ agentstack add skill-taosheng777-biga-stock-skills-a-stock-data

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access Used
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of A Stock Data? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

> 📦 项目主页:https://github.com/simonlin1212/a-stock-data — 更新、反馈、支持作者 > > 作者:Simon 林 · 抖音「Simon林」· 公众号「硅基世纪」

A股全栈数据工具包 V3.4.0

十层数据架构,43 个端点实测可用(40 主端点 + 3 官方备胎,2026-07 验证),覆盖主板/中小板/科创板/ST。每类数据在「备用源速查」列有独立备胎,主源被封时可降级。

> V3.4.0(接口质量 + 备用源韧性,2026-07-11): > - §5.2 财联社快讯复活:旧 nodeapi 2026-05 下线后,改走官方 v1/roll/get_roll_list + 本地签名(sign=md5(sha1(排序query)),零 key),V3.2 移除的全市场电报能力恢复,与东财 7×24 互为独立备份。实测 errno=0。 > - 新增「备用源速查 & 降级策略」章节:十层主源→独立备胎速查表(不同域名/不同风控面)+ 3 个实测备胎函数——dragon_tiger_backup()(沪深交易所官方龙虎榜,含营业部席位)、fund_flow_backup()(新浪日度资金流)、announcements_backup()(深市深交所官方/沪市东财公告+PDF)。端点 40 → 43,数据源 13 → 15(新增沪深交易所官方)。 > - §3.6 解禁字段修复:东财 RPT_LIFT_STAGE 改列名致 type/shares 恒空 → 改 FREE_SHARES_TYPE/FREE_SHARES,并新增 able_shares(实际可流通股数,更贴近真实抛压)。 > - §3.7 行业排名排序修复:clist 请求补 fid=f3top/bottom 现按涨跌幅真实排序(此前缺排序字段,切片结果非涨幅序)。 > - §3.2 深股通标注:北向盘中披露收紧后 sgt 分钟序列不可靠(hgt 可用),权威北向用 HKEX 官方日统计(见备用源速查)。 > - 体验:顶部新增「端点路由速查」总表(§→函数→用途→源,可按需局部读取);FAQ 新增东财被封对策 / 财联社复活 / mootdx 库烂尾说明。 > > V3.2.3(行业研报新增): > - §2.1 东财行业研报 eastmoney_industry_reports():研报层补上行业研报端点(此前只有个股研报)。与个股研报同端点 reportapi.eastmoney.com/report/list,仅 qType=1industry_code="*" 拉全行业、传东财行业码(如 1238=IT服务Ⅱ)精确过滤,PDF 复用 download_pdf(),走 em_get 限流。端点数 27 → 28。 > - 实测(2026-06-20):全行业 hits=47928、按行业码 1238 过滤 hits=1863,首篇 PDF H3_{infoCode}_1.pdf 下载成功(2.5MB,%PDF 头);行业码表端点(bxpa 等)404 不存在,用 "*" 拉取后从结果反查行业码。

> V3.2.2(失效接口替换 + 隐藏 Bug 修复): > - §3.3 概念板块归属(#18):百度 PAE getrelatedblock 失效(ResultCode 10003 + 空数组)→ 改用东财 slistspt=3eastmoney_concept_blocks(),一次请求拿全个股所属板块(行业/概念/地域 + BK码 + 涨跌幅 + 龙头股),零鉴权走 em_get 限流。 > - §7.1 巨潮公告 orgId(#19):硬编码 gssx0{code} 致大量 601xxx 股票 totalAnnouncement=0 → 新增 _cninfo_orgid() 动态查官方映射表 szse_stock.json(6198 只股,模块级缓存),硬编码降为 fallback。 > - 综合示例修复:示例仍调用 v3.1 已删的 baidu_fund_flow_history → 改 eastmoney_fund_flow_minute。 > - §4.5/§5.1 风控说明:部分大陆住宅 IP 被东财间歇风控(HTTP 000/空)非代码 Bug,加重试/换网络提示。 > - 新代码原样 exec smoke test 实测:板块归属 茅台27/五粮液28/绿的谐波21;公告 平安601318/工行601398 原失效股恢复。 > > V3.2.1(Bug 修复): 修复两个内嵌函数的解析逻辑(预先存在,非 V3.2 引入)—— > - §5.1 东财个股新闻:东财实际返回里 result.cmsArticleWebOld 直接就是文章列表,旧写法对 list 调 .get("list") 触发 AttributeError / 返回空 → 改为遍历 cmsArticleWebOld 列表本身。 > - §6.4 新浪财报三表:新浪实际结构是 result.data.report_list(按报告期为键的 dict,每期 data 才是行项列表),旧写法取 result.data.{lrb} 永久返回空 → 改为遍历 report_list 期次、从每期 dataitem_title 提取。 > - 两函数均用茅台 600519 公开 API(零 key)实测返回非空、字段正确。 > > V3.2(防封 + 失效修复): > - 数据源优先级 + 东财防封:明确「通达信(mootdx)/腾讯不封IP 优先用,东财仅用于其独有数据」原则;新增统一节流入口 em_get(),所有东财接口内置串行限流(间隔≥1s+随机抖动)+ 会话复用,AI 抄代码即自带防封。详见「数据源优先级 & 东财防封」章节。 > - 财联社快讯下线(#14)cls.cn 旧 API 全面 404,标注弃用并改用东财全球资讯。 > > V3.1 修复: 替换 4 个失效接口(百度 PAE 资金流→东财 push2、大宗交易 RPT 报表名更新、机构席位改用 BUY/SELL 明细筛选)+ 修复东财全球资讯 req_trace 参数 + 修复巨潮公告 orgId 格式。 > > V3.0 Breaking Change:彻底移除 akshare 依赖,所有数据源改为直连 HTTP API(零第三方数据依赖,仅 mootdx 保留 TCP)。

使用方式: 将本文件放入 ~/.claude/skills/a-stock-data/SKILL.md,Claude Code 会自动识别并在 A 股相关对话中激活。

行情层(实时,不封IP)
├── mootdx        → K线 + 五档盘口 + 逐笔成交 (TCP 7709)
├── 腾讯财经 API   → PE/PB/市值/换手率/涨跌停/指数/ETF (HTTP)
└── 百度股市通     → K线带MA5/10/20 (V3.0 新增,HTTP)

研报层
├── 东财 reportapi → 个股研报 + 行业研报 + PDF下载 + 评级 + 三年EPS
├── 同花顺 THS     → 一致预期EPS (直连 basic.10jqka.com.cn)
└── iwencai        → NL语义搜索研报 (唯一能力,需X-Claw)

信号层
├── 同花顺热点     → 当日强势股 + 题材归因 reason tags (零鉴权 73ms)
├── 同花顺北向     → hgt/sgt 分钟资金流向 + 本地自缓存历史
├── 东财 slist     → 个股所属板块/概念归属 (V3.2.2 替换百度PAE)
├── 东财 push2     → 个股资金流向 分钟级 (V3.1 替换百度PAE)
├── 龙虎榜席位     → 上榜记录 + 买卖席位 TOP5 + 机构动向 (datacenter-web)
├── 全市场龙虎榜   → 每日全市场上榜股票 + 净买额排名 (datacenter-web)
├── 限售解禁日历   → 历史解禁 + 未来90天待解禁 (datacenter-web)
└── 行业板块排名   → 东财行业涨跌/上涨下跌家数 (V3.0 替换同花顺)

资金面 / 筹码层
├── 融资融券明细   → 日级融资余额/买入/偿还 + 融券 (datacenter-web)
├── 大宗交易       → 成交价/量 + 买卖方营业部 (datacenter-web)
├── 股东户数变化   → 季度股东户数 + 环比变化 (datacenter-web)
├── 分红送转       → 历史每股派息/送股/转增 (datacenter-web)
└── 个股资金流120日 → 主力/大单/中单/小单 日级净流入 (push2his)

新闻层
├── 东财个股新闻   → 个股相关新闻 (search-api-web JSONP)
├── 财联社快讯     → 全市场实时电报 (v1 API+本地签名零key,✅V3.4 复活)
└── 东财全球资讯   → 7×24 财经快讯 (np-weblist,与财联社互备)

基础数据层
├── mootdx finance → 季报快照 (37字段, EPS/ROE/净利)
├── mootdx F10     → 公司资料 (9大类文本)
├── 东财个股信息   → 行业/总股本/流通股/市值/上市日期 (push2)
└── 新浪财报三表   → 资产负债表/利润表/现金流量表 (quotes.sina.cn)

公告层
├── 巨潮 cninfo    → 公告全文检索+下载 (cninfo.com.cn)
└── mootdx F10     → 最新公告摘要

打板层 (V3.3 新增)
├── 东财涨停池     → 连板数/几天几板/封板资金/炸板次数/行业 (push2ex)
├── 东财炸板池     → 涨停后开板 + 振幅/涨速 (push2ex)
├── 东财跌停池     → 封单资金/连续跌停/开板次数 (push2ex)
├── 东财昨涨停池   → 昨涨停今表现,算晋级率/赚钱效应 (push2ex)
└── 同花顺涨停揭秘 → 涨停原因题材/封板成功率/板型 (10jqka)

ETF期权层 (V3.3 新增)
├── 合约清单       → 50ETF/300ETF/科创50/500ETF 各月认购认沽 (新浪)
├── T型报价        → 买卖五档/持仓量/行权价/最新价 (新浪)
└── 希腊字母+IV    → Delta/Gamma/Theta/Vega/隐含波动率 (新浪)

舆情互动层 (V3.3 新增)
├── 互动易问答     → 投资者提问+公司回复 (巨潮,AI问答独家)
├── 同花顺热榜     → 人气值/概念标签/排名变化 (10jqka)
├── 东财人气榜     → 排名+排名变化+名称价格 (emappdata)
└── 东财概念命中   → 个股被归到哪些概念在炒+热度 (emappdata)

端点路由速查(按需定位,不必通读全文)

只需一类数据时,按下表定位章节(§)局部读取。除 iwencai 需 API Key 外全部零 key。

| § | 函数 | 拿什么 | 源 | |---|------|--------|----| | 1.1 | tdx_client().bars() / .quotes() / .transaction() | K线(多周期,不复权) / 五档盘口 / 逐笔成交 | 通达信 | | 1.2 | tencent_quote(codes) | 实时价/PE/PB/市值/换手/涨跌停/指数/ETF | 腾讯 | | 1.3 | baidu_kline_with_ma(code) | 日K线带 MA5/10/20 | 百度 | | 2.1 | eastmoney_reports(code) / download_pdf(rec) | 个股研报+评级+三年EPS / 研报PDF | 东财 | | 2.1 | eastmoney_industry_reports(industry_code) | 行业研报 | 东财 | | 2.2 | ths_eps_forecast(code) | 机构一致预期 EPS | 同花顺 | | 2.3 | iwencai_search(query) / iwencai_query(query) | NL 语义搜研报/选股(需 Key) | iwencai | | 3.1 | ths_hot_reason() | 当日强势股+题材归因 | 同花顺 | | 3.2 | hsgt_realtime() | 北向分钟流向(hgt 可用 / sgt 仅参考) | 同花顺 | | 3.3 | eastmoney_concept_blocks(code) | 个股所属板块/概念归属 | 东财 | | 3.4 | eastmoney_fund_flow_minute(code) | 个股资金流(分钟级) | 东财 | | 3.5 | dragon_tiger_board(code, date) | 个股龙虎榜+买卖席位 TOP5 | 东财 | | 3.6 | lockup_expiry(code, date) | 解禁历史+未来90天待解禁 | 东财 | | 3.7 | industry_comparison() | 行业板块涨跌排名 | 东财 | | 3.8 | daily_dragon_tiger(date) | 全市场龙虎榜+净买额排名 | 东财 | | 4.1 | margin_trading(code) | 融资融券明细 | 东财 | | 4.2 | block_trade(code) | 大宗交易+营业部 | 东财 | | 4.3 | holder_num_change(code) | 股东户数变化 | 东财 | | 4.4 | dividend_history(code) | 分红送转历史 | 东财 | | 4.5 | stock_fund_flow_120d(code) | 个股资金流(120日,日级) | 东财 | | 5.1 | eastmoney_stock_news(code) | 个股新闻 | 东财 | | 5.2 | cls_telegraph() | 财联社电报(7×24,本地签名零key) | 财联社 | | 5.3 | eastmoney_global_news() | 全球资讯(7×24) | 东财 | | 6.1 | client.finance(symbol) | 季报快照 37 字段 | 通达信 | | 6.2 | client.F10(symbol, name) | 公司资料 9 大类文本 | 通达信 | | 6.3 | eastmoney_stock_info(code) | 行业/股本/市值/上市日期 | 东财 | | 6.4 | sina_financial_report(code, type) | 财报三表 | 新浪 | | 7.1 | cninfo_announcements(code) | 公告检索+PDF 下载 | 巨潮 | | 7.2 | client.F10(symbol, name='最新提示') | 最新公告摘要 | 通达信 | | 8.1 | em_zt_pool / em_zb_pool / em_dt_pool / em_yzt_pool | 涨停/炸板/跌停/昨涨停四池 | 东财 | | 8.2 | ths_limit_up_pool(date) | 涨停原因题材+封板成功率+板型 | 同花顺 | | 8.3 | limit_up_sentiment(date) | 炸板率/连板高度/连板梯队 | 东财(四池组合) | | 9.1 | sina_option_codes / sina_option_tquote / sina_option_greeks | ETF期权合约清单 / T型报价 / 希腊字母+IV | 新浪 | | 10.1 | cninfo_irm(code) | 互动易问答(提问+公司回复) | 巨潮 | | 10.2 | ths_hot_list() / em_hot_rank() / em_hot_concept(code) | 热榜/人气榜/概念命中 | 同花顺+东财 | | 备用源速查 | dragon_tiger_backup / fund_flow_backup / announcements_backup | 龙虎榜/资金流/公告官方备胎(主源被封时降级) | 交易所官方+新浪+东财(沪市公告) | | 估值公式 | forward_pe / pe_digestion / calc_peg / full_valuation(code) | 前向PE / PE消化时间 / PEG / 单票估值全景 | 本地计算 |

数据源优先级 & 东财防封(重要,先读)

优先级原则:能用通达信/腾讯,就别用东财

| 优先级 | 数据源 | 协议 | 封 IP 风险 | 覆盖 | |--------|--------|------|-----------|------| | 1(首选) | mootdx(通达信) | TCP 7709 二进制 | 不封 IP | K线、五档盘口、逐笔成交、财务快照、F10 | | 2 | 腾讯财经 | HTTP GBK | 不封 IP | 实时价、PE/PB/市值/换手率/涨跌停、指数、ETF | | 3 | 新浪 / 巨潮 / 同花顺 | HTTP | 低 | 财报三表、公告、一致预期/热点 | | 4(仅独有数据才用) | 东财 eastmoney | HTTP | 有风控,会封 IP | 见下 |

凡是行情 / K线 / 实时价 / 市值 / 财务三表能从 mootdx 或腾讯拿到的,一律走它们——TCP 协议和腾讯接口实测不封 IP,可放心高频调用。

东财只用于它「独有、别处拿不到」的数据

下列数据只有东财有,通达信/腾讯/新浪都没有,必须用东财(但要限流):

> 龙虎榜席位 · 全市场龙虎榜 · 限售解禁日历 · 融资融券 · 大宗交易 · 股东户数 · 分红送转 · 个股资金流向(分钟/日级)· 行业板块排名 · 研报列表/PDF · 个股新闻 · 全球资讯

东财风控阈值(社区实测,2026-05)

| 行为 | 触发封禁的阈值 | 风险 | |------|---------------|------| | 每秒请求数 | > 5 次/秒 | 高 | | 单 IP 并发连接 | ≥ 10 | 高 | | 1 分钟请求总数 | ≥ 200 次 | 中高 | | 5 分钟请求总数 | ≥ 300 次 | 触发封禁 | | User-Agent | 空 UA / 无浏览器特征 | 中 |

被封表现:连续请求后 403 / 429 / 连接超时 / 返回空数据。临时封禁通常几分钟到几小时。

防封铁律(调用东财时必须遵守)

  1. 串行,不并发——绝不对东财开多线程/协程并发请求
  2. 每次间隔 ≥ 1 秒 + 随机抖动(QPS ≤ 2),批量筛选时调大到 1.5~2 秒
  3. 复用 HTTP 会话(Keep-Alive),不要每次新建连接
  4. 带正常 UA + Referer(本 SKILL 各端点已配好)
  5. 批量场景每只股票之间 sleep——AI 跑批量循环(如筛选 100 只股逐个拉龙虎榜/资金流)是被封的头号元凶

已内置限流:所有东财请求走 em_get()

本 SKILL 提供统一的节流入口 em_get()(定义见下方「东财数据中心统一查询(共用 helper)」),它自动做到:串行限流(最小间隔 EM_MIN_INTERVAL=1.0s + 随机抖动)+ 复用 EM_SESSION(Keep-Alive)+ 默认 UA。所有 eastmoney.com 端点的代码块都已改用 em_get 而非裸 requests.get,AI 直接抄代码即自带防封。批量任务把 EM_MIN_INTERVAL 调大即可进一步降速。

> 注:em_get / EM_SESSION / EM_MIN_INTERVAL 是所有东财代码块共用的前置定义,使用任一东财端点前需先执行「共用 helper」代码块。


When to Activate

  • 用户要查 A 股个股估值(一致预期 / PE / PEG / PE消化)
  • 用户要拉实时行情(价格 / 五档盘口 / K线 / 涨跌停价)
  • 用户要搜研报(按主题 / 按标的 / 按行业 / 下载PDF)
  • 用户要看当日强势股 / 题材归因 / 概念热点
  • 用户要看北向资金动向(沪股通/深股通分钟流向)
  • 用户要看概念板块归属(行业/概念/地域)
  • 用户要看个股资金流向(主力/散户/超大单/大单分钟级)
  • 用户要看龙虎榜席位(营业部 + 机构买卖)
  • 用户要看全市场龙虎榜(当日所有上榜股票 + 净买额排名)
  • 用户要看限售解禁日历(历史解禁 + 未来待解禁)
  • 用户要做行业横向对比(涨跌排名 / 资金流入 / 领涨股)
  • 用户要看融资融券 / 两融数据(融资余额 + 融券余额)
  • 用户要看大宗交易(成交价/量 + 买卖方营业部)
  • 用户要看股东户数变化(筹码集中度)
  • 用户要看分红送转历史(每股派息 + 送股 + 转增)
  • 用户要看指数/ETF行情(上证指数 / 沪深300 / 创业板指 / ETF)
  • 用户要看涨停 / 打板情绪(涨停池 / 连板梯队 / 炸板率 / 跌停 / 涨停原因题材)
  • 用户要看ETF 期权(T型报价 / 希腊字母 Delta·Gamma·Theta·Vega / 隐含波动率 IV)
  • 用户要看投资者互动问答(公司如何回应某传闻/利好 · 互动易)
  • 用户要看市场热度 / 人气榜(同花顺热榜 / 东财人气榜 / 个股概念命中)
  • 用户要看新闻资讯(个股新闻 / 财联社快讯 / 全球资讯)
  • 用户要查公告(巨潮公告全文)
  • 用户要做产业链调研 / 批量横向对比
  • 关键词:估值、一致预期、机构预测、市盈率、PEG、市值、研报、产业链、行业研究、K线、盘口、公告、新闻、强势股、题材、热点、概念归因、北向资金、沪股通、深股通、概念板块、资金流向、主力、龙虎榜、席位、营业部、全市场龙虎榜、净买入、解禁、限售、行业对比、行业轮动、融资融券、两融、大宗交易、股东户数、筹码集中、分红、派息、送股、指数、ETF、涨停、打板、连板、炸板、跌停、涨停原因、封板、晋级率、ETF期权、希腊字母、隐含波动率、互动易、投资者关系、热榜、人气榜、市场热度

Prerequisites

pip install mootdx requests pandas stockstats

| 依赖 | 版本要求 | 用途 | |------|---------|------| | mootdx | >= 0.10 | TCP行情+财务+F10(唯一非HTTP依赖);0.11.x 用 tdx_client() 规避 BESTIP bug,见上节 | | requests | any | 所有HTTP API直连 | | pandas | any | 数据处理+HTML表格解析 | | stockstats | any | 技术指标计算(RSI/MACD/BOLL等) |

> V3.0 架构: 除 mootdx(TCP 二进制协议)外,所有数据源均为直连 HTTP API,零第三方数据封装依赖。每个端点的底层 URL/参数完全暴露,方便调试和定制。

iwencai API Key(仅语义搜索需要)

# 环境变量方式
export IWENCAI_API_KEY="your_key_here"
export IWENCAI_BASE_URL="https://openapi.iwencai.com"

# 申请地址: https://www.iwencai.com/skillhub
# 注册后安装 SkillHub CLI,再安装 report-search 技能即可获得 Key

其他数据源(mootdx / 腾讯 / 东财 / 同花顺 / 百度股市通 / 新浪 / 巨潮)全部免费,无需 key。

mootdx 客户端(必读,规避 0.11.x BESTIP 空串 bug)

> 已知 bug(mootdx 0.11.x): 全新安装后 Quotes.factory(market='std') 裸调用可能抛 ValueError: not enough values to unpack (expected 2, got 0)。 > 根因:~/.mootdx/config.jsonBESTIP.HQ 初始是空字符串 ""(不是缺失键),mootdx 用 dict.get(key, default) 取不到 default,拆包失败。老用户(config 曾填充过 IP)不会触发,所以容易漏测。 > 不要靠锁版本解决:mootdx==0.10.12 在部分环境(如干净的 Python 3.9)下 import mootdx 会因 numpy/pandas 二进制不兼容直接崩。正确做法是用下面的 tdx_client()——显式传 server 绕过 BESTIP,对 0.10 / 0.11 都适用。

统一用以下 helper 创建客户端(所有 mootdx 调用都走它):

import socket
from mootdx.quotes import Quotes

# 实测可用的备选服务器(按延迟排序,2026-06 验证)
_TDX_SERVERS = [
    ('119.97.185.59', 7709), ('124.70.133.119', 7709), ('116.205.183.150', 7709),
    ('123.60.73.44', 7709),  ('116.205.163.254', 7709), ('121.36.225.169', 7709),
    ('123.60.70.228', 7709), ('124.71.9.153', 7709),    ('110.41.147.114', 7709),
    ('124.71.187.122', 7709),
]

def _probe(ip, port, timeout=2.0):
    """TCP 握手探测,判断服务器是否可达"""
    try:
        with socket.create_connection((ip, port), timeout=timeout):
            return True
    except Exception:
        return False

def tdx_client(market='std'):
    """
    创建 mootdx 客户端,规避 0.11.x BESTIP.HQ 空串 bug。
    顺序兜底,保证 IP 列表老化/换网时仍能工作:
      1) 顺序探测 _TDX_SERVERS,用第一个 TCP 可达的显式 server;
      2) 全部不可达 → 回退 mootdx 自带 bestip 测速选优;
      3) 再不行 → 回退裸 factory(老用户 config 已有可用 BESTIP 时成立);
      4) 仍失败 → 抛 RuntimeError,明确报错而非死等。
    """
    for ip, port in _TDX_SERVERS:
        if _probe(ip, port):
            return Quotes.factory(market=market, server=(ip, port))
    try:
        return Quotes.factory(market=market, bestip=True)   # fallback 1
    except Exception:
        pass
    try:
        return Quotes.factory(market=market)                # fallback 2
    except Exception as e:
        raise RuntimeError(
            "所有 mootdx 服务器均不可达。海外网络通常全部超时(TCP 7709),"
            "请走国内代理或更新 _TDX_SERVERS 列表。原始错误:%s" % e
        )

# 用法:client = tdx_client()   # 替代所有 Quotes.factory(market='std')

> 海外 IP 用户: mootdx 走通达信 TCP 7709,海外环境通常全部超时。tdx_client() 会快速失败给出明确报错,而非死等。

市场前缀规则(全局通用)

def get_prefix(code: str) -> str:
    """6位代码 → 市场前缀"""
    if code.startswith(("6", "9")):
        return "sh"
    elif code.startswith("8"):
        return "bj"
    else:
        return "sz"

Ticker 格式归一化

所有接口统一支持多种输入格式,内部归一化为纯 6 位数字:

| 输入 | 归一化结果 | |------|-----------| | 688017 | 688017 | | SH688017 / sh688017 | 688017 | | 688017.SH / 688017.sh | 688017 | | SZ000001 | 000001 | | BJ832000 | 832000 |

东财数据中心统一查询(共用 helper)

龙虎榜/解禁/融资融券/大宗交易/股东户数/分红 共用同一 base URL:

import time
import random
import requests

UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
DATACENTER_URL = "https://datacenter-web.eastmoney.com/api/data/v1/get"

# ── 东财防封:全局节流 + 会话复用 ────────────────────────────────────
# 东财系 HTTP 接口(push2 / datacenter / reportapi / search / np-weblist)有风控:
#   每秒 >5 次 / 单 IP 并发 ≥10 / 1 分钟 ≥200 次  →  临时封 IP。
# 所有 eastmoney.com 请求一律走 em_get():串行限流(最小间隔 + 随机抖动)+ 复用
# Keep-Alive 会话,批量调用时自动降速,避免被封。详见「数据源优先级 & 东财防封」章节。
EM_SESSION = requests.Session()
EM_SESSION.headers.update({"User-Agent": UA})
# 连接级自动重试:瞬态连接错误 / 429 / 5xx 指数退避重试(住宅IP偶发风控更稳)。
# 注意:403 不重试(东财风控信号,重试无益反而加重;按下方 EM_MIN_INTERVAL 降频应对)。
try:
    from requests.adapters import HTTPAdapter
    from urllib3.util.retry import Retry
    _em_adapter = HTTPAdapter(max_retries=Retry(
        total=3, connect=3, backoff_factor=0.6,
        status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["GET"]))
    EM_SESSION.mount("https://", _em_adapter)
    EM_SESSION.mount("http://", _em_adapter)
except Exception:
    pass  # 老版本 urllib3 缺 allowed_methods 等参数时降级为无重试,不影响主流程
EM_MIN_INTERVAL = 1.0          # 两次东财请求最小间隔(秒);批量筛选建议调大到 1.5~2
_em_last_call = [0.0]          # 模块级上次请求时间戳

def em_get(url: str, params: dict | None = None, headers: dict | None = None,
           timeout: int = 15, **kwargs):
    """东财统一请求入口:自动节流 + 复用 session + 默认 UA。
    所有 eastmoney.com 接口都应通过它请求,避免高频被封 IP。"""
    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, headers=headers, timeout=timeout, **kwargs)
    finally:
        _em_last_call[0] = time.time()

def eastmoney_datacenter(report_name: str, columns: str = "ALL",
                          filter_str: str = "", page_size: int = 50,
                          sort_columns: str = "", sort_types: str = "-1") -> list[dict]:
    """东财数据中心统一查询 — 龙虎榜/解禁/融资融券/大宗交易/股东户数/分红 共用(已内置限流)"""
    params = {
        "reportName": report_name, "columns": columns,
        "filter": filter_str, "pageNumber": "1", "pageSize": str(page_size),
        "sortColumns": sort_columns, "sortTypes": sort_types,
        "source": "WEB", "client": "WEB",
    }
    r = em_get(DATACENTER_URL, params=params, timeout=15)
    d = r.json()
    if d.get("result") and d["result"].get("data"):
        return d["result"]["data"]
    return []

Layer 1: 行情层(实时,不封IP)

1.1 mo

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.