Tùy chỉnh Pipeline
Cập nhật lần cuối:
Thảo luậnMục lục
Tùy chỉnh pipeline
Kiến trúc mới của vnstock_pipeline (từ v2.3.1) cho phép bạn linh hoạt tùy biến bằng 3 cách:
- Tùy chỉnh nhanh qua giao diện dòng lệnh (CLI).
- Tùy chỉnh chuyên sâu qua tệp cấu hình
pipeline.toml. - Xây dựng quy trình riêng (Custom Pipeline) bằng mã Python.
1. Tùy chỉnh qua giao diện dòng lệnh (CLI)
Giao diện CLI cung cấp các tham số (cờ) để bạn điều chỉnh trực tiếp luồng xử lý mà không cần viết mã:
# Thay đổi nguồn cung cấp dữ liệu ưu tiên (hỗ trợ chuyển nguồn dự phòng)
python -m vnstock_pipeline.cli run ohlcv --sources VCI,KBS,VND
# Thay đổi khung thời gian cho dữ liệu lịch sử
python -m vnstock_pipeline.cli run ohlcv --interval 1H
# Tuỳ chỉnh khoảng thời gian lấy dữ liệu cụ thể
python -m vnstock_pipeline.cli run ohlcv --start "2024-01-01" --end "2024-12-31"2. Tùy chỉnh qua tệp cấu hình pipeline.toml
Hệ thống cho phép bạn cấu hình ghi đè định dạng lưu trữ cho từng loại dữ liệu riêng biệt.
Ví dụ: Bạn muốn lưu tất cả dữ liệu dưới dạng Parquet để tiết kiệm dung lượng, nhưng riêng thư mục Báo cáo tài chính (financial) lại muốn xuất thẳng ra Excel để phòng kế toán dễ dàng đọc được.
Chỉ cần chỉnh sửa tệp pipeline.toml:
# ~/.vnstock/config/pipeline.toml
base_path = "/Users/admin/vnstock_db"
layout_mode = "flat"
default_format = "parquet"
[format_overrides]
financial = "excel" # Ghi đè: Riêng BCTC tự động xuất ra Excel
trades = "csv" # Ghi đè: Riêng khớp lệnh tự động xuất ra CSV3. Xây dựng quy trình riêng bằng mã Python
Bên cạnh các tác vụ có sẵn, bạn có thể tự lắp ráp một "dây chuyền" xử lý dữ liệu riêng (Custom Pipeline) bằng cách kết hợp các thành phần qua Trình điều phối (Scheduler).
Trình thu thập tùy chỉnh (Custom Fetcher)
Dùng khi bạn muốn kết nối với nguồn dữ liệu bên ngoài hệ thống Vnstock hoặc thêm các cột dữ liệu riêng ngay khi vừa tải về.
from vnstock_pipeline.template.vnstock import VNFetcher
import pandas as pd
class ThuThapDuLieuRieng(VNFetcher):
def _vn_call(self, ticker: str, **kwargs) -> pd.DataFrame:
from vnstock_data.ui.market import Market
# Tải dữ liệu từ Vnstock Data
market = Market(source="vci").equity(ticker)
df = market.history(start="2024-01-01", end="2026-06-17", interval="1D")
# Thêm cột đánh dấu nguồn dữ liệu riêng của bạn
df['nguon_du_lieu'] = "he_thong_noi_bo"
return dfTrình biến đổi tùy chỉnh (Custom Transformer)
Dùng khi bạn muốn làm sạch dữ liệu theo quy tắc riêng, hoặc tự động tính toán thêm các chỉ báo kỹ thuật (ví dụ: SMA, RSI) trước khi lưu.
from vnstock_pipeline.template.vnstock import VNTransformer
import pandas as pd
class TinhToanChiBao(VNTransformer):
def transform(self, data: pd.DataFrame) -> pd.DataFrame:
df = super().transform(data)
# Tính toán đường trung bình động 20 ngày (SMA20)
if len(df) > 20:
df['sma_20'] = df['close'].rolling(20).mean()
return dfĐẩy dữ liệu lên Cloud (Custom Exporter)
Nếu bạn không muốn lưu tệp vào máy tính mà muốn tự động đẩy thẳng lên các dịch vụ đám mây (như AWS S3, Google Cloud), bạn có thể tạo Trình xuất tệp riêng.
from vnstock_pipeline.core.exporter import Exporter
from vnstock_pipeline.core.storage.config import StorageConfig
class AWSS3Exporter(Exporter):
def __init__(self):
# Hệ thống vẫn tự động nạp cấu hình thư mục từ pipeline.toml
self.config = StorageConfig.load()
def export(self, data, ticker: str, category: str, **kwargs):
# Tại đây, bạn viết mã để đẩy bảng dữ liệu 'data' lên tài khoản S3 của mình
pass4. Đọc dữ liệu đã xuất chuẩn xác
Sau khi dữ liệu được tải về máy, thay vì viết cứng đường dẫn (như C:/data/ACB.parquet) khiến mã nguồn dễ bị lỗi khi chạy trên máy khác, hãy dùng lớp cấu hình của hệ thống:
import pandas as pd
from vnstock_pipeline.core.storage.config import StorageConfig
# Tự động đọc cấu hình từ tệp pipeline.toml
config = StorageConfig.load()
# Tự động giải quyết đường dẫn tuyệt đối dù bạn chạy ở bất kỳ máy tính nào
base_path = config.resolve_base_path()
# Đọc tệp dữ liệu đã tải
file_path = base_path / "ohlcv" / "ACB.parquet"
df = pd.read_parquet(file_path)
Thảo luận