从一条 GitHub issue 开始
最早让我意识到 stock-sdk 可能真的能帮到一些人的,是 GitHub 上的一条 issue。
有用户建议我把项目投稿到「阮一峰的科技爱好者周刊」。当时我并没有抱太大期待,毕竟它只是一个刚开源不久的小工具,目标也很朴素:让前端开发者不必绕到 Python 生态里,才能拿到股票行情数据。
没想到几周后,我真的在 阮一峰的科技爱好者周刊 397 期 里看到了它。
那种感觉和 GitHub star 增长不太一样。star 是一个数字,而被周刊收录更像是一种确认:这个工具确实解决了某些人的真实问题,也被更多有类似需求的开发者看见了。
之后项目也开始进入更快的迭代节奏:
- 版本已经推进到 v1.10.0
- GitHub 获得了 940+ stars
- 累计处理了 10+ 个 issues
- 从板块、基金、搜索类型区分,到请求限流和并发安全,很多能力都来自社区反馈
所以这篇文章想重新系统介绍一下:现在的 stock-sdk 到底能做什么,适合哪些人用,以及它为什么对前端开发者比较友好。
如果你是前端工程师、独立开发者、行情看板作者、量化爱好者,或者正在尝试用 AI 工具搭一个金融数据小应用,这个 SDK 可能能帮你省掉不少重复工作。
为什么要做 stock-sdk?
前端想获取股票行情数据,过去经常会遇到几个很典型的问题。
一方面,成熟的数据工具大多集中在 Python 生态,比如 akshare、tushare、efinance 等。它们能力很强,但天然不是为浏览器或前端工程准备的。
另一方面,如果只是想做一个行情看板、个股监控 demo、基金展示页,专门再维护一个 Node 或 Python 后端,成本又显得有点重。
更麻烦的是,不同财经数据源返回的数据格式并不统一:有的接口返回 ~ 分隔字符串,有的需要处理 GBK 编码,有的还套着 jsonp。真正写起来,很多时间都花在了解析和兼容上。
stock-sdk 想解决的就是这个问题:
让前端开发者可以直接用 JavaScript / TypeScript 获取常用金融行情数据。
它的几个核心特点是:
- 零依赖
- 支持浏览器和 Node.js 18+
- 内置完整 TypeScript 类型
- 安装后即可调用
- 对常见财经接口做了统一封装
一个最简单的调用示例:
ts
import { StockSDK } from 'stock-sdk';
const sdk = new StockSDK();
const quotes = await sdk.getSimpleQuotes(['sh000001', 'sz000858', 'sh600519']);
quotes.forEach(q => {
console.log(`${q.name}: ${q.price} (${q.changePercent}%)`);
});
这段代码既可以跑在现代 Node 环境里,也可以直接跑在浏览器里。
当前能力概览
经过多个版本迭代后,stock-sdk 已经不只是一个简单的股票报价工具,而是逐渐扩展成了一个面向前端的行情数据工具箱。
下面按数据类型拆开介绍。
1. 覆盖 A 股、港股、美股和基金的实时行情
目前 SDK 已经支持多个市场的实时行情获取:
| 方法 | 主要用途 |
|---|---|
getFullQuotes / getSimpleQuotes |
获取 A 股、指数的完整或简要行情 |
getHKQuotes |
获取港股行情 |
getUSQuotes |
获取美股行情 |
getFundQuotes |
获取公募基金行情 |
如果需要一次性拉取全市场 A 股数据,也可以直接使用内置的批量接口:
ts
const allQuotes = await sdk.getAllAShareQuotes({
batchSize: 300,
concurrency: 5,
onProgress: (completed, total) => console.log(`${completed}/${total}`),
});
它会自动按批次并发请求,适合做市场总览、行情看板、涨跌分布统计等场景。
2. 历史 K 线与盘中分时
除了实时行情,K 线和分时数据也是金融应用里最常用的基础数据。
stock-sdk 目前支持:
- A 股、港股、美股的日线 / 周线 / 月线
- 1 / 5 / 15 / 30 / 60 分钟级别 K 线
- 当日分时走势
对应方法包括:
getHistoryKlinegetHKHistoryKlinegetUSHistoryKlinegetMinuteKlinegetTodayTimeline
从 v1.9.1 开始,港股和美股 K 线类型被拆分为独立的 HKHistoryKline 与 USHistoryKline。这样做的好处是,返回结果里可以带上更明确的货币和时区信息,调用方不需要再额外猜测这条数据属于哪个市场、使用什么交易时区。
3. 常见技术指标内置
拿到 K 线之后,很多应用的下一步就是计算技术指标。
为了减少重复实现,SDK 内置了常见指标计算能力,包括:
txt
MA / EMA / WMA / MACD / BOLL / KDJ / RSI / WR
BIAS / CCI / ATR / OBV / ROC / DMI / SAR / KC
如果你不想自己先取 K 线、再单独计算指标,可以直接使用:
ts
const data = await sdk.getKlineWithIndicators({
code: 'sh600519',
period: 'day',
indicators: ['MA(5)', 'MA(20)', 'MACD', 'BOLL'],
});
这个方法会一次返回 K 线数据和指定指标结果,比较适合做图表、策略 demo 或 AI 分析输入。
4. 行业板块与概念板块
对于 A 股应用来说,只看个股往往不够,板块数据也很重要。
SDK 对行业板块提供了比较完整的一组方法:
getIndustryListgetIndustrySpotgetIndustryConstituentsgetIndustryKlinegetIndustryMinuteKline
概念板块也提供了对应的 getConcept* 系列方法。
这意味着你可以比较方便地拿到板块列表、板块行情、成分股、K 线和分时数据。对于做板块轮动、热点追踪、市场情绪分析的应用来说,这一层封装能节省不少接口适配工作。
5. 期货和期权数据
除了股票和基金,stock-sdk 也覆盖了一部分衍生品数据。
期货方面包括:
- 国内期货 K 线
- 全球期货实时行情
- 全球期货 K 线
- 期货库存数据
- COMEX 黄金、白银库存
期权方面包括:
- 中金所股指期权 T 型报价
- ETF 期权当日分钟数据
- ETF 期权历史日 K
- ETF 期权 5 日分钟数据
- 商品期权报价和 K 线
- 期权龙虎榜
这些能力相对小众,但对于做衍生品研究、策略验证或数据探索的开发者来说,会很实用。
6. 资金流向与北向资金
资金面数据是很多 A 股用户非常关注的一类数据。
SDK 目前支持个股、大盘、行业和北向资金相关接口,例如:
getIndividualFundFlow:个股资金流历史getMarketFundFlow:大盘资金流历史getFundFlowRank:个股资金流排名getSectorFundFlowRank:板块资金流排名getNorthboundMinute:北向资金分时getNorthboundHoldingRank:北向持股排行getNorthboundHistory:北向资金历史getNorthboundIndividual:个股北向持仓
这些数据可以用在市场复盘、资金流监控、个股热度判断等场景里。
7. 龙虎榜、大宗交易、融资融券
A 股市场里还有一些非常本土化的数据,比如龙虎榜、大宗交易和融资融券。
stock-sdk 也对这些数据做了封装:
- 龙虎榜详情
- 个股龙虎榜统计
- 机构买卖数据
- 营业部排行
- 席位明细
- 大宗交易市场总览
- 大宗交易明细
- 个股每日大宗交易统计
- 融资融券账户统计
- 融资融券标的明细
如果你想做游资跟踪、机构动向分析或杠杆资金观察,这部分接口会比较有用。
8. 涨停板池与盘口异动
短线交易相关的数据也有覆盖。
getZTPool 支持获取多类股池,包括:
- 涨停
- 昨日涨停
- 强势股
- 次新股
- 炸板股
- 跌停股
getStockChanges 则覆盖 22 种盘口异动,比如火箭发射、大笔买入、封涨停等。
另外,getBoardChanges 可以获取当日板块异动详情。
这类数据适合用来做实时监控、短线情绪看板或热点扫描。
9. v1.10.0 重点增强:基金数据
v1.10.0 对基金能力做了一次比较大的扩展。
基金相关 issue 是项目被更多人看到之后经常出现的需求之一,所以这一版重点补齐了几类常用数据:
| 方法 | 能力说明 |
|---|---|
getFundNavHistory |
获取基金历史净值,包括单位净值和累计净值 |
getFundEstimate |
获取当日实时估值,包括 T-1 单位净值和盘中估算 |
getFundRankHistory |
获取同类排名走势,包括近三月每日排名和百分位 |
getFundDividendList |
获取基金或 ETF 分红明细,支持全市场按年份分页 |
如果你想做基金看板、ETF 展示页、定投辅助工具,这部分能力基本可以直接拿来用。
10. 搜索、交易日历、分红和外链生成
除了核心行情数据,SDK 里还有一些看起来不大但很省心的工具能力。
比如:
search:支持按代码、名称、拼音搜索- 搜索结果中区分股票、ETF 等类型
getTradingCalendar:获取 A 股交易日历isTradingDay():判断某天是否为交易日getDividendDetail:获取个股分红派送数据generateSearchExternalLinks(result):根据搜索结果生成东方财富、雪球等外部链接
这些能力在实际做产品或 demo 时经常会用到,可以减少不少边角逻辑。
11. 请求治理:重试、限流、熔断和错误码
如果只是写 demo,能请求成功就够了。但如果要在真实应用里使用,接口稳定性就很重要。
stock-sdk 对请求层做了一些治理能力:
ts
const sdk = new StockSDK({
retry: { maxRetries: 2, baseDelay: 500 },
providerPolicies: {
eastmoney: {
timeout: 12000,
rateLimit: { requestsPerSecond: 3, maxBurst: 3 },
},
},
});
try {
await sdk.getSimpleQuotes(['sh600519']);
} catch (error) {
if (error instanceof HttpError) {
console.log(error.status, error.statusText);
}
console.log(getSdkErrorCode(error));
}
目前支持:
- 全局重试配置
- 退避延迟
- 按数据源配置 timeout
- 按数据源配置限流策略
- 标准化错误码
- 保留原始错误类型
- 浏览器环境下的全局 mutex,避免并发请求踩同一数据源
其中并发安全这一块,也来自社区真实反馈:有用户提到使用一段时间后可能触发数据源限制,因此 SDK 在请求治理上做了更保守的处理。
12. 面向 AI 工具的 MCP Server
最近一年,很多开发者开始让 AI 工具参与数据分析、选股辅助和看板生成。
为了让 stock-sdk 可以被 AI 工具直接调用,我也配套发布了 stock-sdk-mcp,它是一个标准 MCP Server,可接入 Cursor、Claude Desktop、Codex CLI、Gemini CLI 等工具。
配置示例:
json
{
"mcpServers": {
"stock-sdk": {
"command": "npx",
"args": ["-y", "stock-sdk-mcp"]
}
}
}
接入之后,你可以直接让 AI 调用行情数据,例如:
帮我看一下贵州茅台最近的 MACD 走势。
今天涨停板有哪些?
北向资金最近 5 天加仓最多的 10 只股票是什么?
目前 MCP 侧内置了 4 类专业 AI Skills:
- 技术分析
- 智能选股
- 市场概览
- 实时监控
这部分会继续扩展,因为 AI + 金融数据确实是一个很适合工具化的方向。
项目现在的一些数据
截至目前,stock-sdk 的几个阶段性数据如下:
- 940+ GitHub stars
- 68 forks
- 最新版本推进到 v1.10.0
- 已关闭 10+ issues
- 被阮一峰科技爱好者周刊 issue-397 收录
开源项目当然不能只看数字,但这些反馈确实给了我继续维护的动力。
尤其是看到用户在 issue 里提出具体需求,比如支持基金、补充分红、区分 ETF 类型、处理并发限制等,会明显感觉到:这个项目不是一个人关起门来写的工具,而是在被真实场景不断推动着往前走。
接下来计划做什么
后续我会继续围绕几个方向迭代:
- 继续补强基金数据,比如盘中估值多源对比、定投回测等
- 增强
RequestClient的可观测性,开放 per-provider metrics - 扩展 MCP Skills,让 AI 更自然地使用金融数据
- 根据社区 issue 继续补齐高频需求
如果你正在做前端行情页、金融数据看板、量化 demo,或者只是想用 TypeScript 快速拿到一些常用行情数据,欢迎试试这个项目。
相关链接
- NPM :https://www.npmjs.com/package/stock-sdk
- GitHub :https://github.com/chengzuopeng/stock-sdk
- 官方文档 :https://stock-sdk.linkdiary.cn/
- 在线 Playground :https://stock-sdk.linkdiary.cn/playground/
- 看板 Demo :https://chengzuopeng.github.io/stock-dashboard/
- 阮一峰周刊收录 :https://github.com/ruanyf/weekly/blob/master/docs/issue-397.md
如果这个工具对你有帮助,欢迎点一个 Star。也欢迎在 issues 里反馈使用中的问题或希望新增的数据能力。