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, hoàn toàn tự động.
Tính năng chính
- Bắt tín hiệu tức thì: Nhận dữ liệu thị trường cực nhanh (tick-by-tick) qua WebSocket.
- 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").
Kể từ bản v2.3.1, thiết kế hệ thống tập trung hoàn toàn vào việc thu gom dữ liệu với tốc độ cao nhất vào định dạng Parquet/CSV. 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 thời gian thực được cung cấp độc quyền cho người dùng Gói Tài Trợ Golden/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 đổi dữ liệu gốc (vốn rất khó hiểu với nhiều từ viết tắt) thành chuẩn quốc 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)
- Sử dụng
snake_case: Ví dụtotal_volumethay vìTotalVol. - Loại bỏ viết tắt: Ngoại trừ các thuật ngữ toàn cầu như ETF, CW.
- Phân loại rõ ràng bằng hậu tố:
_price(giá),_volume(khối lượng),_value(giá trị). - Đồng bộ với Vnstock Data: Thời gian luôn là
time, mã chứng khoán luôn làsymbol. - 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ặcS(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 truyền dữ liệu thời gian thực 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 4 kịch bản ứng dụng chính:
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ạoProcessorriê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 giao dịch thuật toán chuyên nghiệp.
01_publisher.py: Chỉ làm một việc duy nhất là nhận luồng giá siêu tốc và đẩy thẳng vào bộ nhớ đệm Redis.02_consumer.py: Chạy độc lập trên máy chủ khác để kéo dữ liệu từ Redis về tính toán, giúp luồng nhận giá không bao giờ bị nghẽn.
III. Máy chủ trung chuyển (03_websocket_relay)
01_relay_server.py: Biến máy tính của bạn thành một trạm trung chuyển. Nhận dữ liệu từ nguồn và phát lại cho hàng chục ứng dụng web/mobile nội bộ của bạn kết nối vào mà không lo vượt giới hạn tài khoản.
IV. Giao dịch thuật toán & 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 thời gian thực 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 có tín hiệu đột biến khối lượng mua chủ động.
3. Kinh Nghiệm Vận Hành
- 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.dequetrong 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. - 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. - 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 để đảm bảo bắt trọn mọi biến động giá nhỏ nhất.
Thảo luận