vnstock-js

vnstock-js

Tài LiệuVí DụBài ViếtTài Chính
k

© Copyright 2026

Giới Thiệu
Danh Sách Hàm
Cài Đặt
Kiến Trúc
Hướng Dẫn Sử Dụng Nhanh
CLI
Lịch Sử Phiên Bản
Câu Hỏi Thường Gặp
Cơ Bản
Giao Dịch - Trading
Báo Giá - Quote
Niêm Yết - Listing
Tài Chính - Financials
Chỉ Báo - Indicators
AI Contextv1.4Mới
MCP Serverv1.4Mới
Watchlistv1.4Mới
Sàng Lọc - Screening
Tìm Kiếm - Search
Lịch Giao Dịch - Calendar
Realtime - Thời Gian Thực
QuoteHistory
PriceBoardItem
TopStock
CompanyProfile
ScreenResult
RealtimeQuote
ExchangeRate
  1. Tài Liệu
  2. Getting Started
  3. Changelog

Lịch Sử Phiên Bản

Các thay đổi qua từng phiên bản vnstock-js

1.3.1

Bản vá cho CLI sau khi release 1.3.0.

Sửa

  • history --range 7d giờ trả đúng ~7 phiên (trước đây trả ~365 phiên do VCI API bỏ qua start khi countBack mặc định lớn). Handler tự tính countBack theo khoảng ngày và filter lại kết quả.
  • Hiển thị giá: làm tròn tối đa 2 chữ số thập phân, cắt số 0 cuối. Không còn 56.291760000000004k.
  • symbols --exchange HOSE giờ hoạt động (trước đây trả rỗng vì data lưu HSX). Directory.getByExchange tự map HOSE → HSX.
  • symbols mặc định trả đầy đủ (trước đây tự cắt ở 50). --limit N chỉ áp dụng khi user chỉ định.
  • vnstock -v cho --version (trước đây dùng -V hoa mặc định của commander). Version đọc từ package.json thay vì hardcode. --verbose ở sub-command bỏ alias -v để tránh xung đột.

Thêm

  • Header cho history và symbols: ví dụ VCB 2026-04-07 → 2026-04-14 (5 phiên) và HOSE (702 mã).
  • docs/local-test.md — hướng dẫn npm link, watch mode, npm pack, debug CLI trước khi release.
  • npm run dev — tsc --watch để auto rebuild khi sửa code.

1.3.0

Breaking

  • await init() bắt buộc trước khi dùng symbol lookup hoặc calendar API. Symbol và holiday data không còn bundle trong package — fetch runtime từ raw GitHub để luôn mới.

    import { init } from "vnstock-js";
    
    await init();   // gọi 1 lần lúc khởi động app
    

    init() nhận options: symbolsUrl, holidaysUrl, ttl, force, cacheDir, noCache, timeout.

Tính năng mới

  • Remote data module — symbols/holidays fetch từ raw.githubusercontent.com/ttqteo/vnstock-js/master/data/*.json
  • Disk cache tại ~/.vnstock-js/cache/, TTL mặc định 24h
  • Offline fallback — fetch fail thì dùng cache cũ
  • NotInitializedError và DataUnavailableError error types
  • CLI tool — cài npm i -g vnstock-js hoặc npx vnstock-js <command>:
    • vnstock quote <SYMBOL> — snapshot 1 mã
    • vnstock history <SYMBOL> [--from 7d|1w|1m|1y] [--range 7d] [--limit N] — OHLCV
    • vnstock search <QUERY> — tìm mã theo tên/ticker
    • vnstock symbols [--exchange HOSE|HNX|UPCOM] — liệt kê mã
    • Flags chung: --json, --csv, --no-color, -v, --verbose. Non-TTY auto plain text.

Realtime hardening

  • Sửa: unsubscribe() giờ gửi unsub message cho server. Message routing phân biệt quote/JSON/plain text. Loại bỏ WebSocket ping() vô nghĩa (browser không còn reset oan ~40s).
  • Dead-man's switch thay heartbeat: reconnect nếu không nhận message nào trong deadManTimeout (mặc định 60s).
  • Breaking (minor): bỏ RealtimeClientOptions.heartbeatInterval và heartbeatTimeout, thay bằng deadManTimeout?: number.

Thay đổi

  • data/*.json không còn bundle trong npm package.

1.2.0 (03-04-2026)

Tính năng mới

  • Symbol Directory -- danh sách ~3300 mã offline với search theo tên/mã/ngành, relevance ranking, VN30 boost
  • Market Calendar -- isTradeDay, nextTradeDay, prevTradeDay, holidays, giờ giao dịch sàn HOSE
  • Rate limit auto-wait -- gặp HTTP 429 tự động chờ theo Retry-After header rồi retry

API mới

  • stock.search(query, { limit }) -- tìm mã cổ phiếu offline
  • listing.search(), listing.getBySymbol(), listing.getByExchange(), listing.getByIndustry(), listing.allLocal()
  • market.calendar.isTradeDay(date), nextTradeDay(date), prevTradeDay(date), holidays(year), session()

Nội bộ

  • fetchWithRetry hỗ trợ rateLimitWait option (mặc định 5s)
  • Thêm SymbolInfo, TradingSession types
  • Thêm script npm run update-symbols
  • Bundle data/symbols.json và data/holidays.json trong npm package

1.1.0 (03-04-2026)

Tính năng mới

  • Error taxonomy -- 6 custom error classes: VnstockError, NetworkError, RateLimitError, ApiError, InvalidSymbolError, InvalidParameterError, ParseError
  • Realtime v2 -- RealtimeClient dùng EventEmitter pattern, auto-reconnect với exponential backoff, heartbeat, subscribe queue
  • Adapter pattern -- StockDataAdapter interface + VciAdapter, chuẩn bị cho multi-source sau này
  • FinancialStatement typing -- thêm 7 optional typed fields (revenue, grossProfit, netIncome, totalAssets, totalEquity, totalDebt, operatingCashFlow)

Thay đổi breaking

  • Realtime API cũ (VnstockRealtime.connect/subscribe/parseData) thay bằng realtime.create() + RealtimeClient event emitter
  • realtime giờ là top-level export, không còn trên Vnstock class hay stock object

Nội bộ

  • Pipeline fetchWithRetry wrap axios errors thành custom error classes
  • Tất cả validation dùng InvalidParameterError thay vì throw new Error
  • Core modules (quote, trading, listing, financial, company) gọi qua adapter thay vì trực tiếp URL

1.0.1 (02-04-2026)

  • Xóa dependency xlsx (2 CVE: Prototype Pollution + ReDoS)
  • Chuyển sang VCB JSON API thay vì parse Excel
  • Sửa RSI type signature (period giờ optional)
  • Thêm request timeout 15 giây
  • Bổ sung fields thiếu trong ScreenResult
  • Bỏ duplicate QuoteHistory type
  • Sửa mapping index WebSocket SSI realtime data

1.0.0 (02-04-2026)

Breaking changes so với v0.5.x. Refactor toàn bộ kiến trúc.

Kiến trúc mới

  • Pipeline architecture -- Request Pipeline (fetch + retry) -> Transform Pipeline (parse, clean, rename, normalize, shape)
  • Tất cả output chuẩn hóa: Array of Objects, camelCase, giá chia 1000, ISO dates
  • Retry tự động 2 lần với exponential backoff cho lỗi 5xx/timeout

Tính năng mới

  • Sàng lọc cổ phiếu (stock.screening) -- lọc theo PE, ROE, vốn hóa
  • Chỉ báo kỹ thuật -- SMA, EMA, RSI (pure functions)
  • Company mở rộng -- affiliates, analysisReports, insiderDeals
  • TypeScript interfaces đầy đủ cho tất cả output

Thay đổi breaking

  • Output format thay đổi hoàn toàn (giá chia 1000, field names đổi)
  • stock.price() -> stock.quote()
  • stock.company() giờ là factory method trả về Company instance
  • VnstockTypes trỏ sang normalized types
  • Realtime parseData() trả về RealtimeQuote với field names mới

0.5.1

  • Sửa lỗi nhỏ

0.5.0

  • Thêm realtime WebSocket từ SSI
  • Đổi stock.price -> stock.quote
  • Thêm trading.topGainers, trading.topLosers

0.4.x

  • Thêm giá vàng SJC
  • Sửa lỗi Company
  • Tái cấu trúc codebase

0.3.x

  • Bỏ hỗ trợ TCBS
  • Thêm giá vàng GiaVang.net

0.2.0

  • Hỗ trợ VCI: listing, báo cáo tài chính
  • Thêm tỷ giá VCB

0.1.0

  • Phiên bản đầu tiên
  • Giá giao dịch, lịch sử giá từ VCI và TCBS
  • Giá vàng Việt Nam
PreviousCLI
NextCâu Hỏi Thường Gặp

Nội Dung

1.3.1SửaThêm1.3.0BreakingTính năng mớiRealtime hardeningThay đổi1.2.0 (03-04-2026)Tính năng mớiAPI mớiNội bộ1.1.0 (03-04-2026)Tính năng mớiThay đổi breakingNội bộ1.0.1 (02-04-2026)1.0.0 (02-04-2026)Kiến trúc mớiTính năng mớiThay đổi breaking0.5.10.5.00.4.x0.3.x0.2.00.1.0