Kết nối dữ liệu realtime
Cập nhật lần cuối:
Thảo luậnMụ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.
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_casechuẩ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_1thay vì phải tự lọc giá trị theo cộtsidevàprice_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.
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ộttime. - Thay vì đọc
last_pricevàlast_volume, hãy dùngpricevàvolume. - Thay vì đọc
stock_id, hãy dùngid.
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:
python3 wss_streaming.pyWindows:
python wss_streaming.pyVớ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).
Để đả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):
# Thu thập chỉ dữ liệu giá cổ phiếu và chỉ số
python3 job_examples/wss_streaming.py --data-types stockps indexCác loại dữ liệu có sẵn qua WebSocket
| Loại dữ liệu | Mô tả |
|---|---|
stockps | Dữ liệu giá cổ phiếu theo thời gian thực (Tick Data) |
index | Dữ liệu các chỉ số thị trường |
board | Bảng giá tổng quan |
boardps | Bảng giá chi tiết theo từng cổ phiếu |
aggregatemarket | Dữ liệu tổng hợp thị trường |
aggregateps | Dữ 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:
- Đóng tất cả kết nối WebSocket.
- Dừng SessionManager.
- 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_loghoặc Console output để xem token xác thực có hết hạn không.
Thảo luận