Trong thực tế tại các quỹ phòng hộ (Hedge Funds) và công ty giao dịch định lượng cao tần (Proprietary Trading Firms), việc tìm ra tín hiệu giao dịch Alpha mới chỉ là 50% câu chuyện. Thách thức sống còn còn lại là thực thi lệnh (Execution): Làm sao để bán 10.000.000 cổ phiếu hoặc 5.000 hợp đồng phái sinh trong vòng 2 tiếng mà không làm sập giá thị trường?
Nếu bạn xả toàn bộ lệnh thị trường (Market Order) trong một giây, bạn sẽ phải trả giá bằng một cú trượt giá kinh hoàng (Market Impact & Slippage). Mặt khác, nếu bạn treo lệnh giới hạn (Limit Order) quá chậm chạp, bạn đối mặt với rủi ro giá di chuyển ngược hướng (Timing Risk). Bài viết cuối cùng của chuỗi TradeMaster sẽ khám phá cấp độ vi mô của thị trường tài chính: Thuật toán DRL Tối ưu hóa khớp lệnh (Optimal Execution) và DRL Tạo lập thị trường (Market Making) trên sổ lệnh Limit Order Book (LOB).
1. Bài Toán Tối Ưu Khớp Lệnh & Giới Hạn Của TWAP/VWAP
Bài toán thanh lý danh mục tối ưu (Optimal Liquidation) được phát biểu: Cần bán hết khối lượng $V_0$ cổ phiếu trong khoảng thời gian $T$, chia thành $N$ bước thời gian $t_1, t_2, \dots, t_N$ sao cho tổng chi phí trượt giá và rủi ro biến động là nhỏ nhất:
Giải Pháp Truyền Thống 1
TWAP (Time-Weighted)
Chia đều khối lượng $v_t = V_0 / N$ tại mỗi bước thời gian cố định. Cực kỳ thụ động và dễ bị các bot săn mồi (predatory bots) phát hiện quy luật để kê lệnh ép giá.
Giải Pháp Truyền Thống 2
VWAP (Volume-Weighted)
Phân bổ khối lượng theo hồ sơ thanh khoản lịch sử (U-shape curve). Thất bại khi thị trường xuất hiện tin tức đột xuất khiến đường cong thanh khoản bị méo mó.
Giải Pháp DRL Hiện Đại
DRL Smart Slicing (OPPO)
Đọc cấu trúc sổ lệnh vi mô LOB theo mili-giây, ước tính áp lực mua bán để cắt khối lượng $v_t$ linh hoạt, giảm tới 35-40% chi phí trượt giá so với TWAP.
2. Mô Hình Almgren-Chriss & Sự Nâng Cấp Của TradeMaster DRL
Mô hình toán học kinh điển Almgren-Chriss (2000) giả định tác động thị trường gồm 2 thành phần độc lập:
Tác động vĩnh viễn (Permanent Market Impact): $g(v_t) = \gamma v_t$ làm dịch chuyển vĩnh viễn giá cân bằng của thị trường.
Tác động tức thời (Temporary Market Impact): $h(v_t) = \eta v_t$ phản ánh việc nuốt chửng các mức giá chờ trên sổ lệnh LOB, giá sẽ hồi phục ngay sau khi lệnh kết thúc.
Tuy nhiên, Almgren-Chriss giả định biến động giá $\sigma$ và hệ số thanh khoản $\eta$ là hằng số — điều hoàn toàn sai lệch trong thực tế. TradeMaster giới thiệu thuật toán OPPO (Order-execution Proximal Policy Optimization) và ETTO (Execution Transformer):
Quan sát trạng thái LOB động: Nhận diện độ mất cân bằng sổ lệnh (Order Book Imbalance - OBI) tại 10 bước giá mua/bán tốt nhất ($Bid_1 \dots Bid_{10}, Ask_1 \dots Ask_{10}$).
Quyết định tỷ lệ xả lệnh linh hoạt: Khi phát hiện có "bức tường mua" (Buy Wall) lớn xuất hiện, Agent lập tức tăng tốc khớp lệnh $v_t$; khi thanh khoản mỏng, Agent chủ động giảm tốc độ hoặc tạm dừng để bảo toàn giá.
3. DRL Tạo Lập Thị Trường (Market Making) & Quản Trị Rủi Ro Tồn Kho
Nhà tạo lập thị trường (Market Maker) kiếm lợi nhuận từ việc liên tục đặt đồng thời lệnh Mua giới hạn ($Bid$) và Bán giới hạn ($Ask$) để ăn chênh lệch giá (Bid-Ask Spread). Tuy nhiên, rủi ro tử huyệt của Market Maker là:
Lựa chọn bất lợi (Adverse Selection): Bị khớp lệnh bởi các nhà giao dịch nội gián (Informed Traders) ngay trước khi giá lao dốc không phanh.
Rủi ro tồn kho (Inventory Risk): Tích lũy quá nhiều cổ phiếu trong tay khi thị trường bước vào pha giảm mạnh.
Khung nghiên cứu Avellaneda-Stoikov giải quyết bằng việc tính toán mức giá tham chiếu đặt lệnh dựa trên lượng tồn kho $q$:
r(s, q, t) = s - q \cdot \gamma \sigma^2 (T - t)
Trong đó $\gamma$ là mức độ e ngại rủi ro, $\sigma^2$ là phương sai giá. Khi lượng hàng tồn kho $q > 0$ (đang giữ quá nhiều hàng), mức giá tham chiếu $r$ bị kéo xuống dưới giá thị trường $s$, buộc bot phải đặt giá Ask thấp hơn để xả hàng và đặt giá Bid thấp hơn để hạn chế mua thêm.
Trong TradeMaster, DRL Agent học trực tiếp chính sách định giá spread $\delta_a, \delta_b$ dựa trên dòng lệnh vi mô mà không cần giả định phân phối Poisson hay chuyển động Brown hình học.
4. Sơ Đồ Kiến Trúc Luồng Khớp Lệnh Vi Mô LOB Bằng DRL
Dưới đây là sơ đồ xử lý của DRL Execution Engine trong TradeMaster tương tác với Limit Order Book:
5. Triển Khai Code Mô Phỏng Thực Thi Lệnh LOB Với Gymnasium
Dưới đây là mã nguồn Python mô phỏng môi trường khớp lệnh tối ưu theo mô hình Almgren-Chriss động, nơi Agent nhận phần thưởng âm bằng với chi phí trượt giá sinh ra:
import gymnasium as gym
from gymnasium import spaces
import numpy as np
classOptimalExecutionEnv(gym.Env):
"""
Môi trường Gymnasium mô phỏng bài toán thanh lý lệnh lô lớn (Optimal Order Liquidation)
"""def__init__(self, total_shares: float = 100_000.0, total_steps: int = 60):
super().__init__()
self.total_shares = total_shares
self.total_steps = total_steps
# Hành động: Tỷ lệ khối lượng cần bán ở bước hiện tại [0.0 (không bán) đến 1.0 (bán hết tồn dư)]
self.action_space = spaces.Box(low=0.0, high=1.0, shape=(1,), dtype=np.float32)
# Trạng thái: [Tồn kho còn lại (%), Thời gian còn lại (%), Biến động giá tức thời, Độ mất cân bằng LOB (OBI)]
self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(4,), dtype=np.float32)
self.reset()
defreset(self, seed=None, options=None):
super().reset(seed=seed)
self.current_step = 0
self.remaining_shares = self.total_shares
self.mid_price = 100.0return self._get_obs(), {}
def_get_obs(self):
inventory_ratio = self.remaining_shares / self.total_shares
time_ratio = (self.total_steps - self.current_step) / self.total_steps
current_volatility = np.random.normal(loc=0.02, scale=0.005)
lob_imbalance = np.random.uniform(-0.5, 0.5) # Order Book Imbalancereturn np.array([inventory_ratio, time_ratio, current_volatility, lob_imbalance], dtype=np.float32)
defstep(self, action):
action_ratio = float(np.clip(action[0], 0.0, 1.0))
# Nếu ở bước cuối cùng, buộc phải bán hết sạch toàn bộ tồn dưif self.current_step >= self.total_steps - 1:
shares_to_sell = self.remaining_shares
else:
shares_to_sell = self.remaining_shares * action_ratio
# Mô hình hóa tác động thị trường (Market Impact) phi tuyến
temp_impact = 0.0001 * (shares_to_sell ** 0.6)
perm_impact = 0.00005 * shares_to_sell
execution_price = self.mid_price - temp_impact
slippage_cost = shares_to_sell * (self.mid_price - execution_price)
# Cập nhật trạng thái thị trường
self.mid_price -= perm_impact + np.random.normal(0, 0.05)
self.remaining_shares -= shares_to_sell
self.current_step += 1# Hàm thưởng âm: Phạt trượt giá + Phạt tồn kho quá lớn ở cuối chu kỳ
reward = -slippage_cost - (0.1 * (self.remaining_shares / self.total_shares) ** 2)
done = (self.current_step >= self.total_steps) or (self.remaining_shares <= 1e-5)
return self._get_obs(), float(reward), done, False, {"slippage": slippage_cost}
🏆
CHÚC MỪNG BẠN ĐÃ HOÀN THÀNH KHÓA HỌC TRADEMASTER DRL: Bạn đã đi qua hành trình trọn vẹn từ kiến trúc nền tảng Gymnasium, thuật toán cốt lõi (Rainbow DQN, PPO, SAC), quản trị danh mục đa tài sản (EIIE, SARL) đến cấp độ vi mô khớp lệnh và tạo lập thị trường (Optimal Execution & Market Making). Hãy kết hợp kiến thức này với các khóa học bổ trợ tại Học Viện Giao Dịch để thiết kế các hệ thống giao dịch tự động đẳng cấp quỹ đầu tư!
🧠
Biên Soạn: Học Viện Giao Dịch — Hàng Hóa Plus
Chuỗi bài giảng TradeMaster DRL được phát triển dựa trên nền tảng nghiên cứu học tăng cường sâu của NTU và phòng lab Agent Mediated Intelligence.