
Hôm nay mình chính thức publish vnstock-js v1.0 lên npm. Đây là cột mốc khá ý nghĩa với mình, và mình muốn chia sẻ câu chuyện phía sau.
Các bản trước đó (v0.x) mình viết khá vội, API thiết kế theo kiểu "nghĩ tới đâu code tới đó". Kết quả là cú pháp dài dòng, khó nhớ, và thiếu nhiều tính năng mà anh em trader hay developer cần.
Mình quyết định viết lại từ đầu với mục tiêu: đơn giản nhất có thể. Nếu bạn chỉ cần lấy giá một cổ phiếu, nó phải gọn trong 2 dòng code.
Trước đây bạn phải viết thế này:
import vnstock from "vnstock-js";
const data = await vnstock.stock.quote.history({ symbols: ["FPT"], ... });
Giờ chỉ cần:
import { stock } from "vnstock-js";
const data = await stock.quote({ ticker: "FPT", start: "2025-01-01" });
Ít chữ hơn, dễ nhớ hơn, autocomplete tốt hơn.
Đây là tính năng mình hào hứng nhất. vnstock-js giờ hỗ trợ WebSocket realtime — bạn có thể nhận giá cổ phiếu cập nhật liên tục trong giờ giao dịch, không cần polling.
const { connect, subscribe, parseData } = stock.realtime;
const socket = connect({
onOpen: () => subscribe(socket, { symbols: ["FPT", "MBB"] }),
onMessage: (data) => {
const parsed = parseData(data);
console.log(`${parsed.symbol}: ${parsed.matched.price}`);
},
});
Không cần cài thêm thư viện nào. SMA, EMA, RSI — import thẳng từ vnstock-js:
import { stock, sma, rsi } from "vnstock-js";
const history = await stock.quote({ ticker: "FPT", start: "2024-10-01" });
const sma20 = sma(history, { period: 20 });
const rsi14 = rsi(history);
Muốn tìm cổ phiếu PE thấp, ROE cao? Một dòng:
const results = await stock.screening({
exchange: "HOSE",
filters: [
{ field: "pe", operator: "<", value: 15 },
{ field: "roe", operator: ">", value: 0.1 },
],
sortBy: "roe",
order: "desc",
});
vnstock-js gọi API từ SSI/Vietcap. Các API này không hỗ trợ CORS, nên bạn không thể gọi trực tiếp từ browser. Có 2 cách dùng:
Riêng WebSocket realtime thì chạy trực tiếp trên browser, không bị CORS.
Chi tiết hướng dẫn xem tại trang Ví Dụ.
Nâng cấp khá nhanh:
npm install vnstock-js@latestimport vnstock from "vnstock-js" thành import { stock } from "vnstock-js"symbols: ["FPT"] thành ticker: "FPT"vnstock.stock.quote.history(...) thành stock.quote(...)vnstock-js bắt đầu từ một side-project nhỏ, giờ đã trở thành thư viện mà mình hy vọng sẽ hữu ích cho cộng đồng developer Việt Nam. Nếu bạn thấy hay, cho mình một star trên GitHub nhé!
Mọi góp ý hay bug report, mở issue tại đây. Cảm ơn mọi người!