从一个 issue 到阮一峰周刊推荐:stock-sdk 的开源成长记

最近,Stock SDK 被阮一峰老师的《科技爱好者周刊》第 397 期收录到了「工具」栏目里:科技爱好者周刊(第 397 期):财富正在向 AI 集中

对一个个人维护的开源项目来说,这是一个很有意思的节点。最早做 Stock SDK,只是想解决一个很具体的问题:前端工程师想做股票行情看板、可视化 Demo、金融课程示例,为什么总是要先绕到 Python 生态,或者额外搭一个后端服务?

现在,Stock SDK 的公开版本已经更新到 1.9.3,项目围绕真实用户反馈已经收到并解决了 10 余个 issue;GitHub 上也已经获得了 900+ Star。它已经不只是一个「能查行情」的小工具,而是在逐步变成一个面向浏览器和 Node.js 的金融数据 SDK。

这篇文章就系统介绍一下,Stock SDK 目前到底能做什么。

先说定位:给前端和 Node.js 用的股票行情 SDK

Stock SDK 的核心定位很明确:

不依赖 Python,不要求自建后端,让开发者直接在浏览器或 Node.js 中获取股票、基金、期货、期权等公开财经数据。

这和很多传统行情工具的出发点不同。Python 生态已经有 AkShare、Tushare 等成熟方案,但在前端场景里,常见问题是:

  • Web 页面想直接展示行情,却不想额外维护服务端转发层。
  • Node.js 脚本想定时抓取数据,却不想引入 Python 运行时。
  • 财经接口返回格式不统一,字段、编码、批量请求、分页、限流都需要反复处理。
  • 项目希望有完整 TypeScript 类型,而不是一堆松散的 JSON。

Stock SDK 解决的是这些「JavaScript 工程里真实会遇到」的问题。它提供 ESM 和 CommonJS 两种产物,支持浏览器与 Node.js 18+,并保持零运行时依赖,适合直接集成到前端页面、数据看板、Node.js 任务脚本或教学 Demo 里。

一个最小示例大概是这样:

ts 复制代码
import { StockSDK } from 'stock-sdk';

const sdk = new StockSDK();

const quotes = await sdk.getSimpleQuotes([
  'sh000001',
  'sz000858',
  'sh600519',
]);

for (const quote of quotes) {
  console.log(`${quote.name}: ${quote.price} (${quote.changePercent}%)`);
}

这段代码不需要后端服务,也不需要 Python 进程。只要项目里安装了 stock-sdk,就可以直接拿到结构化行情数据。

一、行情数据:A 股、港股、美股、公募基金

Stock SDK 最基础、也是最常用的能力,是实时行情。

目前它支持:

  • A 股 / 指数完整行情:getFullQuotes
  • A 股 / 指数简要行情:getSimpleQuotes
  • 港股行情:getHKQuotes
  • 美股行情:getUSQuotes
  • 公募基金行情:getFundQuotes

这些接口主要面向「页面展示」和「轻量分析」场景。例如行情看板、股票搜索结果页、投资组合列表、课程 Demo、Node.js 定时快照等,都可以直接使用。

更重要的是,它不只支持单只股票。SDK 内置了批量查询能力,可以获取 A 股、港股、美股、公募基金代码列表,也可以按代码列表批量拉取行情:

  • getAShareCodeList
  • getHKCodeList
  • getUSCodeList
  • getFundCodeList
  • getAllAShareQuotes
  • getAllHKShareQuotes
  • getAllUSShareQuotes
  • getAllQuotesByCodes

例如全市场 A 股行情,可以通过内置并发控制分批获取:

ts 复制代码
const allQuotes = await sdk.getAllAShareQuotes({
  batchSize: 300,
  concurrency: 5,
  onProgress: (completed, total) => {
    console.log(`进度: ${completed}/${total}`);
  },
});

console.log(`共获取 ${allQuotes.length} 只股票`);

这类能力适合做大盘热力图、全市场涨跌统计、股票池筛选、行情缓存等功能。

二、K 线与分时:从日线到分钟线

只有实时行情还不够,做图表、回看走势、计算指标,都需要 K 线数据。

Stock SDK 目前提供:

  • A 股历史 K 线:getHistoryKline
  • 港股历史 K 线:getHKHistoryKline
  • 美股历史 K 线:getUSHistoryKline
  • A 股分钟 K 线:getMinuteKline
  • A 股当日分时:getTodayTimeline

历史 K 线覆盖日、周、月等周期;分钟 K 线支持 1、5、15、30、60 分钟等粒度。对于常见的 Web K 线图、分时图、走势回放、技术指标计算,这些接口已经可以支撑完整的数据流。

1.9.1 开始,港股和美股历史 K 线也拆成了更清晰的类型:HKHistoryKlineUSHistoryKline,分别携带货币和时区信息,同时保留旧类型别名,兼顾向后兼容。

三、技术指标:不仅拿数据,还能直接算指标

很多行情 SDK 只负责把数据拿回来,指标计算需要业务侧自己实现。Stock SDK 直接内置了一批常见技术指标:

  • MA / SMA / EMA / WMA
  • MACD
  • BOLL
  • KDJ
  • RSI
  • WR
  • BIAS
  • CCI
  • ATR
  • OBV
  • ROC
  • DMI
  • SAR
  • KC

你可以单独使用 calcMAcalcMACDcalcBOLL 等函数,也可以通过 addIndicators 批量添加指标,还可以直接调用 getKlineWithIndicators 获取「K 线 + 指标」的组合结果。

这对于前端图表非常实用:业务层不需要再复制一份指标算法,也不需要在每个图表组件里重复处理窗口期、空值和结果对齐问题。

四、板块数据:行业、概念与成分股

股票分析里,个股不是孤立存在的。很多时候你需要看它所属的行业、概念板块,以及板块内其他成分股的表现。

Stock SDK 提供了行业板块和概念板块两组能力:

  • 行业板块列表:getIndustryList
  • 行业板块实时行情:getIndustrySpot
  • 行业板块成分股:getIndustryConstituents
  • 行业板块历史 K 线:getIndustryKline
  • 行业板块分钟行情:getIndustryMinuteKline
  • 概念板块列表:getConceptList
  • 概念板块实时行情:getConceptSpot
  • 概念板块成分股:getConceptConstituents
  • 概念板块历史 K 线:getConceptKline
  • 概念板块分钟行情:getConceptMinuteKline

有了这些接口,就可以做行业轮动、概念热度、板块成分股涨跌分布、板块 K 线等功能。

五、资金流向、北向资金与市场事件

1.x 的持续迭代开始,Stock SDK 不再只停留在行情和 K 线,而是补充了更多市场结构数据。

资金流向方面,SDK 支持:

  • 个股资金流历史:getIndividualFundFlow
  • 大盘资金流历史:getMarketFundFlow
  • 个股资金流排名:getFundFlowRank
  • 板块资金流排名:getSectorFundFlowRank
  • 板块历史资金流:getSectorFundFlowHistory
  • 基础资金流向:getFundFlow
  • 盘口大单占比:getPanelLargeOrder

沪深港通 / 北向资金方面,支持:

  • 北向 / 南向资金分时:getNorthboundMinute
  • 沪深港通资金流向汇总:getNorthboundFlowSummary
  • 北向持股排行:getNorthboundHoldingRank
  • 北向 / 南向历史资金:getNorthboundHistory
  • 个股北向持仓历史:getNorthboundIndividual

市场事件方面,支持:

  • 涨停、昨日涨停、强势、次新、炸板、跌停等股池:getZTPool
  • 盘口异动:getStockChanges
  • 板块异动:getBoardChanges

这些数据适合做更偏交易观察和市场情绪分析的页面,比如资金监控、题材热度、涨停复盘、北向资金追踪等。

六、龙虎榜、大宗交易、融资融券

如果要把一个股票数据工具做成更完整的「看盘辅助」或「研究辅助」,只看价格是不够的。Stock SDK 也覆盖了一批交易公开信息:

龙虎榜相关能力包括:

  • 龙虎榜详情:getDragonTigerDetail
  • 个股上榜统计:getDragonTigerStockStats
  • 机构买卖统计:getDragonTigerInstitution
  • 营业部排行:getDragonTigerBranchRank
  • 个股席位明细:getDragonTigerStockSeatDetail

大宗交易和融资融券方面包括:

  • 大宗交易市场统计:getBlockTradeMarketStat
  • 大宗交易明细:getBlockTradeDetail
  • 大宗交易每日统计:getBlockTradeDailyStat
  • 融资融券账户统计:getMarginAccountInfo
  • 融资融券标的明细:getMarginTargetList

这些接口可以用来做复盘工具、个股事件页、机构行为观察、融资融券跟踪等功能。

七、期货与期权:不止股票

Stock SDK 的能力边界也扩展到了期货和期权。

期货方面支持:

  • 国内期货历史 K 线:getFuturesKline
  • 全球期货实时行情:getGlobalFuturesSpot
  • 全球期货历史 K 线:getGlobalFuturesKline
  • 期货库存品种列表:getFuturesInventorySymbols
  • 期货库存数据:getFuturesInventory
  • COMEX 黄金 / 白银库存:getComexInventory

期权方面支持:

  • 中金所股指期权 T 型报价:getIndexOptionSpot
  • 中金所股指期权日 K 线:getIndexOptionKline
  • 中金所全部期权实时行情:getCFFEXOptionQuotes
  • ETF 期权到期月份:getETFOptionMonths
  • ETF 期权到期日与剩余天数:getETFOptionExpireDay
  • ETF 期权当日分钟行情:getETFOptionMinute
  • ETF 期权日 K 线:getETFOptionDailyKline
  • ETF 期权 5 日分钟行情:getETFOption5DayMinute
  • 商品期权 T 型报价:getCommodityOptionSpot
  • 商品期权日 K 线:getCommodityOptionKline
  • 期权龙虎榜:getOptionLHB

这让 SDK 不再只是股票行情接口,而是一个更广义的公开金融数据访问层。

八、搜索、交易日历与外链工具

围绕实际应用,Stock SDK 还补充了一些「不显眼但很必要」的能力。

例如:

  • 股票搜索:search
  • A 股交易日历:getTradingCalendar
  • 是否交易日判断:isTradingDay
  • 市场状态判断:getMarketStatus
  • 搜索结果外链生成:generateSearchExternalLinks

搜索结果可以直接生成东方财富、雪球等外部链接,方便在前端页面里做跳转。交易日历和市场状态则适合用于定时任务、行情刷新控制、非交易日提示等场景。

九、工程能力:零依赖、类型完整、请求治理

我自己很看重的一点是:Stock SDK 不是把一堆公开接口简单包一层就结束,而是尽量把它做成一个能被正式项目接入的 TypeScript SDK。

目前它具备:

  • 零运行时依赖
  • 浏览器和 Node.js 双端兼容
  • ESM / CommonJS 双格式输出
  • 完整 TypeScript 类型定义
  • Vitest 单元测试和集成测试
  • README、中文文档、英文文档、在线 Playground
  • provider 级请求治理能力

请求治理尤其重要。财经公开接口并不总是稳定,可能遇到超时、限流、临时不可用、返回格式变化等问题。Stock SDK 内部提供了 RequestClient,并支持:

  • timeout
  • retry
  • rate limit
  • circuit breaker
  • providerPolicies

例如可以给东方财富单独配置更严格的限流策略:

ts 复制代码
import { StockSDK } from 'stock-sdk';

const sdk = new StockSDK({
  retry: { maxRetries: 2, baseDelay: 500 },
  providerPolicies: {
    eastmoney: {
      timeout: 12000,
      rateLimit: {
        requestsPerSecond: 3,
        maxBurst: 3,
      },
    },
  },
});

这类设计的目标不是追求接口数量,而是让 SDK 在真实项目里更耐用。

十、AI / MCP:让 AI 工具也能调用股票数据

除了 SDK 本身,Stock SDK 还配套了 stock-sdk-mcp,可以作为 MCP Server 接入 Cursor、Claude Desktop、Gemini、Codex CLI、OpenClaw 等 AI 工具。

这意味着,AI 助手不仅可以「解释股票概念」,还可以通过工具调用拿到真实行情数据,再基于数据做技术分析、市场概览、智能选股、实时监控等任务。

在 AI 编程工具越来越普及的背景下,这一点很有意思:Stock SDK 提供的是 JavaScript / TypeScript 工程里的基础数据能力,而 MCP 则把这些能力继续开放给 AI Agent。

适合哪些场景?

如果你正在做下面这些东西,Stock SDK 会比较合适:

  • 股票行情看板
  • Web / Admin 数据大屏
  • ECharts、TradingView 类图表 Demo
  • 金融课程或教学案例
  • Node.js 定时行情抓取
  • 投资组合观察页
  • 市场复盘工具
  • 量化策略原型验证
  • AI Agent 金融数据工具调用

但也需要明确一点:Stock SDK 使用的是腾讯财经、东方财富等公开接口,实时行情并不是交易所级别的实时撮合数据,通常会有数十秒到数分钟延迟。因此,它适合展示、研究、教学、分析、原型验证,不适合用于高频交易或强实时交易决策。

结语

从最初的「前端能不能直接拿股票行情」到现在覆盖 A 股、港股、美股、公募基金、期货、期权、K 线、分时、指标、资金、北向、龙虎榜、融资融券、MCP 集成,Stock SDK 还在持续扩展。

这次被《科技爱好者周刊》收录,对我来说既是一次曝光,也是一次提醒:一个工具只有真正解决别人的问题,才值得继续打磨。

如果你正在做股票数据相关的前端项目、Node.js 脚本、行情看板、教学 Demo 或 AI 数据工具,欢迎试试看 Stock SDK,也欢迎提 issue 或参与改进。

相关推荐
AllData公司负责人2 小时前
亲测丝滑,体验跃迁|AllData通过集成开源项目Cube-Studio,降低机器学习落地门槛
java·大数据·数据库·人工智能·机器学习·开源·cube-studio
HelloGitHub2 小时前
《HelloGitHub》第 122 期
开源·github
带娃的IT创业者3 小时前
开源语音AI的边界:从 `luongnv89/claude-howto` 看前沿技术的落地实践
人工智能·开源·llm·大语言模型·claude·语音交互·语音ai
梦梦代码精3 小时前
BuildingAI 开源智能体平台体验:从一键部署到商业闭环的真实感受
开源
Tencent_TCB3 小时前
云开发 CloudBase把一套完整的 Vibe Coding 平台开源了
开源
龙亘川3 小时前
【实战教程】新手入门|部署亘川一网统管开源版本(全方案全步骤指南)
开源
lipku3 小时前
LiveTalking 更新:后台管理 + Avatar生成API,打造生产级数字人引擎
开源·实时数字人
深开鸿3 小时前
开源鸿蒙机器人操作系统M-Robots OS 2.0重磅发布
机器人·开源·harmonyos
zt1985q3 小时前
本地部署开源向量数据库 Weaviate 并实现外部访问
运维·数据库·网络协议·开源