Vnstock Logo

Tùy chỉnh Pipeline

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

Thảo luận

Mụ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:

  1. Tùy chỉnh nhanh qua giao diện dòng lệnh (CLI).
  2. Tùy chỉnh chuyên sâu qua tệp cấu hình pipeline.toml.
  3. 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ã:

Shell
# 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:

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 CSV

3. 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ề.

Python
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 df

Trì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.

Python
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.

Python
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
        pass

4. Đọ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:

Python
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

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