Vnstock Logo

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

Mở rộngvnstock_pipeline v2.3.2

Mục lục

Giới thiệu

Vnstock Pipeline cung cấp khả năng kết nối và nhận dữ liệu thị trường chứng khoán trong phiên (cập nhật theo độ trễ của nguồn) 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").
Lưu ý thay đổi kiến trúc

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 trong phiên qua WebSocket đượ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)

  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 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ạ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 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: Phát lại luồng dữ liệu bạn đã nhận cho các ứng dụng nội bộ của chính bạn trong cùng hệ thống (fan-out nội bộ). Chỉ dùng trong phạm vi tài khoản và quyền của bạn với nguồn; không chia sẻ credential, không cung cấp luồng dữ liệu cho bên thứ ba.

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 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 để đảm bảo bắt trọn mọi biến động giá nhỏ nhất.

Thảo luận

Đang tải…