vnstock-js

vnstock-js

Tài LiệuDùng Với AIVí DụBài ViếtDemo
k

© Copyright 2026

Giới Thiệu
Cài Đặt
Hướng Dẫn Sử Dụng Nhanh
Quy Ước & Đơn Vịv2.0
Dùng Với AIv2.0
Kiến Trúc
Danh Sách Hàm
Nâng Cấp Từ v1v2.0
CLI
Lịch Sử Phiên Bản
Câu Hỏi Thường Gặp
Cơ Bản
Bảng Giá - Prices
Lịch Sử Giá - History
Danh Mục Mã - Symbols
Tìm Kiếm - Search
Tài Chính - Financials
Thị Trường - Marketv1.5
Sàng Lọc - Screening
Chỉ Báo & Pattern
AI Contextv1.4
Danh Mục Đầu Tưv2.0
Theo Dõi & Cảnh Báov2.0
Backtest & Phiên Tương Tựv2.0
Trình Duyệt & Proxyv2.0
Lịch Giao Dịch - Calendar
Vàng, Tỷ Giá, Tin Tức
MCP Serverv1.4
Watchlistv1.4
Bar
Quote
Tick
TopMover
CompanyProfile
ScreenRow
GoldQuote & FxRate
  1. Tài Liệu
  2. Getting Started
  3. Faq

Câu Hỏi Thường Gặp

Những lưu ý quan trọng khi sử dụng vnstock-js 2.x.

Xem .md

vnstock-js có chạy được trên trình duyệt không?

Có, qua proxy. VietCap chặn request từ trình duyệt (CORS), nên gọi thẳng sẽ lỗi:

Access to fetch at 'https://trading.vietcap.com.vn/...' has been blocked by CORS policy

Gắn proxy có sẵn của thư viện vào server của bạn rồi tạo client với proxy:

// app/api/vnstock/[...path]/route.ts
import { nextHandler } from "vnstock-js/proxy";

export const { GET, POST } = nextHandler();
// client component
import { createClient } from "vnstock-js";

const vn = createClient({ proxy: "/api/vnstock" });
const quote = await vn.stock("FPT").price();

Server Component, API Route, Express, script Node thì gọi thẳng, không cần proxy. Chỉ báo ở vnstock-js/indicators là hàm thuần, chạy được ở mọi nơi. Xem Trình duyệt & proxy.


Sao giá là 127000 chứ không phải 127?

Từ 2.0, mọi số tiền tính bằng đồng: 127000 là 127.000 đồng. Bản 1.x trả giá theo nghìn đồng (127) và thanh khoản theo tỷ đồng, dễ nhầm khi cộng trừ. Muốn hiển thị kiểu bảng điện, chia cho 1000 ở bước hiển thị. Chỉ số vẫn là điểm. Xem Quy ước & đơn vị.


Có cần gọi init() không?

Không. Danh mục mã, lịch nghỉ và tỷ số quý được tải ở lần dùng đầu. Muốn tải trước, dùng createClient({ preload: true }). Muốn giữ cache giữa các lần chạy script, dùng fileStorage() của vnstock-js/node.


watch() chỉ có dữ liệu trong giờ giao dịch?

Chế độ stream nhận giá khớp qua WebSocket nên chỉ có tick mới khi thị trường mở (9:00 tới 11:30, 13:00 tới 14:45, thứ Hai tới thứ Sáu, trừ ngày lễ). Ngoài giờ, chế độ poll vẫn trả một tick với giá đóng cửa. Nhớ gọi hàm dừng mà watch() trả về, nếu không tiến trình sẽ chạy mãi.


Sàng lọc chạy chậm?

Điều kiện trên bảng giá và tỷ số quý (ROE, ROA, biên lợi nhuận) chạy trước, không tốn request. P/E, P/B và vốn hoá phải hỏi theo từng mã, nên chỉ được hỏi cho các mã còn lại sau bước đầu. Lọc theo nhóm (group: 'VN30') nhanh hơn lọc cả sàn. Kết quả nên cache ở tầng ứng dụng.


Lịch sử khối ngoại trả mảng rỗng?

VietCap chỉ cho xem khối ngoại của phiên hiện tại. Lịch sử do repo vnstock-js tự ghi mỗi ngày từ năm 2026, nên phiên trước ngày bắt đầu ghi không có trong kết quả. Gọi foreign() không tham số để lấy phiên hiện tại.


Bị lỗi RATE_LIMIT?

Nguồn từ chối vì gọi quá nhiều trong thời gian ngắn. Thư viện đã tự thử lại với backoff; nếu vẫn lỗi, giảm số request song song, gộp nhiều mã vào một vn.prices([...]), và cache kết quả.


Tại sao không dùng TCBS, SSI REST API?

Hai nguồn này cần xác thực. vnstock-js chỉ dùng nguồn công khai, không cần token:

  • VietCap cho cổ phiếu, chỉ số, công ty, tài chính
  • SSI WebSocket cho giá trực tiếp
  • BTMC, GiaVang.net cho giá vàng
  • Vietcombank cho tỷ giá

Có hỗ trợ phái sinh không?

Chưa. Hiện hỗ trợ cổ phiếu, chỉ số, vàng và tỷ giá.


Làm sao đóng góp?

Xem CONTRIBUTING.md trên GitHub.

PreviousLịch Sử Phiên Bản
NextCơ Bản

Nội Dung

vnstock-js có chạy được trên trình duyệt không?Sao giá là 127000 chứ không phải 127?Có cần gọi `init()` không?`watch()` chỉ có dữ liệu trong giờ giao dịch?Sàng lọc chạy chậm?Lịch sử khối ngoại trả mảng rỗng?Bị lỗi `RATE_LIMIT`?Tại sao không dùng TCBS, SSI REST API?Có hỗ trợ phái sinh không?Làm sao đóng góp?