Vnstock Logo

Sự kiện chuẩn và bộ cột

Thử nghiệm

Mục lục

Bản thử nghiệm, chưa phát hành chính thứ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 đó.

Nguồn của 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ị.

Mỗi nguồn gửi dữ liệu trong phiên theo định dạng, tên trường và đơn vị riêng. Pipeline giải mã tất cả về sự kiện chuẩn phiên bản 3: cùng một loại sự kiện có cùng tên cột, cùng đơn vị, cùng kiểu dữ liệu, dù đến từ nguồn nào. Vì vậy bạn ghép, so sánh hay chuyển đổi dữ liệu nhiều nguồn mà không phải viết mã riêng cho từng nguồn.

14 loại sự kiện

LoạiÝ nghĩaCột lõi (luôn có giá trị)Nguồn có
tradeMột lần khớp lệnhsymbol, board, time_ns, price, volumednse, tcbs, ssi, binance
quoteCác bước giá mua, bánsymbol, board, time_ns, bids, asksdnse, tcbs, ssi, binance
book_deltaThay đổi sổ lệnhsymbol, time_ns, bids, asks, first_update_id, last_update_idbinance
index_tickGiá trị chỉ sốindex, time_ns, valuednse, tcbs, ssi
index_estimateChỉ số dự kiến ở phiên định kỳindex, time_ns, valuednse, ssi
foreign_flowKhối ngoại mua, bán cộng dồnsymbol, time_ns, buy_volume, sell_volumednse, tcbs, ssi
barNếnsymbol, interval, time_ns, open, high, low, close, volume, final, origindnse, ssi, binance; nến pipeline dựng cho mọi nguồn
statsThống kê chạy theo cửa sổsymbol, window, time_nstcbs, ssi, binance
price_limitsTham chiếu, trần, sàn, trạng thái giao dịchsymbol, time_ns, referencednse, tcbs, ssi, binance
auctionGiá khớp dự kiếnsymbol, time_ns, pricednse, ssi
put_through_offerChào mua, bán thoả thuậnsymbol, side, time_ns, price, volumetcbs
flowMua, bán chủ động theo khungsymbol, interval, time_nstcbs
statusChuyển phiên, trạng thái của mãmarket, time_ns, statednse, ssi
index_contributionMức đóng góp của một mã vào chỉ sốindex, symbol, time_ns, influencednse

Loại nào cũng có thêm ba cột lõi: type (tên loại), source (nguồn) và seq (số thứ tự thông điệp trong phiên). Bảng kênh ra loại sự kiện của từng nguồn có ở Dữ liệu trong phiên.

Ba tầng cột

TầngVí dụ ở tradeQuy tắc
Lõiprice, volume, time_nsLuôn có giá trị, cùng nghĩa với mọi nguồn
Chungside, cum_volume, cum_value, session, day_high, day_low, feed, trade_id, replay, recv_nsCùng nghĩa, cùng đơn vị chuẩn với mọi nguồn. Để trống (null) khi nguồn không gửi
Chi tiếtdnse_isin, ssi_ref_price, tcbs_color, binance_buyer_is_makerTrường riêng của một nguồn, giữ nguyên đơn vị và nghĩa gốc. Tên cột là <nguồn>_<khoá>

Tầng chi tiết giữ những thứ chỉ một nguồn có, như mã ISIN, mã trạng thái gốc, cờ cho biết bên mua là bên chờ khớp (maker), giờ nhận gói tin phía nguồn, để bạn không mất thông tin khi chuẩn hoá. Một bộ dữ liệu có đủ cột chi tiết của mọi nguồn; dòng của nguồn khác để trống. Vì vậy mỗi bộ dữ liệu chỉ có một bộ cột cho mọi nguồn, và mọi tệp của nó có cùng cấu trúc Arrow.

Số cột chi tiết ở bản này:

Loạidnsetcbsssibinance
trade415144
quote33
index_tick818
foreign_flow83
bar217
stats712
price_limits111
status43
flow1

Ý nghĩa và trường gốc của từng cột chi tiết tra bằng canonical.detail_spec:

Python
from vnstock_pipeline import canonical

canonical.detail_spec("<nguồn>", "trade", "<kênh gốc>")[:3]
# mỗi dòng: [cột chi tiết, trường gốc của nguồn, kiểu, đơn vị]

Đơn vị và giờ

TrườngĐơn vị chuẩn
Giá cổ phiếu, chứng quyềnNghìn đồng
Giá trị chỉ số, giá phái sinhĐiểm
Khối lượngCổ phiếu; phái sinh: hợp đồng
Giá trị (cum_value, value)Đồng. Nến hợp đồng tương lai VN30, VN100: 100.000 đồng mỗi điểm; phái sinh khác: để trống
binanceGiá và giá trị theo tài sản định giá (ví dụ USDT), khối lượng theo tài sản gốc
time_nsGiờ của sự kiện, nano giây kể từ 1970-01-01 UTC. Nguồn chỉ có giờ nhận thì bằng recv_ns
recv_nsGiờ máy bạn nhận thông điệp

Pipeline quy đổi theo đơn vị gốc của từng nguồn để ra đơn vị chuẩn. Ví dụ, khối lượng lô chẵn của dnse tính theo lô 10 cổ phiếu, còn giá cổ phiếu của tcbs, ssi tính bằng đồng. Cột chi tiết thì giữ đơn vị gốc, đơn vị ghi trong detail_spec.

Giá trị dùng chung

CộtGiá trị
boardmain (lô chẵn), odd_lot (lô lẻ), put_through (thoả thuận), other
sidebuy, sell (bên chủ động); null khi nguồn không gửi
trading_statusnormal, halted, suspended, delisted, special, other; mã gốc của nguồn ở cột chi tiết
bar.intervaltick, 1s, 1m, 3m, 5m, 15m, 30m, 1H, 2H, 4H, 6H, 8H, 12H, 1D, 3D, 1W, 1M
bar.originsource (nến nguồn phát), trades (nến pipeline dựng từ khớp lệnh)
bar.finaltrue khi nến đã đóng
stats.windowsession, 5m, 1h, 4h, 1d, 24h
trade.feedKênh gốc của lệnh, ví dụ tick, tick_extra, match, history_1m, match_history, trade, agg_trade
trade.replaytrue khi nguồn gửi lại lệnh cũ: lúc vừa đăng ký, lệnh cũ hơn 60 giây lúc nhận, hoặc thông điệp khớp lặp lại mà tổng cộng dồn không tăng

Chọn cột lưu

Mặc định thư mục lưu trữ giữ đủ ba tầng. Muốn gọn hơn, chọn bộ cột trong pipeline.toml hoặc trong mã:

Bộ cộtGiữ
FieldSet.default()Lõi, chung và mọi cột chi tiết
FieldSet.common()Lõi và chung, giống nhau cho mọi nguồn
FieldSet.core_only()Chỉ lõi
FieldSet.filled_by("<nguồn 1>", "<nguồn 2>", detail=True)Chỉ những cột mà các nguồn đã chọn có điền, nên không có cột luôn trống
Python
from vnstock_pipeline import Session, Store, canonical

fields = canonical.FieldSet.filled_by("<nguồn>").with_("trade", "<cột chi tiết>").without("quote", "board_code")
Session(Store(), "<nguồn>", ["<kênh>"], ["<mã>"], fields=fields).run(seconds=300)

fields.columns("trade")        # thứ tự cột của bảng: lõi, chung đã bật, chi tiết đã bật

Trong pipeline.toml, liệt kê cột chung và cột chi tiết muốn giữ cho từng loại. Loại không ghi thì chỉ giữ cột lõi:

TOML
[stream.fields]
trade = ["side", "cum_volume", "session", "feed", "replay", "dnse_isin"]
quote = ["total_bid_volume", "total_ask_volume"]
bar = ["value", "volume_basis"]

Tên cột sai hoặc loại sự kiện không có thì pipeline báo lỗi ngay khi mở phiên, không bỏ qua lặng lẽ.

Hợp đồng dữ liệu

Định nghĩa đầy đủ của 14 loại sự kiện nằm trong thư viện, ở dạng JSON Schema:

Python
from vnstock_pipeline import canonical

canonical.EVENT_VERSION              # 3
canonical.types()                    # 14 loại
canonical.core_fields("trade")       # cột lõi
canonical.optional_fields("trade")   # cột chung
canonical.detail_columns("trade")    # cột chi tiết của mọi nguồn
canonical.dtypes("trade", ["time_ns", "price", "replay"])   # kiểu cột cố định: Int64, float64, boolean
canonical.validate(event)            # kiểm một sự kiện theo hợp đồng

Mỗi tệp stream ghi event_version vào metadata, còn _catalog/contract.json ghi phiên bản của cả thư mục. Tệp ghi bằng phiên bản cũ vẫn đọc được; cột không có ở phiên bản cũ là null khi gộp.

Bước tiếp theo

Chất lượng dữ liệu.