Tác vụ nạp dữ liệu
Mục lục
Trang này viết cho vnstock_pipeline v6.0.0rc1, bản thử nghiệm. Tên hàm, tham số và cột dữ liệu có thể còn đổi trước ngày phát hành; khi cài, ghi rõ số phiên bản như ở trang Cài đặt. Bản đang phát hành chính thức là v3.1.1, xem tài liệu bản đó.
Chọn nguồn bạn có khoá, mã trên trang sẽ điền theo. Chưa chọn thì mã giữ chỗ trống <nguồn>. Nguồn xếp theo bảng chữ cái, không phải khuyến nghị.
Tác vụ nạp dữ liệu gọi các hàm của vnstock 6 bằng khoá của bạn, kiểm tra chất lượng rồi ghi vào thư mục lưu trữ.
Mỗi tác vụ là một lệnh vnstock-pipeline run …, hoặc một phương thức của lớp Runner trong Python.
Cú pháp chung
vnstock-pipeline run <tác vụ> [chọn mã] [tuỳ chọn của tác vụ]Chọn mã
| Tham số | Ý nghĩa |
|---|---|
--symbols FPT,HPG,VCB | Danh sách mã, cách nhau bằng dấu phẩy |
--group VN30 | Một nhóm: VN30, VN100, HNX30 (thành phần chỉ số); HOSE, HNX, UPCOM, ALL (danh mục sàn); LIQUIDITY (nhóm thanh khoản); INDEX (danh sách chỉ số); FUTURES (hai hợp đồng liên tục VN30F1M, VN30F2M) |
--watchlist ngan_hang | Danh sách đặt tên trong [watchlists] của pipeline.toml |
--top 50 | Số mã đầu khi dùng --group LIQUIDITY |
--asset equity | Loại tài sản: equity, index, futures, warrant |
--source <nguồn 1>,<nguồn 2> | Nguồn cho lần chạy này, theo thứ tự thử; mặc định lấy ở bảng [sources] |
--strict | Cảnh báo chất lượng cũng chặn ghi (mặc định chỉ lỗi mới chặn) |
--verbose, -v | In đầy đủ kết quả từng đơn vị việc |
Nhóm theo sàn và theo chỉ số lấy từ danh mục đã nạp hôm nay. Nếu hôm nay chưa có, pipeline tự nạp trước. Xem một nhóm
gồm những mã nào bằng vnstock-pipeline universe show --group VN30.
Kết quả và mã thoát
Mọi lệnh run in JSON gồm phần tóm tắt và kết quả từng đơn vị việc (một mã, một ngày, một ảnh chụp):
{
"summary": {"units": 30, "actions": {"merged": 28, "up_to_date": 2}, "rows_new": 28,
"errors": [], "quarantined": [], "warnings": 0},
"results": [{"key": "FPT", "action": "merged", "rows_new": 1, "source": "<nguồn>", "note": null}]
}action | Nghĩa |
|---|---|
created, merged, replaced, appended | Đã ghi: tệp mới, gộp vào tệp cũ, ghi lại cả tệp, nối thêm |
up_to_date | Mã đã mới, không tải |
unchanged, empty | Nguồn trả cùng dữ liệu, hoặc không có dòng nào |
quarantined | Cấu trúc cột lệch, tệp mới vào vùng cách ly (Chất lượng dữ liệu) |
error | Mọi nguồn đều lỗi; lý do ở summary.errors |
Lệnh thoát với mã 1 khi có error hoặc quarantined, mã 0 khi mọi đơn vị đều ổn. Nhờ vậy lịch chạy và script biết
được lần chạy nào cần xem lại.
Nguồn dự phòng
Với mỗi đơn vị việc, pipeline thử lần lượt các nguồn trong [sources] (hoặc --source). Nguồn đầu lỗi tạm thời, như
mất mạng hay nguồn bận, thì chuyển sang nguồn kế tiếp. Lỗi do tham số sai thì dừng ngay, không thử tiếp. Cột source
trong kết quả và metadata của tệp cho biết nguồn nào đã trả dữ liệu.
Các tác vụ
Nến (run ohlcv)
vnstock-pipeline run ohlcv --group VN30 # nến ngày, cập nhật phiên gần nhất
vnstock-pipeline run ohlcv --symbols FPT,MWG --mode init # tải từ đầu cho mã mới theo dõi
vnstock-pipeline run ohlcv --group LIQUIDITY --top 50 --interval 1m
vnstock-pipeline run ohlcv --group INDEX # nến chỉ số
vnstock-pipeline run ohlcv --group FUTURES --interval 1D # hợp đồng tương lai liên tục| Tham số | Ý nghĩa |
|---|---|
--interval | Khung nến của vnstock 6, ví dụ 1m, 5m, 15m, 30m, 1H, 1D, 1W, 1M (mặc định 1D) |
--mode daily | Mặc định. Bỏ qua mã có nến ngày cuối là ngày giao dịch gần nhất; mã còn thiếu thì tải nối tiếp |
--mode init | Luôn tải, không bỏ qua mã nào |
--mode full | Tải lại toàn bộ từ inception và ghi đè tệp |
--start, --end | Khoảng ngày cụ thể |
--include-today | Giữ nến ngày của hôm nay khi phiên còn đang chạy (mặc định bỏ vì nến chưa xong) |
Cách tải nối tiếp:
- Pipeline đọc lại
overlap_daysnến cuối, mặc định 10. - Giá đóng cửa trong khoảng đọc lại khác giá đã lưu quá 0,5% nghĩa là nguồn đã điều chỉnh lịch sử, ví dụ sau chia cổ tức hay tách cổ phiếu. Khi đó pipeline tải lại toàn bộ lịch sử của mã và thay tệp cũ.
- Nến phút của hôm nay được giữ, vì mỗi nến phút đóng dần trong ngày.
Giá theo đơn vị của vnstock 6: cổ phiếu tính bằng nghìn đồng, chỉ số và phái sinh tính bằng điểm. Lịch sử là giá đã
điều chỉnh do nguồn trả về.
Khớp lệnh trong ngày (run trades)
vnstock-pipeline run trades --symbols FPT,HPG # phiên gần nhất
vnstock-pipeline run trades --group VN30 --dates 2026-10-30,2026-10-31Lấy toàn bộ khớp lệnh của từng mã cho từng ngày, rồi ghi lại cả tệp market/trades/<ngày>/<MÃ>.parquet. Ngày nào lấy
được tuỳ nguồn lưu lại bao lâu.
Bảng giá và sổ lệnh (run quote)
vnstock-pipeline run quote --group VN30 # bảng giá và sổ lệnh
vnstock-pipeline run quote --symbols FPT --kinds order_bookMỗi lần chạy là một ảnh chụp, được nối vào tệp của ngày theo mốc giờ. Chạy lặp theo lịch, ví dụ mỗi phút, sẽ có bản ghi trong ngày mà không cần mở phiên stream.
Chỉ số trong phiên (run index)
vnstock-pipeline run index # các chỉ số trong [reference] indexes
vnstock-pipeline run index --symbols VNINDEX,VN30,HNXINDEXKhối ngoại, thống kê phiên, thoả thuận
vnstock-pipeline run foreign --group VN30 # khối ngoại theo ngày, tải nối tiếp
vnstock-pipeline run session-stats --group VN30 # thống kê phiên theo ngày
vnstock-pipeline run block-trades # giao dịch thoả thuận cả thị trườngforeign và session-stats là chuỗi theo ngày của từng mã, nhận --start, --end, --mode như run ohlcv. Hai tác
vụ này không có bước kiểm điều chỉnh lịch sử.
Tham chiếu (run reference)
vnstock-pipeline run reference
vnstock-pipeline run reference --parts equity_list,index_members| Phần | Bộ dữ liệu |
|---|---|
equity_list | Danh mục mã của HOSE, HNX, UPCoM, mỗi ngày một tệp |
index_members | Thành phần các rổ trong [reference] indexes, mỗi ngày một tệp |
price_limits | Giá trần, sàn, tham chiếu, mỗi ngày một tệp |
trading_days | Ngày giao dịch; pipeline dùng để biết hôm nào có phiên |
events_calendar | Lịch sự kiện doanh nghiệp (cổ tức, phát hành thêm…), gộp theo mã, loại sự kiện, ngày GDKHQ |
Nên chạy run reference mỗi sáng trước các tác vụ khác, vì nhóm mã theo sàn, theo chỉ số và lịch giao dịch đều đọc
từ đây.
Hồ sơ doanh nghiệp (run company)
vnstock-pipeline run company --symbols FPT,MWG # thông tin chung
vnstock-pipeline run company --group VN30 --parts all--parts nhận info, shareholders, ownership, insider_trading, hoặc all. Tác vụ chạy trên nguồn có hồ sơ doanh
nghiệp, mặc định fhsc.
Nhóm thanh khoản
vnstock-pipeline universe build-liquidity --days 20 --top 300 # xếp hạng trên nến ngày đã lưu
vnstock-pipeline universe show --group LIQUIDITY --top 50
vnstock-pipeline run ohlcv --group LIQUIDITY --top 50 --interval 1mbuild-liquidity xếp các mã theo giá trị giao dịch trung bình của --days phiên gần nhất, tính trên nến ngày đã lưu,
rồi lưu danh sách --top mã đầu. Nhóm LIQUIDITY đọc danh sách này. Nếu chưa có danh sách, pipeline tự dựng. Nên chạy
lại sau khi cập nhật nến ngày.
Đặt lịch chạy
Lệnh run không tự lặp. Bạn đặt lịch bằng công cụ của hệ điều hành.
macOS, Linux (crontab -e):
# 08:30 thứ Hai tới thứ Sáu: danh mục, thành phần, trần sàn, ngày giao dịch
30 8 * * 1-5 ~/.venv_pipeline6/bin/vnstock-pipeline run reference >> ~/pipeline.log 2>&1
# 15:45: nến ngày, khối ngoại, thống kê phiên cho VN30
45 15 * * 1-5 ~/.venv_pipeline6/bin/vnstock-pipeline run ohlcv --group VN30 >> ~/pipeline.log 2>&1
50 15 * * 1-5 ~/.venv_pipeline6/bin/vnstock-pipeline run foreign --group VN30 >> ~/pipeline.log 2>&1Windows: tạo tác vụ trong Task Scheduler, chương trình là vnstock-pipeline.exe trong thư mục Scripts của môi trường
ảo, tham số là phần sau tên lệnh, ví dụ run ohlcv --group VN30.
Pipeline tự bỏ qua mã đã mới, nên chạy lại một lệnh nhiều lần trong ngày không tải trùng. Nguồn tcbs cần mở phiên
bằng OTP mỗi 24 giờ; lịch chạy tự động nên ưu tiên nguồn không cần OTP trong [sources].
Gọi từ Python
from vnstock_pipeline import Runner
from vnstock_pipeline.tasks import summary
run = Runner() # Store() + vnstock 6; Runner(store, strict=True) nếu muốn chặt
results = run.reference()
results += run.ohlcv(group="VN30", interval="1D")
results += run.trades(symbols=["FPT", "HPG"], dates=["2026-10-30"])
results += run.snapshot(symbols=["FPT"], kinds=("quote", "order_book"))
results += run.foreign_flow(watchlist="ngan_hang")
print(summary(results)) # như phần "summary" của dòng lệnh
for r in results:
if r.action == "error":
print(r.key, r.source, r.error)| Phương thức | Tương đương |
|---|---|
ohlcv(...) | run ohlcv |
trades(...) | run trades |
snapshot(kinds=(...)) | run quote |
index_quote(indexes=[...]) | run index |
foreign_flow(...), session_stats(...), block_trades() | run foreign, run session-stats, run block-trades |
reference(parts=[...]) | run reference |
company(parts=[...]) | run company |
symbols(group=..., top=...) | universe show |
build_liquidity(days=..., top=...) | universe build-liquidity |
Mỗi phương thức trả danh sách TaskResult (task, key, source, action, rows, rows_new, path, issues,
error) và không in gì ra màn hình.
