Vnstock Logo

Dữ liệu thị trường

Cộng đồng

Mục lục

Dữ liệu mẫu

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:

Python
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ần

Trang 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àmLàm gìCấp
Market().equity(s).ohlcv()Giá lịch sử theo nếnMọi cấp
Market().equity(s).trades()Danh sách lệnh khớp trong phiênMọ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ánTà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ạiTài trợ
Market().equity(s).trade_history()Thống kê giao dịch theo ngày, mỗi phiên một dòngTài trợ
Market().equity(s).foreign_flow()Mua bán của nhà đầu tư nước ngoài theo ngàyTài trợ
Market().equity(s).proprietary_flow()Mua bán của khối tự doanh theo ngàyTài trợ
Market().equity(s).block_trades()Giao dịch thoả thuậnTà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ếnMọi cấp
Market().index(s).quote()Điểm chỉ số trong phiênTài trợ
Market().index(s).trade_history()Thống kê chỉ số theo ngày: số mã tăng giảm, thoả thuậnTài trợ
Market().futures(s).ohlcv(), .quote(), .trades()Giá, bảng giá, khớp lệnh hợp đồng tương laiMọi cấp
Market().futures(s).order_book()Sổ lệnh hợp đồng tương laiTài trợ
Market().warrant(s).ohlcv(), .quote(), .trades()Giá, bảng giá, khớp lệnh chứng quyềnMọi cấp
Market().warrant(s).order_book()Sổ lệnh chứng quyềnTài trợ
Market().etf(s)...Như cổ phiếu, nguồn mặc định riêngNhư cổ phiếu
Market().bond(s)...Như cổ phiếu, nguồn mặc định riêngNhư cổ phiếu
Market().quote(symbols)Bảng giá nhiều mã một lầnMọi cấp
Market().odd_lot(symbols)Bảng giá lô lẻ nhiều mã hoặc cả sànTài trợ
Market().put_through(symbols)Giao dịch thoả thuận trên một sànTà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ý:

Python
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ềnKế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=NN 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.

Python
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ất

Chạ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ĩaCách viết khác nhận được
1m1 phútm, minute
5m, 15m, 30m5, 15, 30 phút5M, 15M, 30M
1H1 giờ1h, h, H, hour, 60m
1DNgày (mặc định)1d, d, D, day, daily
1WTuần1w, w, W, week, weekly
1MThángM, 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:

Python
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ểuMặc địnhÝ nghĩa
limitintNoneSố 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
sourcestrNoneNguồn; None dùng nguồn mặc định của loại tài sản
floatingint2Số chữ số thập phân của open, high, low, close; None giữ nguyên số nguồn trả
resolutionstrTên cũ của interval (bản 4.x); có thì được ưu tiên
countintTê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ộtKiểuÝ nghĩa
timedatetime64[ns, Asia/Ho_Chi_Minh]Thời điểm nến, giờ Việt Nam
open, high, low, closefloat64Giá mở, cao nhất, thấp nhất, đóng
volumeint64Khố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áchCộng đồngTài trợ
Lịch sử nến 1m180 ngày180 ngàyTheo nguồn
Lịch sử nến 5m tới 1H365 ngày365 ngàyTheo nguồn
Lịch sử nến ngày, tuần, tháng2.920 ngày (khoảng 8 năm)2.920 ngàyTheo nguồn
Số lệnh khớp mỗi lần gọi trades()5.0005.000Theo nguồn
Trần dòng cho dữ liệu theo thời gian5.000 nến ngày10.000 nến ngàyKhô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)

Python
from vnstock import Market

fpt = Market().equity("FPT")
HàmTên cũCấpMặc địnhsource= nhận
ohlcvhistoryMọi cấpvcivci, kbs; tài trợ thêm vnd, mas, asean
tradesintradayMọi cấpvcivci, kbs; tài trợ thêm vnd, mas, asean
quoteprice_boardMọi cấpkbskbs, vci; tài trợ thêm asean
order_bookprice_depthTài trợkbskbs, vci, mas, asean
volume_profilematched_by_priceTài trợkbskbs, vci
session_statstrading_statsTài trợvcivci, kbs, asean
trade_historyTài trợvcivci
foreign_flowTài trợvcivci
proprietary_flowTài trợvcivci
block_tradesput_throughTài trợkbskbs, vci, asean
odd_lotTài trợkbskbs, 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ố đó.

Python
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):

timeopenhighlowclosevolume
2026-10-01 07:00:00+07:0063.063.162.662.73434926
2026-10-02 07:00:00+07:0062.763.262.162.13199600
2026-10-05 07:00:00+07:0062.262.861.961.92513400

Nến một phút, fpt.ohlcv(length=5, interval="1m"), ba nến cuối của phiên 09/10/2026:

timeopenhighlowclosevolume
2026-10-09 14:28:00+07:0058.058.057.957.928600
2026-10-09 14:29:00+07:0057.958.057.857.967000
2026-10-09 14:45:00+07:0057.957.957.957.9284000

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

Python
trades(limit=None, *, last_id=None, side=None, source=None)
Tham sốKiểuMặc địnhÝ nghĩa
limitintNone (100 lệnh)Số lệnh khớp mới nhất cần lấy
last_idstrNoneMã lệnh cuối đã có, để lấy trang tiếp theo
sidestrNoneLọc theo chiều mua, bán, khi nguồn hỗ trợ
sourcestrNoneNguồ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ận InputError mã VNSTOCK_VCI_TRADES_PAGE_LIMIT; lấy tiếp bằng last_id. Nguồn này trả 100 lệnh mỗi truy vấn, nên limit lớ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 kbs trả đượ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ộtKiểuÝ nghĩa
timedatetime64[ns, Asia/Ho_Chi_Minh]Thời điểm khớp
pricefloat64Giá khớp, nghìn đồng
volumeint64Khối lượng khớp
match_typestringChiều chủ động: Buy, Sell, ATO, ATC, Unknown
idstringMã 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):

timepricevolumematch_typeid
2026-10-09 14:29:59+07:0057.9100Buy525060498
2026-10-09 14:29:59+07:0057.91000Buy525060454
2026-10-09 14:45:00+07:0057.9284000ATC525061946

2.3. quote(): bảng giá của mã

Python
quote(*, source=None)

Trả một dòng, giá tính bằng đồng. Tên cũ: price_board().

CộtKiểuÝ nghĩa
symbol, exchangestringMã, sàn (HOSE, HNX, UPCOM)
reference_price, ceiling_price, floor_pricefloat64Giá tham chiếu, trần, sàn
open_price, high_price, low_price, close_pricefloat64Giá mở, cao, thấp, khớp gần nhất
bid_price_1..3, bid_vol_1..3float64, int64Ba bước giá chờ mua và khối lượng
ask_price_1..3, ask_vol_1..3float64, int64Ba bước giá chờ bán và khối lượng
foreign_buy_volume, foreign_sell_volumeint64Khố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):

symbolexchangereference_priceceiling_pricefloor_priceclose_pricebid_price_1ask_price_1
FPTHOSE59700.063800.055600.057900.057800.057900.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

Python
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_1bid_vol_1bid_price_2bid_vol_2ask_price_1ask_vol_1ask_price_2ask_vol_2
57800.021770057700.042060057900.0690058000.013200

2.5. volume_profile(): khối lượng theo mức giá

Python
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ộtKiểuÝ nghĩa
pricefloat64Mức giá, đồng
buy_volume, sell_volumeint64Khối lượng mua chủ động, bán chủ động
unknown_volumeint64Khối lượng chưa xác định chiều
total_volumeint64Tổ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á):

pricebuy_volumesell_volumeunknown_volumetotal_volume
57500.0030300030300
57600.0822001661000248300
57700.0675002020000269500

2.6. session_stats(): thống kê gộp

Python
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_valueTổ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_tradeKhố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):

symboltotal_match_volumetotal_match_valuetotal_deal_volumetotal_volumefr_net_volume_totalfr_net_value_total
FPT404611232.440101e+12783317548294298-4184796-2.475168e+11

2.7. trade_history(): thống kê giao dịch theo ngày

Python
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ểuMặc địnhÝ nghĩa
start, endstrNoneKhoảng ngày, YYYY-MM-DD
limitintNoneSố phiên tối đa
resolutionstr"1D"Khung thời gian
sourcestrNoneChỉ nhận vci

Bảng có 39 cột. Nhóm chính:

CộtÝ nghĩa
trading_dateNgày giao dịch
reference_price, ceiling_price, floor_price, open, close, high, low, average_priceGiá trong phiên, đồng
price_change, percent_price_changeThay đổi so với tham chiếu (percent_price_change là tỷ lệ, -0.030151 là -3,02%)
*_adjustedCá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_valueKhớp lệnh, thoả thuận, tổng
total_buy_trade*, total_sell_trade*, total_net_trade_volumeLệnh mua, bán chủ động
market_cap, total_sharesVố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_datereference_priceclosepercent_price_changematched_volumedeal_volumetotal_value
2026-10-0959700.057900.0-0.0301511091260213142857.188563e+11
2026-10-0859700.059700.00.00000066182708491004.520222e+11
2026-10-0760400.059700.0-0.011589546365634139255.456296e+11

2.8. foreign_flow() và proprietary_flow(): khối ngoại, tự doanh

Python
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ộtKiểuÝ nghĩa
timedatetime64[ns, Asia/Ho_Chi_Minh]Ngày giao dịch
buy_vol, buy_valfloat64Khối lượng, giá trị mua (đồng)
sell_vol, sell_valfloat64Khối lượng, giá trị bán
net_vol, net_valfloat64Mua ròng (âm là bán ròng)

Dữ liệu mẫu fpt.foreign_flow(limit=3) (chạy 10/10/2026):

timebuy_volbuy_valsell_volsell_valnet_volnet_val
2026-10-09885494.05.174198e+102970012.01.736786e+11-2084518.0-1.219366e+11
2026-10-08820755.04.914756e+101812559.01.091907e+11-991804.0-6.004311e+10
2026-10-071198695.07.213711e+102305625.01.387079e+11-1106930.0-6.657081e+10

Dữ liệu mẫu fpt.proprietary_flow(limit=3) (chạy 10/10/2026):

timebuy_volsell_volnet_volnet_val
2026-10-09934500.03419800.0-2485300.0-1.440905e+11
2026-10-081281300.01106400.0174900.01.143451e+10
2026-10-072568000.0676300.01891700.01.231519e+11

2.9. block_trades(): giao dịch thoả thuận

Python
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ẻ

Python
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):

symbolexchangereference_priceclose_pricematch_voltotal_volumebid_price_1ask_price_1
FPTHOSE59700.058000.096090258000.058100.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.

Python
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ấn

Bả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:

Python
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)

Python
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àmTên cũCấpMặc địnhsource= nhận
ohlcvhistoryMọi cấpkbs; nến 1m tới 1H: vcikbs, vci
quoteprice_boardTài trợkbskbs
trade_historyTài trợvcivci
tradesintradayTài trợkbskbs

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):

timeopenhighlowclosevolume
2026-10-07 07:00:00+07:001760.541760.541743.241753.39485847590
2026-10-08 07:00:00+07:001749.251764.451738.971738.97532713885
2026-10-09 07:00:00+07:001737.181744.891724.171735.09911324549

vnindex.ohlcv(length=3, interval="15m") lấy từ vci, ba nến cuối phiên 09/10/2026:

timeopenhighlowclosevolume
2026-10-09 14:00:00+07:001740.461741.641736.701738.4748711525
2026-10-09 14:15:00+07:001738.441740.091734.271738.7447536292
2026-10-09 14:45:00+07:001737.651737.651735.091735.09132871039

3.2. quote()

Python
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.

symbolreference_priceopen_pricehigh_pricelow_priceclose_pricetotal_volume
VNINDEX1738.971737.181744.891724.171735.09911324549.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

Python
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_priceSố mã tăng, giảm, đứng giá
total_stock_ceiling, total_stock_floorSố mã tăng trần, giảm sàn
total_up_volume, total_down_volume, total_no_change_volumeKhối lượng của nhóm mã tăng, giảm, đứng giá
market_cap, total_sharesVố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_datecloseprice_changetotal_valuetotal_stock_up_pricetotal_stock_down_pricetotal_stock_ceilingtotal_stock_floor
2026-10-091735.09-3.882.760507e+13130.0175.09.05.0
2026-10-081738.97-14.421.598088e+13122.0190.012.07.0
2026-10-071753.39-5.691.526481e+13150.0151.06.04.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)

Python
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àmTên cũCấpMặc địnhsource= nhận
ohlcvhistoryMọi cấpkbs; nến 1m tới 1H: vcikbs, vci
quoteprice_boardMọi cấpkbskbs
tradesintradayMọi cấpkbskbs
order_bookprice_depthTài trợkbskbs

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):

timeopenhighlowclosevolume
2026-10-08 07:00:00+07:001891.01910.81880.21880.2243091
2026-10-09 07:00:00+07:001881.01888.81868.11877.2273544

vn30f.ohlcv(length=3, interval="1m") lấy từ vci:

timeopenhighlowclosevolume
2026-10-09 14:28:00+07:001878.21878.51876.11876.11409
2026-10-09 14:29:00+07:001876.21877.01876.01876.01290
2026-10-09 14:45:00+07:001877.21877.21877.21877.25583

4.2. quote()

Python
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):

symbolexchangereference_priceceiling_pricefloor_priceclose_pricebasisopen_interest
41I1GA000HNX1880.22011.81748.61877.23.7734255

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()

Python
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_1bid_vol_1bid_price_2bid_vol_2ask_price_1ask_vol_1ask_price_2ask_vol_2
1877.0241876.921877.2811877.31

(chạy 10/10/2026, nguồn kbs, cuối phiên 09/10/2026)


5. Chứng quyền: Market().warrant(symbol)

Python
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àmTên cũCấpMặc địnhsource= nhận
ohlcvhistoryMọi cấpkbs; nến 1m tới 1H: vcikbs, vci
quoteprice_boardMọi cấpkbskbs
tradesintradayMọi cấpkbskbs
order_bookprice_depthTài trợkbskbs

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):

timeopenhighlowclosevolume
2026-10-07 07:00:00+07:000.160.180.150.16671200
2026-10-08 07:00:00+07:000.150.170.150.15976800
2026-10-09 07:00:00+07:000.160.160.130.162496700

5.2. quote()

Một dòng, 23 cột như quote() của cổ phiếu, giá tính bằng đồng.

symbolexchangereference_priceceiling_pricefloor_priceclose_pricebid_price_1ask_price_1
CHPG2625HOSE150.0850.010.0160.0150.0160.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)

Python
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àmMặc định
ohlcvkbs; nến 1m tới 1H: vci
trades, quote, order_book, block_trades, odd_lot, volume_profilekbs
session_stats, trade_history, foreign_flow, proprietary_flowvci

Dữ liệu mẫu etf.ohlcv(length=3) (chạy 10/10/2026, nguồn kbs, nghìn đồng):

timeopenhighlowclosevolume
2026-10-07 07:00:00+07:0034.2234.2233.8334.19251200
2026-10-08 07:00:00+07:0034.1034.1733.7534.00303300
2026-10-09 07:00:00+07:0033.9034.0033.4533.84454100

etf.trades(limit=3) (nguồn kbs, phiên 09/10/2026):

timepricevolumematch_typeid
2026-10-09 14:28:47+07:0033.90200buy20261009_448900
2026-10-09 14:29:52+07:0033.82100sell20261009_449800
2026-10-09 14:45:21+07:0033.844300atc20261009_454100

etf.foreign_flow(limit=2) (nguồn vci):

timebuy_volsell_volnet_volnet_val
2026-10-09103529.0241600.0-138071.0-4.658034e+09
2026-10-08141300.0186100.0-44800.0-1.538052e+09

7. Trái phiếu niêm yết: Market().bond(symbol)

Python
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á

Python
Market().quote(symbols_list, **kwargs)
Tham sốKiểuMặc địnhÝ nghĩa
symbols_liststr hoặc danh sáchMột mã ("VCB") hoặc danh sách (["FPT", "VCB"])
sourcestr"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.

Python
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):

symbolexchangereference_priceclose_pricebid_price_1ask_price_1foreign_buy_volumeforeign_sell_volume
FPTHOSE59700.057900.057800.057900.08854942970012
VCBHOSE56600.056700.056700.056800.0227900597000
E1VFVN30HOSE34000.033840.033830.034000.0103529241600

8.2. Market().odd_lot(symbols_list): bảng giá lô lẻ

Python
Market().odd_lot(symbols_list=None, **kwargs)
Tham sốKiểuMặc địnhÝ nghĩa
symbols_liststr hoặc danh sáchNoneMột mã, danh sách mã; để trống thì lấy cả sàn exchange
exchangestr"HOSE"Sàn, chỉ nhận dạng từ khoá
limitintNoneSố dòng tối đa, chỉ nhận dạng từ khoá
sourcestr"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):

symbolexchangereference_priceclose_pricematch_voltotal_volumebid_price_1ask_price_1
FPTHOSE59700.058000.096090258000.058100.0
VCBHOSE56600.056900.01960856800.056900.0

8.3. Market().put_through(symbols_list): giao dịch thoả thuận

Python
Market().put_through(symbols_list=None, **kwargs)
Tham sốKiểuMặc địnhÝ nghĩa
symbols_liststr hoặc danh sáchNoneMột mã, danh sách mã; để trống thì lấy mọi dòng của sàn
exchangestr"HOSE"Sàn, chỉ nhận dạng từ khoá
limitintNoneSố dòng tối đa, chỉ nhận dạng từ khoá
sourcestr"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):

symboltimeexchangematch_pricematch_volumereference_price
GEX2026-10-09 14:54:24+07:00HOSE22850.03420021800.0
VHM2026-10-09 14:53:33+07:00HOSE65700.046850065700.0
GEX2026-10-09 14:53:05+07:00HOSE23200.03420021800.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àmMã 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ảnVNSTOCK_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ạiGhi 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=100 là 100 nến, không phải 100 ngày như vnstock_data 3.x. Muốn theo ngày, viết length="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.