用 JavaScript 獲取股票數據,真的有這麼難嗎?
起因
説實話,這個項目的誕生完全是被逼出來的。
去年我想做一個股票行情看板,就是那種簡單的頁面,能實時顯示幾隻自選股的漲跌。聽起來很簡單對吧?但當我真正開始動手的時候,才發現事情沒那麼簡單。
網上搜一圈,股票數據接口相關的工具幾乎全是 Python 的。AkShare、Tushare、掘金量化……確實牛,功能也確實全,但問題是——我是個前端啊。
為了一個小看板,難道要我專門搭一個 Python 後端?再寫個接口轉發給前端?這也太折騰了。
於是我開始找有沒有 JavaScript 能用的方案。結果你猜怎麼着?翻遍了 npm,幾乎找不到一個好用的。有的年久失修,有的只支持 Node.js 不支持瀏覽器,有的類型支持一塌糊塗,還有的接口莫名其妙就掛了。
摸索了一圈之後,我決定:算了,自己寫一個得了。
stock-sdk 是什麼?
簡單説,stock-sdk 就是一個專門給前端和 Node.js 用的股票行情 SDK。
核心目標就一個:讓你用最熟悉的 JavaScript / TypeScript,10 行代碼搞定股票數據獲取。
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}%)`);
});
就這麼簡單。不用搭後端,不用裝 Python,瀏覽器裏直接跑。
它能幹什麼?
寫到現在,功能已經比較齊全了:
行情數據
- A 股、港股、美股、公募基金的實時行情
- 歷史 K 線(日線、周線、月線)
- 分鐘 K 線(1 分鐘到 60 分鐘都支持)
- 當日分時走勢
板塊數據
- 行業板塊、概念板塊的列表和實時行情
- 板塊成分股
- 板塊 K 線數據
技術指標
- 內置 MA、MACD、BOLL、KDJ、RSI 等常用指標
- 一個接口搞定 K 線 + 指標計算
擴展數據
- 資金流向
- 盤口大單
- A 股交易日曆
批量能力
- 一次性獲取全市場 5000+ 只 A 股行情
- 內置併發控制,不會把接口打掛
- 進度回調,知道當前拉取到哪裏了
為什麼要用它?
説實話,這個問題我自己也想過很久。畢竟市面上不是沒有其他方案。
但仔細想想,stock-sdk 確實解決了一些痛點:
1. 零依賴,真的很小
壓縮後不到 20KB。沒有亂七八糟的依賴,不會給你的項目增加額外負擔。
2. 瀏覽器和 Node.js 都能跑
這個是我一開始就確定的設計目標。不管你是做 Web 頁面還是 Node.js 腳本,都能直接用。同時提供 ESM 和 CommonJS 兩種格式,現代項目和老項目都兼容。
3. TypeScript 類型完整
説真的,類型提示這個東西,用過就回不去了。每個接口返回什麼字段、每個參數是什麼類型,IDE 裏一目瞭然。寫代碼的時候不用反覆查文檔。
4. 接口穩定
數據源用的是騰訊財經和東方財富的公開接口,穩定性還是有保障的。而且我做了比較完善的錯誤處理,不會因為某個請求失敗就整個崩掉。
適合什麼場景?
這個 SDK 不是萬能的,我也不打算把它做成大而全的東西。它比較適合這些場景:
- 股票看板:做一個自選股頁面,看看漲跌
- 數據可視化:用 ECharts 或者 TradingView 畫 K 線圖
- 學習 Demo:金融課程、量化入門的演示項目
- 量化驗證:快速驗證一個交易策略的想法
- 定時腳本:Node.js 定時抓取行情數據
如果你需要更專業的量化回測、高頻交易之類的,這個 SDK 可能就不太夠用了。那種場景還是 Python 生態更成熟。
一些實際的例子
獲取全市場 A 股行情
const allQuotes = await sdk.getAllAShareQuotes({
batchSize: 300,
concurrency: 5,
onProgress: (completed, total) => {
console.log(`進度: ${completed}/${total}`);
},
});
console.log(`共獲取 ${allQuotes.length} 只股票`);
5000 多隻股票,幾秒鐘就拉完了。併發控制是內置的,不用自己操心。
獲取帶技術指標的 K 線
const data = await sdk.getKlineWithIndicators('sh600519', {
period: 'daily',
count: 100,
indicators: {
ma: { periods: [5, 10, 20] },
macd: true,
boll: true,
},
});
// data.kline 是原始 K 線
// data.indicators.ma 是均線數據
// data.indicators.macd 是 MACD 數據
// data.indicators.boll 是布林帶數據
一個接口把 K 線和指標都算好了,直接拿去畫圖就行。
寫在最後
這個項目從去年開始寫,斷斷續續維護到現在,功能也越來越完善了。
其實我一直覺得,工具這個東西,好不好用自己最清楚。stock-sdk 就是我自己在用的東西,遇到問題就修,需要新功能就加。
如果你也是前端,也需要獲取股票數據,不妨試試。有問題歡迎提 Issue,我會盡量響應。
相關鏈接
- 📦 NPM
- 📖 GitHub
- 🌐 官方文檔
- 🎮 在線演示
安裝就一行命令:
npm install stock-sdk
如果覺得還不錯,給個 Star ⭐ 唄~