Dữ liệu thị trường
Mục lục
Dữ liệu mẫu chạy thật ngày thứ Bảy 10/10/2026, thị trường nghỉ, nên mọi số liệu trong phiên (khớp lệnh, bảng giá, sổ lệnh) là của phiên gần nhất, thứ Sáu 09/10/2026.
Lớp Market() gom các hàm truy xuất dữ liệu giao dịch: giá lịch sử theo nến, danh sách lệnh khớp,
bảng giá, sổ lệnh, thống kê phiên. Bạn chọn loại tài sản trước, rồi gọi hàm:
from vnstock import Market
mkt = Market()
mkt.equity("FPT").ohlcv() # 100 nến ngày mới nhất của FPT
mkt.index("VNINDEX").ohlcv(length="3M") # VNINDEX ba tháng gần nhất
mkt.quote(["FPT", "VCB"]) # bảng giá nhiều mã một lầnTrang này nói về tài sản trong nước. Phần khác nằm ở trang riêng:
- Quỹ mở
Market().fund(symbol): Dữ liệu quỹ mở. - Tiền mã hoá, ngoại hối, hàng hoá và chỉ số thế giới
Market().index(symbol, scope="global"): Tài sản quốc tế. - Trạng thái phiên giao dịch (đang mở cửa hay nghỉ):
Reference().market.status(), xem Tham chiếu. - Định giá P/E, P/B toàn thị trường: Analytics.
Tóm tắt
Cột "Cấp" theo quy tắc ở Cấp quyền và giới hạn. Mọi cấp là Khách (không khoá), Cộng đồng và Tài trợ. Tài trợ là từ Bronze trở lên.
| Hàm | Làm gì | Cấp |
|---|---|---|
Market().equity(s).ohlcv() | Giá lịch sử theo nến | Mọi cấp |
Market().equity(s).trades() | Danh sách lệnh khớp trong phiên | Mọi cấp |
Market().equity(s).quote() | Bảng giá của mã | Mọi cấp |
Market().equity(s).order_book() | Ba bước giá chờ mua, chờ bán | Tài trợ |
Market().equity(s).volume_profile() | Khối lượng khớp theo từng mức giá | Tài trợ |
Market().equity(s).session_stats() | Thống kê gộp khớp lệnh, thoả thuận, khối ngoại | Tài trợ |
Market().equity(s).trade_history() | Thống kê giao dịch theo ngày, mỗi phiên một dòng | Tài trợ |
Market().equity(s).foreign_flow() | Mua bán của nhà đầu tư nước ngoài theo ngày | Tài trợ |
Market().equity(s).proprietary_flow() | Mua bán của khối tự doanh theo ngày | Tài trợ |
Market().equity(s).block_trades() | Giao dịch thoả thuận | Tài trợ |
Market().equity(s).odd_lot() | Bảng giá lô lẻ của mã | Tài trợ |
Market().index(s).ohlcv() | Điểm chỉ số theo nến | Mọi cấp |
Market().index(s).quote() | Điểm chỉ số trong phiên | Tài trợ |
Market().index(s).trade_history() | Thống kê chỉ số theo ngày: số mã tăng giảm, thoả thuận | Tài trợ |
Market().futures(s).ohlcv(), .quote(), .trades() | Giá, bảng giá, khớp lệnh hợp đồng tương lai | Mọi cấp |
Market().futures(s).order_book() | Sổ lệnh hợp đồng tương lai | Tài trợ |
Market().warrant(s).ohlcv(), .quote(), .trades() | Giá, bảng giá, khớp lệnh chứng quyền | Mọi cấp |
Market().warrant(s).order_book() | Sổ lệnh chứng quyền | Tài trợ |
Market().etf(s)... | Như cổ phiếu, nguồn mặc định riêng | Như cổ phiếu |
Market().bond(s)... | Như cổ phiếu, nguồn mặc định riêng | Như cổ phiếu |
Market().quote(symbols) | Bảng giá nhiều mã một lần | Mọi cấp |
Market().odd_lot(symbols) | Bảng giá lô lẻ nhiều mã hoặc cả sàn | Tài trợ |
Market().put_through(symbols) | Giao dịch thoả thuận trên một sàn | Tài trợ |
Ở cấp Khách và Cộng đồng, các hàm mở cho mọi cấp chỉ nhận nguồn kbs và vci. Gọi
source="vnd", "mas" hay "asean" thì nhận EntitlementError mã VNSTOCK_TIER_SOURCE. Gọi hàm
dành cho tài trợ thì nhận EntitlementError mã VNSTOCK_TIER_ROUTE. Trong cả hai trường hợp thư
viện không gửi truy vấn nào đi.
1. Tham số chung
Mã và chữ hoa
Mã viết hoa hay thường đều được: "fpt" và "FPT" như nhau. Market() nhận vài tham số
(index, random_agent, show_log) chỉ để mã cũ chạy được; chúng không đổi kết quả của các hàm
trên trang này.
Cửa sổ thời gian của ohlcv()
ohlcv() của mọi loại tài sản trên trang này có cùng chữ ký:
ohlcv(start=None, end=None, interval="1D", *, limit=None, source=None,
count_back=None, length=None, floating=2)Thư viện chọn khoảng dữ liệu theo thứ tự sau:
| Bạn truyền | Kết quả |
|---|---|
start (và end nếu muốn) | Mọi nến trong khoảng đó |
length=N, length="N", length="Nb" hoặc count_back=N | N nến mới nhất theo khung interval |
length="30d", "2W", "3M", "1Y" | Một khoảng thời gian tính lùi từ end, bất kể khung nến |
| Không truyền gì | 100 nến mới nhất; có limit=N thì N nến mới nhất |
Một con số ở length là số nến, không phải số ngày. length=100, interval="1m" là 100 nến
một phút, không phải 100 ngày. Muốn tính theo ngày thì viết có đơn vị: length="100d".
Đơn vị của length dạng khoảng thời gian: d (ngày), W (tuần), M (tháng), Y (năm). Thư viện
đổi ra ngày lịch: "30d" là 30 ngày, "2W" là 14, "3M" là 90, "1Y" là 365. Với length, "6m"
viết thường vẫn là sáu tháng (180 ngày).
start nhận YYYY-MM-DD. YYYY-MM và YYYY được hiểu là ngày đầu tháng, đầu năm ("2026-10"
là "2026-10-01"). Cách viết khác báo InputError. end mặc định là hôm nay theo giờ Việt Nam
(UTC+7), không theo đồng hồ máy bạn, nên máy chủ đặt giờ UTC vẫn lấy đúng ngày.
fpt = Market().equity("FPT")
fpt.ohlcv() # 100 nến ngày mới nhất
fpt.ohlcv(start="2026-10-01", end="2026-10-09")
fpt.ohlcv(start="2026-10") # từ 01/10/2026 tới hôm nay
fpt.ohlcv(length=5, interval="1m") # 5 nến một phút mới nhất
fpt.ohlcv(count_back=2, interval="5m") # 2 nến năm phút mới nhất
fpt.ohlcv(length="30d") # nến ngày trong 30 ngày lịch gần nhất
fpt.ohlcv(length="3d", interval="1H") # nến giờ trong 3 ngày gần nhấtChạy ngày 10/10/2026, fpt.ohlcv(length="30d") trả 22 nến, từ 10/09 tới 09/10/2026.
Khung nến interval
| Giá trị chuẩn | Ý nghĩa | Cách viết khác nhận được |
|---|---|---|
1m | 1 phút | m, minute |
5m, 15m, 30m | 5, 15, 30 phút | 5M, 15M, 30M |
1H | 1 giờ | 1h, h, H, hour, 60m |
1D | Ngày (mặc định) | 1d, d, D, day, daily |
1W | Tuần | 1w, w, W, week, weekly |
1M | Tháng | M, month, monthly |
1m (phút, chữ thường) khác 1M (tháng, chữ hoa). Cách viết ngoài bảng, ví dụ "1min", "2H",
báo InputError mã VNSTOCK_INPUT_INTERVAL. Bảng đầy đủ xem bằng:
from vnstock._core import get_interval_aliases, normalize_interval
normalize_interval("daily") # '1D'Thư viện còn nhận 4H, nhưng nguồn vci không có khung này và báo UnsupportedError mã
VNSTOCK_VCI_INTERVAL_UNAVAILABLE.
Nến tuần và nến tháng mang ngày của phiên cuối trong tuần, trong tháng. Nến của tháng đang chạy mang ngày phiên gần nhất (chạy ngày 10/10/2026, nến tháng 10 mang ngày 09/10/2026).
Nến trong phiên lấy từ nguồn nào
Chỉ số, hợp đồng tương lai, chứng quyền, ETF và trái phiếu có nguồn mặc định kbs. Khi bạn không
ghi source= và hỏi nến trong phiên (1m, 5m, 15m, 30m, 1H), thư viện lấy từ vci, vì nguồn
này giữ lịch sử nến phút dài hơn. Nến ngày, tuần, tháng vẫn lấy từ kbs. Cổ phiếu lấy ohlcv từ
vci ở mọi khung. Nguồn thực tế của một kết quả nằm ở df.attrs["source"].
Các tham số khác của ohlcv()
| Tham số | Kiểu | Mặc định | Ý nghĩa |
|---|---|---|---|
limit | int | None | Số dòng tối đa gửi tới nguồn; không có cửa sổ thì là số nến mới nhất |
source | str | None | Nguồn; None dùng nguồn mặc định của loại tài sản |
floating | int | 2 | Số chữ số thập phân của open, high, low, close; None giữ nguyên số nguồn trả |
resolution | str | Tên cũ của interval (bản 4.x); có thì được ưu tiên | |
count | int | Tên cũ của count_back (bản 4.x) |
Một truy vấn tới nguồn trả tối đa 20.000 nến. Cửa sổ dài hơn thì thư viện giữ các nến mới nhất,
ghi df.attrs["request_cap_rows"] và phát cảnh báo. Giới hạn này đến từ nguồn, không phải từ cấp.
Cột trả về của ohlcv()
Mọi loại tài sản trên trang này trả cùng sáu cột:
| Cột | Kiểu | Ý nghĩa |
|---|---|---|
time | datetime64[ns, Asia/Ho_Chi_Minh] | Thời điểm nến, giờ Việt Nam |
open, high, low, close | float64 | Giá mở, cao nhất, thấp nhất, đóng |
volume | int64 | Khối lượng |
Đơn vị giá: cổ phiếu, ETF và chứng quyền tính bằng nghìn đồng (57.9 là 57.900 đồng); chỉ số và
hợp đồng tương lai tính bằng điểm. Giá cổ phiếu là giá đã điều chỉnh theo sự kiện quyền, nên nến cũ
có thể có hai chữ số lẻ (67.08).
Nến ngày mang giờ 07:00+07:00. Muốn lấy riêng ngày, dùng df["time"].dt.date.
df.attrs mang source, symbol, interval, start, end, length của lời gọi.
Giới hạn theo cấp
| Khách | Cộng đồng | Tài trợ | |
|---|---|---|---|
Lịch sử nến 1m | 180 ngày | 180 ngày | Theo nguồn |
Lịch sử nến 5m tới 1H | 365 ngày | 365 ngày | Theo nguồn |
| Lịch sử nến ngày, tuần, tháng | 2.920 ngày (khoảng 8 năm) | 2.920 ngày | Theo nguồn |
Số lệnh khớp mỗi lần gọi trades() | 5.000 | 5.000 | Theo nguồn |
| Trần dòng cho dữ liệu theo thời gian | 5.000 nến ngày | 10.000 nến ngày | Không |
Khi cấp cắt bớt, thư viện giữ phần mới nhất, ghi lý do vào df.attrs (tier_cap_history_days hoặc
tier_cap_rows) và phát cảnh báo. Trần dòng tính theo nến ngày; với khung nhỏ hơn, thư viện quy đổi
theo số nến mỗi phiên, nên với nến phút thứ chặn là giới hạn 180 ngày. Các con số này do chính sách
từ vnstocks.com quy định và có thể đổi; vnstock policy cho biết mức đang áp cho máy của bạn.
Nguồn source=
Mỗi hàm có nguồn mặc định riêng, ghi ở từng mục dưới đây. Truyền source= thì thư viện dùng đúng
nguồn đó và không tự chuyển sang nguồn khác khi lỗi. Bảng đầy đủ ở
Nguồn dữ liệu.
2. Cổ phiếu: Market().equity(symbol)
from vnstock import Market
fpt = Market().equity("FPT")| Hàm | Tên cũ | Cấp | Mặc định | source= nhận |
|---|---|---|---|---|
ohlcv | history | Mọi cấp | vci | vci, kbs; tài trợ thêm vnd, mas, asean |
trades | intraday | Mọi cấp | vci | vci, kbs; tài trợ thêm vnd, mas, asean |
quote | price_board | Mọi cấp | kbs | kbs, vci; tài trợ thêm asean |
order_book | price_depth | Tài trợ | kbs | kbs, vci, mas, asean |
volume_profile | matched_by_price | Tài trợ | kbs | kbs, vci |
session_stats | trading_stats | Tài trợ | vci | vci, kbs, asean |
trade_history | Tài trợ | vci | vci | |
foreign_flow | Tài trợ | vci | vci | |
proprietary_flow | Tài trợ | vci | vci | |
block_trades | put_through | Tài trợ | kbs | kbs, vci, asean |
odd_lot | Tài trợ | kbs | kbs, vci, asean |
2.1. ohlcv(): giá lịch sử
Chữ ký và tham số ở mục 1. Tên cũ history(start, end, interval, **kwargs) nhận
đúng các tham số đó.
fpt.ohlcv(start="2026-10-01", end="2026-10-09")Dữ liệu mẫu (chạy 10/10/2026, nguồn vci, nghìn đồng):
| time | open | high | low | close | volume |
|---|---|---|---|---|---|
| 2026-10-01 07:00:00+07:00 | 63.0 | 63.1 | 62.6 | 62.7 | 3434926 |
| 2026-10-02 07:00:00+07:00 | 62.7 | 63.2 | 62.1 | 62.1 | 3199600 |
| 2026-10-05 07:00:00+07:00 | 62.2 | 62.8 | 61.9 | 61.9 | 2513400 |
Nến một phút, fpt.ohlcv(length=5, interval="1m"), ba nến cuối của phiên 09/10/2026:
| time | open | high | low | close | volume |
|---|---|---|---|---|---|
| 2026-10-09 14:28:00+07:00 | 58.0 | 58.0 | 57.9 | 57.9 | 28600 |
| 2026-10-09 14:29:00+07:00 | 57.9 | 58.0 | 57.8 | 57.9 | 67000 |
| 2026-10-09 14:45:00+07:00 | 57.9 | 57.9 | 57.9 | 57.9 | 284000 |
Nến 14:45 là phiên khớp lệnh đóng cửa (ATC).
Hai nguồn vci và kbs điều chỉnh giá theo sự kiện quyền theo cách khác nhau, nên giá cũ có thể lệch
vài đồng. Muốn số giống vnstock_data 3.x, truyền source="kbs".
2.2. trades(): danh sách lệnh khớp
trades(limit=None, *, last_id=None, side=None, source=None)| Tham số | Kiểu | Mặc định | Ý nghĩa |
|---|---|---|---|
limit | int | None (100 lệnh) | Số lệnh khớp mới nhất cần lấy |
last_id | str | None | Mã lệnh cuối đã có, để lấy trang tiếp theo |
side | str | None | Lọc theo chiều mua, bán, khi nguồn hỗ trợ |
source | str | None | Nguồn; None là vci |
Không truyền limit thì hàm trả 100 lệnh mới nhất. Muốn nhiều hơn, truyền limit=:
- Nguồn
vci(mặc định) nhận từ 1 tới 1.000 lệnh mỗi lần. Hỏi nhiều hơn thì nhậnInputErrormãVNSTOCK_VCI_TRADES_PAGE_LIMIT; lấy tiếp bằnglast_id. Nguồn này trả 100 lệnh mỗi truy vấn, nênlimitlớn hơn 100 là nhiều truy vấn lần lượt. Thư viện nghỉ giữa hai truy vấn liên tiếp: 1 giây ở cấp Khách và Cộng đồng, 0,1 giây ở cấp tài trợ. Ví dụlimit=1000ở cấp Khách mất khoảng 10 giây. Một lời gọi hàm gửi tối đa 50 truy vấn. - Nguồn
kbstrả được 5.000 lệnh trong một lần gọi (limit=5000, source="kbs"). - Khách và Cộng đồng bị cắt ở 5.000 lệnh mới nhất mỗi lần gọi, ghi ở
df.attrs["tier_cap_rows"].
Tên cũ intraday(page_size=100, last_time=None, **kwargs): page_size là limit, last_time là
last_id.
| Cột | Kiểu | Ý nghĩa |
|---|---|---|
time | datetime64[ns, Asia/Ho_Chi_Minh] | Thời điểm khớp |
price | float64 | Giá khớp, nghìn đồng |
volume | int64 | Khối lượng khớp |
match_type | string | Chiều chủ động: Buy, Sell, ATO, ATC, Unknown |
id | string | Mã lệnh khớp của nguồn |
match_type viết hoa chữ đầu với vci (Buy, ATC) và viết thường với kbs (buy, atc). Khi so
sánh, dùng df["match_type"].str.lower().
Dữ liệu mẫu (fpt.trades(limit=5), chạy 10/10/2026, nguồn vci, phiên 09/10/2026):
| time | price | volume | match_type | id |
|---|---|---|---|---|
| 2026-10-09 14:29:59+07:00 | 57.9 | 100 | Buy | 525060498 |
| 2026-10-09 14:29:59+07:00 | 57.9 | 1000 | Buy | 525060454 |
| 2026-10-09 14:45:00+07:00 | 57.9 | 284000 | ATC | 525061946 |
2.3. quote(): bảng giá của mã
quote(*, source=None)Trả một dòng, giá tính bằng đồng. Tên cũ: price_board().
| Cột | Kiểu | Ý nghĩa |
|---|---|---|
symbol, exchange | string | Mã, sàn (HOSE, HNX, UPCOM) |
reference_price, ceiling_price, floor_price | float64 | Giá tham chiếu, trần, sàn |
open_price, high_price, low_price, close_price | float64 | Giá mở, cao, thấp, khớp gần nhất |
bid_price_1..3, bid_vol_1..3 | float64, int64 | Ba bước giá chờ mua và khối lượng |
ask_price_1..3, ask_vol_1..3 | float64, int64 | Ba bước giá chờ bán và khối lượng |
foreign_buy_volume, foreign_sell_volume | int64 | Khối lượng khối ngoại mua, bán |
Dữ liệu mẫu (chạy 10/10/2026, nguồn kbs, cuối phiên 09/10/2026, chọn 8 trong 23 cột):
| symbol | exchange | reference_price | ceiling_price | floor_price | close_price | bid_price_1 | ask_price_1 |
|---|---|---|---|---|---|---|---|
| FPT | HOSE | 59700.0 | 63800.0 | 55600.0 | 57900.0 | 57800.0 | 57900.0 |
Muốn bảng giá nhiều mã một lần, dùng Market().quote(symbols) (mục 8).
2.4. order_book(): sổ lệnh
order_book(limit=None, *, source=None)Cấp tài trợ. Trả một dòng với 12 cột bid_price_1..3, bid_vol_1..3, ask_price_1..3,
ask_vol_1..3, giá tính bằng đồng. Tên cũ: price_depth().
Dữ liệu mẫu (chạy 10/10/2026, nguồn kbs, cuối phiên 09/10/2026):
| bid_price_1 | bid_vol_1 | bid_price_2 | bid_vol_2 | ask_price_1 | ask_vol_1 | ask_price_2 | ask_vol_2 |
|---|---|---|---|---|---|---|---|
| 57800.0 | 217700 | 57700.0 | 420600 | 57900.0 | 6900 | 58000.0 | 13200 |
2.5. volume_profile(): khối lượng theo mức giá
volume_profile(*, source=None)Cấp tài trợ. Khối lượng khớp của phiên hiện tại (hoặc phiên gần nhất) ở từng mức giá, giá thấp nhất
trước. Tên cũ: matched_by_price().
| Cột | Kiểu | Ý nghĩa |
|---|---|---|
price | float64 | Mức giá, đồng |
buy_volume, sell_volume | int64 | Khối lượng mua chủ động, bán chủ động |
unknown_volume | int64 | Khối lượng chưa xác định chiều |
total_volume | int64 | Tổng khối lượng ở mức giá |
Dữ liệu mẫu (chạy 10/10/2026, nguồn kbs, phiên 09/10/2026, FPT có 26 mức giá):
| price | buy_volume | sell_volume | unknown_volume | total_volume |
|---|---|---|---|---|
| 57500.0 | 0 | 30300 | 0 | 30300 |
| 57600.0 | 82200 | 166100 | 0 | 248300 |
| 57700.0 | 67500 | 202000 | 0 | 269500 |
2.6. session_stats(): thống kê gộp
session_stats(limit=None, *, source=None, start=None, end=None)Cấp tài trợ. Trả một dòng cho mã, gộp các tổng và trung bình trong khoảng start–end. Không
truyền khoảng thì nguồn tự chọn khoảng gộp. Tên cũ: trading_stats().
Với nguồn vci, bảng có 65 cột, chia thành các nhóm:
| Nhóm cột | Ý nghĩa |
|---|---|
total_match_*, total_deal_*, total_volume, total_value | Tổng khối lượng, giá trị khớp lệnh, thoả thuận, cả hai |
average_* | Trung bình mỗi phiên của các tổng trên |
fr_buy_*, fr_sell_*, fr_net_* | Khối ngoại mua, bán, ròng; hậu tố _matched, _deal, _total, thêm _avg cho trung bình |
total_buy_trade*, total_sell_trade*, total_net_trade_volume* | Số lệnh và khối lượng mua, bán chủ động |
total_buy_unmatched_volume*, total_sell_unmatched_volume* | Khối lượng đặt mua, bán chưa khớp |
average_buy_volume_per_trade, average_sell_volume_per_trade | Khối lượng bình quân mỗi lệnh |
Dữ liệu mẫu (fpt.session_stats(start="2026-10-01", end="2026-10-09"), chạy 10/10/2026, nguồn vci,
giá trị tính bằng đồng):
| symbol | total_match_volume | total_match_value | total_deal_volume | total_volume | fr_net_volume_total | fr_net_value_total |
|---|---|---|---|---|---|---|
| FPT | 40461123 | 2.440101e+12 | 7833175 | 48294298 | -4184796 | -2.475168e+11 |
2.7. trade_history(): thống kê giao dịch theo ngày
trade_history(start=None, end=None, limit=None, resolution="1D", *, source=None)Cấp tài trợ. Mỗi phiên một dòng, phiên mới nhất trước. Không truyền khoảng thì trả 100 phiên mới
nhất. Đây không phải danh sách lệnh khớp; lệnh khớp ở trades().
| Tham số | Kiểu | Mặc định | Ý nghĩa |
|---|---|---|---|
start, end | str | None | Khoảng ngày, YYYY-MM-DD |
limit | int | None | Số phiên tối đa |
resolution | str | "1D" | Khung thời gian |
source | str | None | Chỉ nhận vci |
Bảng có 39 cột. Nhóm chính:
| Cột | Ý nghĩa |
|---|---|
trading_date | Ngày giao dịch |
reference_price, ceiling_price, floor_price, open, close, high, low, average_price | Giá trong phiên, đồng |
price_change, percent_price_change | Thay đổi so với tham chiếu (percent_price_change là tỷ lệ, -0.030151 là -3,02%) |
*_adjusted | Các giá trên đã điều chỉnh theo sự kiện quyền |
matched_volume, matched_value, deal_volume, deal_value, total_volume, total_value | Khớp lệnh, thoả thuận, tổng |
total_buy_trade*, total_sell_trade*, total_net_trade_volume | Lệnh mua, bán chủ động |
market_cap, total_shares | Vốn hoá, số cổ phiếu lưu hành |
Dữ liệu mẫu (fpt.trade_history(limit=3), chạy 10/10/2026, nguồn vci):
| trading_date | reference_price | close | percent_price_change | matched_volume | deal_volume | total_value |
|---|---|---|---|---|---|---|
| 2026-10-09 | 59700.0 | 57900.0 | -0.030151 | 10912602 | 1314285 | 7.188563e+11 |
| 2026-10-08 | 59700.0 | 59700.0 | 0.000000 | 6618270 | 849100 | 4.520222e+11 |
| 2026-10-07 | 60400.0 | 59700.0 | -0.011589 | 5463656 | 3413925 | 5.456296e+11 |
2.8. foreign_flow() và proprietary_flow(): khối ngoại, tự doanh
foreign_flow(limit=None, source=None, *, start=None, end=None)
proprietary_flow(limit=None, source=None, *, start=None, end=None)Cấp tài trợ, nguồn vci. Mỗi phiên một dòng, phiên mới nhất trước. limit là số phiên.
| Cột | Kiểu | Ý nghĩa |
|---|---|---|
time | datetime64[ns, Asia/Ho_Chi_Minh] | Ngày giao dịch |
buy_vol, buy_val | float64 | Khối lượng, giá trị mua (đồng) |
sell_vol, sell_val | float64 | Khối lượng, giá trị bán |
net_vol, net_val | float64 | Mua ròng (âm là bán ròng) |
Dữ liệu mẫu fpt.foreign_flow(limit=3) (chạy 10/10/2026):
| time | buy_vol | buy_val | sell_vol | sell_val | net_vol | net_val |
|---|---|---|---|---|---|---|
| 2026-10-09 | 885494.0 | 5.174198e+10 | 2970012.0 | 1.736786e+11 | -2084518.0 | -1.219366e+11 |
| 2026-10-08 | 820755.0 | 4.914756e+10 | 1812559.0 | 1.091907e+11 | -991804.0 | -6.004311e+10 |
| 2026-10-07 | 1198695.0 | 7.213711e+10 | 2305625.0 | 1.387079e+11 | -1106930.0 | -6.657081e+10 |
Dữ liệu mẫu fpt.proprietary_flow(limit=3) (chạy 10/10/2026):
| time | buy_vol | sell_vol | net_vol | net_val |
|---|---|---|---|---|
| 2026-10-09 | 934500.0 | 3419800.0 | -2485300.0 | -1.440905e+11 |
| 2026-10-08 | 1281300.0 | 1106400.0 | 174900.0 | 1.143451e+10 |
| 2026-10-07 | 2568000.0 | 676300.0 | 1891700.0 | 1.231519e+11 |
2.9. block_trades(): giao dịch thoả thuận
block_trades(limit=1000, source=None)Cấp tài trợ. Các giao dịch thoả thuận của mã trong phiên gần nhất, lấy từ danh sách thoả thuận của
sàn niêm yết. Tên cũ: put_through(limit=None, source=None), với limit=None nghĩa là 1.000.
Với nguồn kbs (mặc định), cột trả về: symbol, time, exchange, match_price (đồng),
match_volume, trading_date, reference_price, floor_price. Với vci: symbol, match_price,
match_volume, change, change_percent, match_value, accumulated_volume, accumulated_value,
time.
Mã không có giao dịch thoả thuận nào trong danh sách của nguồn thì hàm trả bảng rỗng có đủ cột.
Chạy ngày 10/10/2026, fpt.block_trades() trả bảng rỗng ở cả kbs và vci. Dữ liệu mẫu theo sàn
ở mục 8.
2.10. odd_lot(): bảng giá lô lẻ
odd_lot(limit=None, source=None)Cấp tài trợ. Một dòng bảng giá lô lẻ của mã. Cột như quote() (giá tính bằng đồng), thêm
match_price, match_vol (lệnh khớp gần nhất) và total_volume (tổng khối lượng lô lẻ trong phiên).
Dữ liệu mẫu (chạy 10/10/2026, nguồn kbs, phiên 09/10/2026):
| symbol | exchange | reference_price | close_price | match_vol | total_volume | bid_price_1 | ask_price_1 |
|---|---|---|---|---|---|---|---|
| FPT | HOSE | 59700.0 | 58000.0 | 9 | 60902 | 58000.0 | 58100.0 |
2.11. Nhiều mã một lúc
Market().equity() nhận cả danh sách mã, như bản 4.x. Mỗi hàm được gọi lần lượt cho từng mã rồi xếp
các bảng chồng lên nhau theo thứ tự mã truyền vào. Riêng quote() và price_board() hỏi cả danh
sách trong một lần.
basket = Market().equity(["FPT", "VCB"])
basket.ohlcv(length=2) # 4 dòng: 2 nến FPT rồi 2 nến VCB
basket.quote() # 2 dòng, một truy vấnBảng xếp chồng không có cột mã: ohlcv() của hai mã trả sáu cột như một mã. Danh sách mã nằm ở
df.attrs["symbol"]. Cần biết dòng nào của mã nào thì gọi từng mã và tự thêm cột:
import pandas as pd
frames = [Market().equity(s).ohlcv(length=2).assign(symbol=s) for s in ["FPT", "VCB"]]
df = pd.concat(frames, ignore_index=True)3. Chỉ số: Market().index(symbol)
vnindex = Market().index("VNINDEX")Mã chỉ số trong nước: VNINDEX, VN30, HNXINDEX, UPCOMINDEX và các chỉ số khác. Danh sách đầy đủ
lấy bằng Reference().index.list(), xem Tham chiếu.
Chỉ số thế giới (USA30, JPN225…) mở bằng Market().index("USA30", scope="global"), xem
Tài sản quốc tế.
| Hàm | Tên cũ | Cấp | Mặc định | source= nhận |
|---|---|---|---|---|
ohlcv | history | Mọi cấp | kbs; nến 1m tới 1H: vci | kbs, vci |
quote | price_board | Tài trợ | kbs | kbs |
trade_history | Tài trợ | vci | vci | |
trades | intraday | Tài trợ | kbs | kbs |
3.1. ohlcv()
Như mục 1. Giá tính bằng điểm.
Dữ liệu mẫu vnindex.ohlcv(length=3) (chạy 10/10/2026, nguồn kbs):
| time | open | high | low | close | volume |
|---|---|---|---|---|---|
| 2026-10-07 07:00:00+07:00 | 1760.54 | 1760.54 | 1743.24 | 1753.39 | 485847590 |
| 2026-10-08 07:00:00+07:00 | 1749.25 | 1764.45 | 1738.97 | 1738.97 | 532713885 |
| 2026-10-09 07:00:00+07:00 | 1737.18 | 1744.89 | 1724.17 | 1735.09 | 911324549 |
vnindex.ohlcv(length=3, interval="15m") lấy từ vci, ba nến cuối phiên 09/10/2026:
| time | open | high | low | close | volume |
|---|---|---|---|---|---|
| 2026-10-09 14:00:00+07:00 | 1740.46 | 1741.64 | 1736.70 | 1738.47 | 48711525 |
| 2026-10-09 14:15:00+07:00 | 1738.44 | 1740.09 | 1734.27 | 1738.74 | 47536292 |
| 2026-10-09 14:45:00+07:00 | 1737.65 | 1737.65 | 1735.09 | 1735.09 | 132871039 |
3.2. quote()
quote(*, source=None)Cấp tài trợ. Một dòng: symbol, reference_price, open_price, high_price, low_price,
close_price (điểm), total_volume.
| symbol | reference_price | open_price | high_price | low_price | close_price | total_volume |
|---|---|---|---|---|---|---|
| VNINDEX | 1738.97 | 1737.18 | 1744.89 | 1724.17 | 1735.09 | 911324549.0 |
(chạy 10/10/2026, nguồn kbs, phiên 09/10/2026)
3.3. trade_history(): thống kê chỉ số theo ngày
trade_history(start=None, end=None, limit=None, resolution="1D", *, source=None)Cấp tài trợ, nguồn vci. Mỗi phiên một dòng, phiên mới nhất trước; không truyền khoảng thì trả 100
phiên. Tham số như trade_history() của cổ phiếu (mục 2.7).
Bảng có 36 cột. Ngoài điểm chỉ số (open, close, high, low, price_change,
percent_price_change) và giá trị khớp lệnh, thoả thuận, bảng có độ rộng thị trường:
| Cột | Ý nghĩa |
|---|---|
total_stock_up_price, total_stock_down_price, total_stock_no_change_price | Số mã tăng, giảm, đứng giá |
total_stock_ceiling, total_stock_floor | Số mã tăng trần, giảm sàn |
total_up_volume, total_down_volume, total_no_change_volume | Khối lượng của nhóm mã tăng, giảm, đứng giá |
market_cap, total_shares | Vốn hoá, số cổ phiếu lưu hành của rổ |
Dữ liệu mẫu vnindex.trade_history(limit=3) (chạy 10/10/2026):
| trading_date | close | price_change | total_value | total_stock_up_price | total_stock_down_price | total_stock_ceiling | total_stock_floor |
|---|---|---|---|---|---|---|---|
| 2026-10-09 | 1735.09 | -3.88 | 2.760507e+13 | 130.0 | 175.0 | 9.0 | 5.0 |
| 2026-10-08 | 1738.97 | -14.42 | 1.598088e+13 | 122.0 | 190.0 | 12.0 | 7.0 |
| 2026-10-07 | 1753.39 | -5.69 | 1.526481e+13 | 150.0 | 151.0 | 6.0 | 4.0 |
3.4. trades()
Hàm nhận như trades() của cổ phiếu (mục 2.2). Cột trả về theo lược đồ: time, price, volume,
match_type, id.
order_book(), session_stats() và stock_influence() có tên trên lớp chỉ số nhưng chưa chạy, xem
mục 9.
4. Hợp đồng tương lai: Market().futures(symbol)
vn30f = Market().futures("VN30F1M")Market().future(symbol) là tên khác, cho cùng kết quả. Mã hợp đồng dùng được dạng VN30F1M,
VN30F2M (tháng gần, tháng kế tiếp). Danh sách lấy bằng Reference().futures.list().
| Hàm | Tên cũ | Cấp | Mặc định | source= nhận |
|---|---|---|---|---|
ohlcv | history | Mọi cấp | kbs; nến 1m tới 1H: vci | kbs, vci |
quote | price_board | Mọi cấp | kbs | kbs |
trades | intraday | Mọi cấp | kbs | kbs |
order_book | price_depth | Tài trợ | kbs | kbs |
4.1. ohlcv()
Như mục 1. Giá tính bằng điểm.
Dữ liệu mẫu vn30f.ohlcv(length=2) (chạy 10/10/2026, nguồn kbs):
| time | open | high | low | close | volume |
|---|---|---|---|---|---|
| 2026-10-08 07:00:00+07:00 | 1891.0 | 1910.8 | 1880.2 | 1880.2 | 243091 |
| 2026-10-09 07:00:00+07:00 | 1881.0 | 1888.8 | 1868.1 | 1877.2 | 273544 |
vn30f.ohlcv(length=3, interval="1m") lấy từ vci:
| time | open | high | low | close | volume |
|---|---|---|---|---|---|
| 2026-10-09 14:28:00+07:00 | 1878.2 | 1878.5 | 1876.1 | 1876.1 | 1409 |
| 2026-10-09 14:29:00+07:00 | 1876.2 | 1877.0 | 1876.0 | 1876.0 | 1290 |
| 2026-10-09 14:45:00+07:00 | 1877.2 | 1877.2 | 1877.2 | 1877.2 | 5583 |
4.2. quote()
quote(*, source=None)Một dòng, 26 cột: như quote() của cổ phiếu (giá tính bằng điểm), thêm total_volume, basis (độ
lệch so với chỉ số cơ sở) và open_interest (khối lượng hợp đồng mở).
Cột symbol trả mã hợp đồng của sàn, không phải mã gọi tắt: hỏi VN30F1M thì nhận 41I1GA000.
Dữ liệu mẫu (chạy 10/10/2026, nguồn kbs, phiên 09/10/2026):
| symbol | exchange | reference_price | ceiling_price | floor_price | close_price | basis | open_interest |
|---|---|---|---|---|---|---|---|
| 41I1GA000 | HNX | 1880.2 | 2011.8 | 1748.6 | 1877.2 | 3.77 | 34255 |
4.3. trades()
Hàm nhận và trả như trades() của cổ phiếu (mục 2.2), với giới hạn 5.000 lệnh mỗi lần gọi ở cấp Khách và Cộng đồng. Nguồn mặc định là kbs.
4.4. order_book()
order_book(limit=None, *, source=None)Cấp tài trợ. Cột như order_book() của cổ phiếu, giá tính bằng điểm.
| bid_price_1 | bid_vol_1 | bid_price_2 | bid_vol_2 | ask_price_1 | ask_vol_1 | ask_price_2 | ask_vol_2 |
|---|---|---|---|---|---|---|---|
| 1877.0 | 24 | 1876.9 | 2 | 1877.2 | 81 | 1877.3 | 1 |
(chạy 10/10/2026, nguồn kbs, cuối phiên 09/10/2026)
5. Chứng quyền: Market().warrant(symbol)
cw = Market().warrant("CHPG2625")Danh sách chứng quyền đang lưu hành lấy bằng Reference().warrant.list() (chạy 10/10/2026: 339 mã).
| Hàm | Tên cũ | Cấp | Mặc định | source= nhận |
|---|---|---|---|---|
ohlcv | history | Mọi cấp | kbs; nến 1m tới 1H: vci | kbs, vci |
quote | price_board | Mọi cấp | kbs | kbs |
trades | intraday | Mọi cấp | kbs | kbs |
order_book | price_depth | Tài trợ | kbs | kbs |
5.1. ohlcv()
Như mục 1. Giá tính bằng nghìn đồng (0.16 là 160 đồng).
Dữ liệu mẫu cw.ohlcv(length=3) (chạy 10/10/2026, nguồn kbs):
| time | open | high | low | close | volume |
|---|---|---|---|---|---|
| 2026-10-07 07:00:00+07:00 | 0.16 | 0.18 | 0.15 | 0.16 | 671200 |
| 2026-10-08 07:00:00+07:00 | 0.15 | 0.17 | 0.15 | 0.15 | 976800 |
| 2026-10-09 07:00:00+07:00 | 0.16 | 0.16 | 0.13 | 0.16 | 2496700 |
5.2. quote()
Một dòng, 23 cột như quote() của cổ phiếu, giá tính bằng đồng.
| symbol | exchange | reference_price | ceiling_price | floor_price | close_price | bid_price_1 | ask_price_1 |
|---|---|---|---|---|---|---|---|
| CHPG2625 | HOSE | 150.0 | 850.0 | 10.0 | 160.0 | 150.0 | 160.0 |
(chạy 10/10/2026, nguồn kbs, phiên 09/10/2026)
5.3. trades() và order_book()
trades() nhận và trả như cổ phiếu (mục 2.2). order_book() (cấp tài trợ) trả 12 cột
như cổ phiếu; chạy 10/10/2026, cw.order_book() cho bid_price_1 150.0, bid_vol_1 500000,
ask_price_1 160.0, ask_vol_1 188700.
6. ETF: Market().etf(symbol)
etf = Market().etf("E1VFVN30")Chứng chỉ quỹ ETF khớp lệnh trên cùng bảng với cổ phiếu, nên Market().etf() có đủ các hàm của
Market().equity() với cùng tham số và cột trả về. Cấp quyền cũng như cổ phiếu: ohlcv, trades,
quote mở mọi cấp, các hàm còn lại dành cho tài trợ. Danh sách ETF lấy bằng Reference().etf.list().
Khác cổ phiếu ở nguồn mặc định:
| Hàm | Mặc định |
|---|---|
ohlcv | kbs; nến 1m tới 1H: vci |
trades, quote, order_book, block_trades, odd_lot, volume_profile | kbs |
session_stats, trade_history, foreign_flow, proprietary_flow | vci |
Dữ liệu mẫu etf.ohlcv(length=3) (chạy 10/10/2026, nguồn kbs, nghìn đồng):
| time | open | high | low | close | volume |
|---|---|---|---|---|---|
| 2026-10-07 07:00:00+07:00 | 34.22 | 34.22 | 33.83 | 34.19 | 251200 |
| 2026-10-08 07:00:00+07:00 | 34.10 | 34.17 | 33.75 | 34.00 | 303300 |
| 2026-10-09 07:00:00+07:00 | 33.90 | 34.00 | 33.45 | 33.84 | 454100 |
etf.trades(limit=3) (nguồn kbs, phiên 09/10/2026):
| time | price | volume | match_type | id |
|---|---|---|---|---|
| 2026-10-09 14:28:47+07:00 | 33.90 | 200 | buy | 20261009_448900 |
| 2026-10-09 14:29:52+07:00 | 33.82 | 100 | sell | 20261009_449800 |
| 2026-10-09 14:45:21+07:00 | 33.84 | 4300 | atc | 20261009_454100 |
etf.foreign_flow(limit=2) (nguồn vci):
| time | buy_vol | sell_vol | net_vol | net_val |
|---|---|---|---|---|
| 2026-10-09 | 103529.0 | 241600.0 | -138071.0 | -4.658034e+09 |
| 2026-10-08 | 141300.0 | 186100.0 | -44800.0 | -1.538052e+09 |
7. Trái phiếu niêm yết: Market().bond(symbol)
bond = Market().bond("BID122005")Trái phiếu niêm yết khớp trên cùng bảng với cổ phiếu, nên Market().bond() có các hàm và cột trả về
như Market().equity(). quote() trả đúng 23 cột chuẩn như cổ phiếu. Cấp quyền như cổ phiếu.
Danh sách mã lấy bằng Reference().bond.list().
Nguồn mặc định của ohlcv, trades, quote, order_book là kbs; các hàm còn lại theo cổ phiếu.
Trái phiếu niêm yết ít giao dịch. Chạy ngày 10/10/2026, bond.quote() trả một dòng với giá tham
chiếu 100000.0, giá khớp 0.0 và các bước giá trống; bond.ohlcv(length=3) và bond.trades() trả
bảng rỗng có đủ cột. Mã không có trên nguồn thì nhận InputError mã VNSTOCK_INPUT_SYMBOL_UNKNOWN.
8. Bảng giá nhiều mã và hàm toàn thị trường
Ba hàm gọi thẳng trên Market(), nhận một mã hoặc một danh sách mã.
8.1. Market().quote(symbols_list): bảng giá
Market().quote(symbols_list, **kwargs)| Tham số | Kiểu | Mặc định | Ý nghĩa |
|---|---|---|---|
symbols_list | str hoặc danh sách | Một mã ("VCB") hoặc danh sách (["FPT", "VCB"]) | |
source | str | "kbs" | Nguồn, chỉ nhận dạng từ khoá |
Mọi cấp. Hỏi cả danh sách trong một truy vấn. Cột như quote() của cổ phiếu (mục 2.3),
mỗi mã một dòng. Danh sách có thể trộn cổ phiếu, ETF, chứng quyền. Tên cũ: Market().price_board().
Một chuỗi được hiểu là một mã: Market().quote("VCB") hỏi mã VCB, không tách thành V, C, B.
Market().quote(["FPT", "VCB", "E1VFVN30"])Dữ liệu mẫu (chạy 10/10/2026, nguồn kbs, cuối phiên 09/10/2026, chọn 8 trong 23 cột):
| symbol | exchange | reference_price | close_price | bid_price_1 | ask_price_1 | foreign_buy_volume | foreign_sell_volume |
|---|---|---|---|---|---|---|---|
| FPT | HOSE | 59700.0 | 57900.0 | 57800.0 | 57900.0 | 885494 | 2970012 |
| VCB | HOSE | 56600.0 | 56700.0 | 56700.0 | 56800.0 | 227900 | 597000 |
| E1VFVN30 | HOSE | 34000.0 | 33840.0 | 33830.0 | 34000.0 | 103529 | 241600 |
8.2. Market().odd_lot(symbols_list): bảng giá lô lẻ
Market().odd_lot(symbols_list=None, **kwargs)| Tham số | Kiểu | Mặc định | Ý nghĩa |
|---|---|---|---|
symbols_list | str hoặc danh sách | None | Một mã, danh sách mã; để trống thì lấy cả sàn exchange |
exchange | str | "HOSE" | Sàn, chỉ nhận dạng từ khoá |
limit | int | None | Số dòng tối đa, chỉ nhận dạng từ khoá |
source | str | "kbs" | Nguồn, chỉ nhận dạng từ khoá |
Cấp tài trợ, nguồn mặc định kbs. Truyền mã thì trả đúng các mã đó; không truyền thì trả cả sàn
exchange. Cột như odd_lot() của cổ phiếu (mục 2.10).
Dữ liệu mẫu Market().odd_lot(["FPT", "VCB"]) (chạy 10/10/2026, phiên 09/10/2026):
| symbol | exchange | reference_price | close_price | match_vol | total_volume | bid_price_1 | ask_price_1 |
|---|---|---|---|---|---|---|---|
| FPT | HOSE | 59700.0 | 58000.0 | 9 | 60902 | 58000.0 | 58100.0 |
| VCB | HOSE | 56600.0 | 56900.0 | 1 | 9608 | 56800.0 | 56900.0 |
8.3. Market().put_through(symbols_list): giao dịch thoả thuận
Market().put_through(symbols_list=None, **kwargs)| Tham số | Kiểu | Mặc định | Ý nghĩa |
|---|---|---|---|
symbols_list | str hoặc danh sách | None | Một mã, danh sách mã; để trống thì lấy mọi dòng của sàn |
exchange | str | "HOSE" | Sàn, chỉ nhận dạng từ khoá |
limit | int | None | Số dòng tối đa, chỉ nhận dạng từ khoá |
source | str | "kbs" | Nguồn, chỉ nhận dạng từ khoá |
Cấp tài trợ, nguồn mặc định kbs. Nguồn công bố thoả thuận theo sàn (exchange, mặc định HOSE).
Truyền mã thì giữ dòng của các mã đó; không truyền thì trả mọi dòng của sàn. Cột như
block_trades() (mục 2.9) với nguồn kbs.
Dữ liệu mẫu Market().put_through(limit=3) (chạy 10/10/2026, sàn HOSE, phiên 09/10/2026):
| symbol | time | exchange | match_price | match_volume | reference_price |
|---|---|---|---|---|---|
| GEX | 2026-10-09 14:54:24+07:00 | HOSE | 22850.0 | 34200 | 21800.0 |
| VHM | 2026-10-09 14:53:33+07:00 | HOSE | 65700.0 | 468500 | 65700.0 |
| GEX | 2026-10-09 14:53:05+07:00 | HOSE | 23200.0 | 34200 | 21800.0 |
9. Chưa hỗ trợ và sắp bỏ
Chưa hỗ trợ
Các tên dưới đây vẫn có trên lớp để mã cũ không vỡ khi nạp, nhưng gọi thì nhận UnsupportedError:
| Hàm | Mã lỗi |
|---|---|
Market().equity(s).box_trades() (cũng có trên ETF, trái phiếu) | VNSTOCK_ROUTE_NOT_MIGRATED |
Market().equity(s).summary() và trên mọi loại tài sản | VNSTOCK_ROUTE_NOT_MIGRATED |
Market().equity(s).insider_deal() | VNSTOCK_ROUTE_NOT_FROZEN |
Market().index(s).stock_influence() | VNSTOCK_ROUTE_NOT_MIGRATED |
Market().index(s).session_stats(), Market().futures(s).session_stats(), Market().warrant(s).session_stats() | VNSTOCK_ROUTE_NOT_MIGRATED |
Market().index(s).order_book() | VNSTOCK_ROUTE_COMBINATION_INVALID |
Giao dịch của người nội bộ có ở Reference().company(s).insider_trading(), xem
Tham chiếu.
Sắp bỏ
Market().pe(), Market().pb(), Market().evaluation() vẫn trả kết quả, kèm một cảnh báo, và
ngừng trả lời sau 31/12/2026. Dùng Analytics().valuation("VNINDEX").pe(), .pb(), .evaluation(),
xem Analytics.
10. Bảng tên cũ
Tên cũ vẫn chạy và trỏ tới cùng hàm, cùng dữ liệu:
| Tên cũ | Hàm hiện tại | Ghi chú |
|---|---|---|
history(start, end, interval, **kwargs) | ohlcv() | Mọi loại tài sản |
intraday(page_size=100, ...) | trades(limit=page_size) | Cổ phiếu, ETF, trái phiếu nhận thêm last_time (là last_id) |
price_board() | quote() | Trên từng tài sản và trên Market() |
price_depth() | order_book() | |
trading_stats() | session_stats() | |
put_through() (trên một mã) | block_trades() | limit=None là 1.000 |
matched_by_price() | volume_profile() | |
Market().future(s) | Market().futures(s) | |
resolution= | interval= | Tham số của ohlcv() |
count= | count_back= | Tham số của ohlcv() |
Market().put_through(symbols) trên Market() là hàm toàn sàn ở mục 8.3,
không phải tên cũ.
Khác bản cũ cần biết khi chuyển mã:
ohlcv()không truyền gì trả 100 nến mới nhất, không phải một năm.length=100là 100 nến, không phải 100 ngày nhưvnstock_data3.x. Muốn theo ngày, viếtlength="100d".source=có tác dụng thật ở mọi hàm có tham số này.
Chi tiết ở Chuyển từ vnstock 4.x và Chuyển từ vnstock_data 3.x. Lỗi và mã lỗi ở Xử lý lỗi.