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

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

## 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`:

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

export const { GET, POST } = nextHandler();
```

```ts
// 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](/docs/key-features/advanced/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ị](/docs/getting-started/conventions).

---

## 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](https://github.com/ttqteo/vnstock-js/blob/master/CONTRIBUTING.md) trên GitHub.
