Vnstock Logo

Kết nối dữ liệu trong phiên qua WebSocket

Mở rộngvnstock_pipeline v2.3.2

Mục lục

Giới thiệu

Vnstock Pipeline có công cụ giúp bạn kết nối tới luồng dữ liệu thị trường chứng khoán trong phiên của nguồn thông qua giao thức WebSocket. Dữ liệu cập nhật theo độ trễ của nguồn; độ trễ, tính liên tục và quyền sử dụng phụ thuộc vào nguồn. Tính năng này phục vụ nhu cầu theo dõi và phân tích dữ liệu thị trường liên tục, tự động trên máy của bạn.

Tính năng chính

  • Dữ liệu theo từng lệnh khớp: Nhận dữ liệu trong phiên ở mức từng lệnh khớp (tick-by-tick) qua WebSocket, theo độ trễ của nguồn.
  • Quản lý phiên thông minh: Tự động kết nối, tự động ngắt kết nối vào giờ nghỉ trưa và phục hồi an toàn khi đứt kết nối.
  • Cấu trúc dữ liệu chuẩn hóa: Hệ thống trả về cấu trúc dữ liệu nhất quán, lấy cảm hứng từ chuẩn FIX/Bloomberg (kích hoạt bằng tham số naming="standard").
Lưu ý thay đổi kiến trúc

Kể từ bản v2.3.1, thiết kế hệ thống tập trung vào việc ghi dữ liệu nhận được ra tệp Parquet/CSV tại vị trí lưu cục bộ do bạn cấu hình. Việc xử lý chuyên sâu như đẩy vào cơ sở dữ liệu DuckDB hay Firebase sẽ được chuyển giao cho người dùng để đảm bảo tính tinh gọn, tránh cài đặt thừa thư viện.

Tính năng kết nối dữ liệu trong phiên qua WebSocket dành cho người tài trợ ở cấp Golden và Diamond. Vui lòng tham khảo hướng dẫn tài trợ để biết thêm chi tiết.


1. Chuẩn Hóa Cấu Trúc Dữ Liệu (Standard Schemas)

Hệ thống cho phép bạn chuyển tên trường của dữ liệu gốc (dùng nhiều từ viết tắt) sang cách đặt tên thống nhất bằng cách truyền cờ naming="standard" khi thiết lập.

Nguyên tắc chuẩn hóa (Standard Naming)

  1. Sử dụng snake_case: Ví dụ total_volume thay vì TotalVol.
  2. Loại bỏ viết tắt: Ngoại trừ các thuật ngữ toàn cầu như ETF, CW.
  3. Phân loại rõ ràng bằng hậu tố: _price (giá), _volume (khối lượng), _value (giá trị).
  4. Đồng bộ với Vnstock Data: Thời gian luôn là time, mã chứng khoán luôn là symbol.
  5. Sổ lệnh tự động phân giải: Sổ lệnh (Board) tự động tách thành bên mua (bid) và bên bán (ask) thay vì gộp chung.

Mẫu cấu trúc dữ liệu trả về

Ví dụ 1: Giá Cổ Phiếu Khớp Lệnh (stock) Dữ liệu trả về cho mỗi lần có giao dịch khớp lệnh:

  • time: 2026-03-20 09:10:14 (Thời điểm khớp)
  • symbol: PVS (Mã chứng khoán)
  • price: 42.3 (Giá khớp cuối)
  • volume: 10 (Khối lượng khớp)
  • total_volume: 4280 (Tổng khối lượng tích lũy)
  • side: B (Bên Mua chủ động) hoặc S (Bên Bán chủ động)

Ví dụ 2: Sổ Lệnh / Bảng Giá (board) Dữ liệu cập nhật các bước giá đang chờ mua/bán:

  • bid_price_1, bid_price_2, bid_price_3: 3 bước giá chờ mua tốt nhất.
  • bid_vol_1, bid_vol_2, bid_vol_3: Khối lượng chờ mua tương ứng.
  • ask_price_1, ask_price_2, ask_price_3: 3 bước giá chờ bán tốt nhất.
  • ask_vol_1, ask_vol_2, ask_vol_3: Khối lượng chờ bán tương ứng.

2. Mã Nguồn Mẫu (Streaming Examples)

Tính năng nhận dữ liệu trong phiên qua WebSocket là một tính năng chuyên sâu. Để giúp bạn dễ dàng bắt đầu, Vnstock cung cấp một bộ mã nguồn hoàn chỉnh sẵn sàng sử dụng.

Tải bộ mã nguồn mẫu: Vui lòng đăng nhập vào tài khoản trên Vnstocks và truy cập Tài nguyên độc quyền để tải tệp ZIP mã nguồn.

Cấu trúc bộ mã nguồn

Sau khi giải nén, bộ mã nguồn bao gồm các kịch bản ứng dụng chính sau:

I. Luồng cơ bản (01_basic)

  • 01_console_streaming.py: Khởi chạy kết nối và in giá trị trực tiếp ra màn hình.
  • 02_custom_processor.py: Hướng dẫn cách tạo Processor riêng để tự động lưu dữ liệu vào tệp CSV hoặc Parquet với định dạng chuẩn.

II. Hệ thống phân tán Redis (02_redis_pubsub)

Dành cho hệ thống phân tích tự động quy mô lớn.

  • 01_publisher.py: Chỉ làm một việc duy nhất là nhận luồng dữ liệu trong phiên và đẩy vào bộ nhớ đệm Redis.
  • 02_consumer.py: Chạy thành tiến trình riêng để lấy dữ liệu từ Redis về tính toán, giúp giảm nguy cơ nghẽn luồng nhận dữ liệu.

III. Phân tích tự động & Cảnh báo (04_advanced_use_cases)

  • Quét đột biến: Các tệp mã lệnh tính toán RSI, MACD ngay khi giá thay đổi (sử dụng kết hợp vnstock_ta).
  • Gửi cảnh báo: Gửi tin nhắn tự động lên nhóm Discord khi chỉ báo phát hiện đột biến khối lượng mua chủ động.

3. Kinh Nghiệm Vận Hành

  1. Kiểm soát bộ nhớ RAM: Khi tính toán các chỉ báo kỹ thuật liên tục, hãy sử dụng cấu trúc bộ nhớ có giới hạn vòng (như collections.deque trong Python). Không dùng mảng danh sách (list) thông thường để tránh tràn bộ nhớ khi cắm máy chạy cả ngày.
  2. Lập trình phi đồng bộ (Async): Mọi tác vụ mất thời gian (ví dụ: ghi dữ liệu ra ổ cứng, gửi tin nhắn cảnh báo qua mạng) đều phải bọc trong các tiến trình chạy ngầm (asyncio.create_task()). Việc chặn luồng chính quá lâu sẽ khiến hệ thống không kịp nhận dữ liệu mới và bị ngắt kết nối.
  3. Số lượng mã tối ưu: Mỗi tiến trình chỉ nên đăng ký theo dõi từ 10 đến 20 mã cổ phiếu quan trọng nhất để giảm nguy cơ bỏ sót cập nhật.