Vnstock Logo

Kết nối dữ liệu realtime

Cập nhật lần cuối:

Thảo luận

Mục lục

Giới thiệu

Vnstock Pipeline cung cấp khả năng kết nối và thu thập dữ liệu thị trường chứng khoán theo thời gian thực thông qua giao thức WebSocket. Tính năng này được thiết kế để đáp ứng nhu cầu theo dõi và phân tích dữ liệu thị trường một cách liên tục và tự động.

Tính năng chính

  • Kết nối thời gian thực: Nhận dữ liệu thị trường ngay lập tức qua WebSocket.
  • Quản lý phiên tự động: Tự động kết nối và ngắt kết nối theo lịch giao dịch.
  • Cấu trúc dữ liệu chuẩn hóa: Hỗ trợ xuất dữ liệu với cấu trúc được lấy cảm hứng từ chuẩn FIX/Bloomberg (tùy chọn naming="standard").
  • Xử lý lỗi thông minh: Tự động phục hồi kết nối và ghi nhật ký chi tiết.
Lưu ý thay đổi kiến trúc

Kể từ bản v2.3.1, thư viện không còn duy trì các lớp DuckDBProcessor hay FirebaseProcessor. Triết lý thiết kế mới là: Pipeline chuyên trách thu gom dữ liệu cực nhanh vào định dạng Parquet/CSV. Người dùng tự quản lý cơ sở dữ liệu lưu trữ / dữ liệu thời gian thực của riêng mình tuỳ theo mục đích để không bị phụ thuộc vào các gói cài đặt dư thừa.

Yêu cầu hệ thống

  • Python 3.10 trở lên.
  • Gói tài trợ Golden của vnstock.
  • Kết nối internet ổn định.

Tính năng kết nối dữ liệu realtime chỉ dành cho người dùng gói tài trợ Golden. Vui lòng tham khảo hướng dẫn tài trợ để biết thêm chi tiết.

WebSocket truyền dữ liệu thời gian thực

Cấu trúc dữ liệu trả về từ WebSocket trước đây có một số hạn chế về tính đồng nhất trong chuẩn đặt tên. Bản nâng cấp mới giải quyết vấn đề này bằng việc đưa vào tham số naming:

  • Đồng nhất tất cả các key về dạng snake_case chuẩn.
  • Loại bỏ các trường viết tắt khó hiểu, chuẩn hóa hậu tố giá (_price), khối lượng (_volume) và giá trị (_value).
  • Với sổ lệnh cổ phiếu, sử dụng trực tiếp bid_price_1, ask_price_1 thay vì phải tự lọc giá trị theo cột sideprice_1.

Cách kích hoạt chuẩn đặt tên mới

Chỉ cần truyền tham số naming="standard" khi khởi tạo CSVProcessor.

Python
from vnstock_pipeline.stream import CSVProcessor

# Truyền thêm tham số naming
csv_processor = CSVProcessor(
    "data/{event_type}_%Y-%m-%d.csv",
    naming="standard"  # Kích hoạt kết quả lấy cảm hứng từ chuẩn FIX/Bloomberg
)
client.add_processor(csv_processor)

Ví dụ một số thay đổi nếu bạn dùng standard:

  • Thay vì đọc cột timestamp, hãy đọc cột time.
  • Thay vì đọc last_pricelast_volume, hãy dùng pricevolume.
  • Thay vì đọc stock_id, hãy dùng id.

Sử dụng cơ bản

Tương tự như trước đây, bạn khởi chạy hệ thống thông qua script.

Unix/Linux/Mac:

Shell
python3 wss_streaming.py

Windows:

CMD
python wss_streaming.py

Với cấu hình mặc định, ứng dụng sẽ:

  • Thu thập tất cả các loại dữ liệu có sẵn được đăng ký trong script.
  • Quản lý đóng mở kết nối tự động (SessionManager).
Lời khuyên cấu hình số lượng mã

Để đảm bảo hệ thống ghi nhận trọn vẹn và không bỏ sót các sự kiện thay đổi giá theo thời gian thực truyền về từ WebSocket, bạn chỉ nên theo dõi từ 10 đến 20 mã cổ phiếu cho mỗi kết nối. Hãy ưu tiên đăng ký những mã quan trọng cần theo dõi sát sao, tránh đăng ký quá nhiều mã cùng lúc gây quá tải đường truyền và làm thiếu sót dữ liệu.

Lọc dữ liệu theo loại

Để tối ưu hóa tài nguyên và tập trung vào các loại dữ liệu cần thiết, sử dụng tham số --data-types khi khởi chạy script (nếu bạn có triển khai script nhận Argument):

Shell
# Thu thập chỉ dữ liệu giá cổ phiếu và chỉ số
python3 job_examples/wss_streaming.py --data-types stockps index

Các loại dữ liệu có sẵn qua WebSocket

Loại dữ liệuMô tả
stockpsDữ liệu giá cổ phiếu theo thời gian thực (Tick Data)
indexDữ liệu các chỉ số thị trường
boardBảng giá tổng quan
boardpsBảng giá chi tiết theo từng cổ phiếu
aggregatemarketDữ liệu tổng hợp thị trường
aggregatepsDữ liệu tổng hợp chi tiết

Giám sát và xử lý sự cố

Tắt ứng dụng an toàn

Sử dụng Ctrl+C để dừng ứng dụng. Hệ thống sẽ thực hiện quá trình tắt an toàn:

  1. Đóng tất cả kết nối WebSocket.
  2. Dừng SessionManager.
  3. Ghi toàn bộ vùng đệm dữ liệu bộ nhớ và lưu an toàn vào các tệp CSV/Parquet.

Khắc phục sự cố

Không nhận được dữ liệu?

  • Kiểm tra kết nối mạng (Ping 8.8.8.8).
  • Đảm bảo phiên giao dịch của sàn chứng khoán đang mở cửa.
  • Kiểm tra file error_log hoặc Console output để xem token xác thực có hết hạn không.

Thảo luận

Đang tải bình luận...