🤖 KHÓA HỌC QUANT TRADING & THUẬT TOÁN (ELITEQUANT FRAMEWORK) BÀI 2 / 5
ĐỊNH LƯỢNG & THUẬT TOÁN ĐỈNH CAO

Khóa Học Quant Trading (Phần 2): Cơ Sở Hạ Tầng Dữ Liệu Lớn & Thư Viện Toán - Định Lượng Chuyên Sâu

MỤC LỤC BÀI HỌC (PHẦN 2)

1. Phân Tầng Dữ Liệu Tài Chính: Từ EOD Đến Sổ Lệnh Level 3

Dữ liệu chính là dòng máu nuôi dưỡng toàn bộ cỗ máy Quant Trading. Trong kho lưu trữ EliteQuant, dữ liệu tài chính không đơn thuần chỉ là giá đóng cửa (Close Price) mà được phân chia thành 4 cấp độ phân giải từ thô đến cực mịn:

CẤP ĐỘ 1: EOD DATA
End of Day (Giá ngày)
Mỗi ngày 1 dòng: Open, High, Low, Close, Volume. Phù hợp cho chiến lược đầu tư dài hạn, Rebalancing danh mục theo quý hoặc quét đa tài sản vĩ mô.
CẤP ĐỘ 2: INTRADAY BARS
Thanh Nến Trong Ngày
Khung thời gian 1 phút, 5 phút, 1 giờ. Phù hợp cho chiến lược lướt sóng trong ngày (Day Trading), Breakout hoặc Swing Trading tần suất vừa.
CẤP ĐỘ 3: TICK DATA
Time & Sales (Khớp Lệnh)
Ghi nhận từng lệnh giao dịch đơn lẻ khớp thành công: Timestamp nano-giây, giá khớp, khối lượng và cờ Bid/Ask. Kích thước hàng gigabyte mỗi ngày.
CẤP ĐỘ 4: LOB LEVEL 2/3
Limit Order Book Depth
Độ sâu sổ lệnh: Toàn bộ danh sách hàng chờ mua/bán ở các mức giá khác nhau. Cho phép tính toán mất cân bằng cung cầu vi mô (Order Book Imbalance).

2. Tại Sao SQL Truyền Thống Thất Bại? Giải Pháp Man AHL Arctic & Parquet

Nhiều kỹ sư phần mềm khi bước sang làm Quant thường cố gắng lưu trữ dữ liệu Tick vào PostgreSQL hoặc MySQL. Sau vài tháng, cơ sở dữ liệu phình to lên hàng trăm triệu dòng lệnh, câu truy vấn SELECT ... WHERE timestamp BETWEEN ... mất hàng phút để phản hồi, cây chỉ mục B-Tree trở nên quá tải.

💡
GIẢI PHÁP TỪ MAN AHL (ARCTIC): Man Group (quỹ đầu cơ định lượng quản lý hơn 150 tỷ USD) đã giải quyết triệt để bài toán này bằng cách phát hành thư viện mã nguồn mở Arctic (được đề xuất trong EliteQuant). Arctic lưu trữ chuỗi thời gian dưới dạng các khối nhị phân nén (Chuncked Binary BSON/Parquet) đặt trên MongoDB hoặc S3, cho phép đọc ghi hàng triệu điểm dữ liệu mỗi giây với khả năng Versioning (quản lý phiên bản dữ liệu) chống ghi đè lỗi.

Ngoài ra, định dạng tệp Apache Parquet lưu trữ theo cột (Columnar Storage) kèm thuật toán nén Snappy/ZSTD là tiêu chuẩn vàng ngày nay. Nó giúp nén 80% dung lượng đĩa so với CSV và tăng tốc độ đọc dữ liệu của Pandas lên gấp 30–50 lần.

KIẾN TRÚC HẠ TẦNG BIG DATA & THƯ VIỆN TOÁN ĐỊNH LƯỢNG (QUANT STACK) HIGH SPEED TẦNG 1: NGUỒN DỮ LIỆU • Interactive Brokers Tick Stream • Quandl / IEX Cloud / Yahoo • Sàn Crypto WebSocket (CCXT) • EOD, Minute Bar, Raw Tick, LOB >> Ingestion Engine (Socket/REST) TẦNG 2: LƯU TRỮ HIỆU NĂNG • Man AHL Arctic (MongoDB/BSON) • Apache Parquet (Snappy/ZSTD) • HDF5 Hierarchical Format • Nén 80% dung lượng, đọc x40 >> Versioned Time-Series Data TẦNG 3: TÍNH TOÁN ĐỊNH LƯỢNG • NumPy / Pandas Vectorized • Statsmodels (ADF, Cointegration) • Thư viện ARCH (GARCH Models) • QuantLib (Option, Yield Curve) >> Alpha Modeling & Sizing Mục tiêu tối thượng: Dữ liệu vào sạch và chuẩn $\rightarrow$ Khắc phục hoàn toàn lỗi hồi quy ngụy tạo và độ trễ truy vấn.

3. Phân Tích Chuỗi Thời Gian: Kiểm Định Tính Dừng (Stationarity & ADF Test)

Một sai lầm chết người của người mới bắt đầu làm Machine Learning hoặc thống kê trong tài chính là đưa trực tiếp chuỗi Giá cổ phiếu (Raw Price) vào các mô hình hồi quy (OLS, Linear Regression).

⚠️
HIỆN TƯỢNG HỒI QUY NGỤY TẠO (SPURIOUS REGRESSION): Chuỗi giá tài sản tài chính là chuỗi không dừng (Non-Stationary, tích hợp bậc 1 $I(1)$), tức là giá trị trung bình (Mean) và phương sai (Variance) liên tục thay đổi theo thời gian. Khi đưa 2 chuỗi không dừng vào mô hình hồi quy, $R^2$ có thể lên tới 98% dù thực chất hai cổ phiếu đó chẳng có bất kỳ liên hệ kinh tế nào với nhau!

Để một mô hình định lượng hoạt động chính xác, dữ liệu đầu vào bắt buộc phải đạt Tính dừng (Stationarity): Giá trị trung bình, phương sai và hàm tự tương quan không đổi theo thời gian.

Tiêu chuẩn vàng để kiểm tra tính dừng là Kiểm định Augmented Dickey-Fuller (ADF Test):

4. Đột Phá Marcos López de Prado: Sai Phân Bậc Phân Số (Fractional Differentiation)

Cách truyền thống để biến chuỗi giá không dừng thành chuỗi dừng là lấy Sai phân bậc 1 (First Difference) hoặc tính tỷ suất sinh lời Log:

$r_t = \ln(P_t) - \ln(P_{t-1}) = \Delta P_t$

Tuy nhiên, huyền thoại Quant Marcos López de Prado (tác giả Advances in Financial Machine Learning) đã chỉ ra một nghịch lý: Khi bạn lấy sai phân nguyên bậc 1 ($d=1$), bạn đạt được tính dừng nhưng đã xóa sổ sạch toàn bộ trí nhớ dài hạn (Memory) của chuỗi giá — điều kiện tiên quyết để dự báo xu hướng!

Giải pháp mang tính cách mạng là Sai phân bậc phân số (Fractional Differentiation): Thay vì chọn $d=1$ (mất trí nhớ) hoặc $d=0$ (không dừng), ta tìm một số thực $d$ tối ưu (ví dụ: $d = 0.35$ đến $0.45$) sao cho chuỗi vừa đủ vượt qua kiểm định ADF Test ($p < 0.05$) nhưng vẫn bảo lưu tới 80% mối quan hệ tương quan dài hạn của dữ liệu gốc!

5. Mô Hình Hóa Biến Động: ARCH/GARCH & Định Cỡ Vị Thế Theo Volatility

Trong tài chính, độ biến động (Volatility) có một đặc tính then chốt được phát hiện bởi nhà kinh tế học đoạt giải Nobel Robert Engle: Biến động tụ cụm (Volatility Clustering). Những ngày biến động mạnh thường kéo theo những ngày biến động dữ dội tiếp theo; những thời kỳ yên ắng thường kéo dài liên tục.

Mô hình GARCH(1,1) (Generalized Autoregressive Conditional Heteroskedasticity) mô hình hóa phương sai có điều kiện $\sigma_t^2$ tại thời điểm $t$ dựa trên 3 thành phần:

$\sigma_t^2 = \omega + \alpha \epsilon_{t-1}^2 + \beta \sigma_{t-1}^2$

Trong đó $\omega$ là hằng số phương sai dài hạn, $\epsilon_{t-1}^2$ là cú sốc lợi nhuận của phiên trước (thành phần ARCH), và $\sigma_{t-1}^2$ là phương sai dự báo của phiên trước (thành phần GARCH).

Ứng dụng thực chiến trong Quant Trading: Khi mô hình GARCH dự báo độ biến động ngày mai sẽ tăng vọt lên mức nguy hiểm, hệ thống định cỡ vị thế (Position Sizing) sẽ tự động thu hẹp khối lượng lệnh (Contract Size) xuống một nửa để giữ cho mức chịu rủi ro danh mục (VaR - Value at Risk) luôn không đổi.

6. Thư Viện Phái Sinh Kinh Điển QuantLib: Định Giá Quyền Chọn & Vol Surface

Nhắc đến thư viện định lượng đỉnh cao nhất mọi thời đại trong kho tài nguyên EliteQuant, không thể không nhắc đến QuantLib. Được viết bằng C++ thuần túy để tối ưu hóa hiệu năng microsecond và có bản đóng gói Python wrapper (QuantLib-Python), QuantLib là vũ khí của các ngân hàng đầu tư hàng đầu thế giới (Goldman Sachs, Morgan Stanley, J.P. Morgan) trong việc:

import numpy as np import pandas as pd from statsmodels.tsa.stattools import adfuller from arch import arch_model # 1. Kiểm định tính dừng Augmented Dickey-Fuller (ADF Test) def check_stationarity(series, name="Series"): result = adfuller(series.dropna()) adf_stat, p_value = result[0], result[1] print(f"=== KIỂM ĐỊNH TÍNH DỪNG ADF CHO {name} ===") print(f"ADF Statistic: {adf_stat:.4f} | p-value: {p_value:.4e}") if p_value < 0.05: print("=> Bác bỏ H0: Chuỗi ĐẠT tính dừng (Stationary). Sẵn sàng mô hình hóa!") else: print("=> Chấp nhận H0: Chuỗi KHÔNG dừng (Non-Stationary). Cần lấy sai phân!") # 2. Ước lượng mô hình dự báo biến động GARCH(1,1) def fit_garch_volatility(returns): # returns dạng phần trăm: r * 100 am = arch_model(returns * 100, vol='Garch', p=1, q=1, dist='Normal') res = am.fit(disp='off') forecast = res.forecast(horizon=1) next_day_vol = np.sqrt(forecast.variance.values[-1, 0]) print(f"Dự báo biến động GARCH(1,1) ngày kế tiếp: {next_day_vol:.2f}%") return next_day_vol
💡
TỔNG KẾT BÀI HỌC: Một cỗ máy Quant vững chắc đòi hỏi một tầng dữ liệu sạch và các công cụ toán học nghiêm ngặt. Khi đã làm chủ dữ liệu và tính dừng, chúng ta sẽ bước sang Phần 3: Khám phá các Chiến Lược Định Lượng Kinh Điển từ hai bậc thầy Dr. Ernie Chan và Robert Carver (Mean Reversion, Pairs Trading Cointegration và Trend Following).
🤖

Biên Soạn: Học Viện Giao Dịch — Hàng Hóa Plus

Chuỗi bài giảng chuyên sâu về Quantitative & Algorithmic Trading được nghiên cứu và chuẩn hóa dựa trên các chuẩn mực kiến trúc tài chính định lượng quốc tế.