🧠 KHÓA HỌC DEEP REINFORCEMENT LEARNING TRADING (TRADEMASTER) BÀI 3 / 4
TradeMaster DRL Series • Bài 3

Khóa Học Deep RL Trading (Phần 3): DRL Quản Lý Danh Mục Đầu Tư Đa Tài Sản & Mô Hình SARL

Nếu việc giao dịch một mã cổ phiếu hay hợp đồng tương lai đơn lẻ bằng DRL giống như lái một chiếc xe đua trên đường thẳng, thì quản lý danh mục đầu tư đa tài sản (Portfolio Management) lại giống như việc chỉ huy một dàn nhạc giao hưởng. Agent không chỉ phải quyết định mua hay bán một mã, mà phải liên tục giải bài toán phân bổ động một vector trọng số tài sản $\mathbf{w}_t = [w_{t,0}, w_{t,1}, \dots, w_{t,m}]^T$ thỏa mãn điều kiện:

\sum_{i=0}^m w_{t,i} = 1.0 \quad \text{và} \quad w_{t,i} \ge 0 \quad (\text{với } w_{t,0} \text{ là tiền mặt})

Trong bài viết thứ 3 của chuỗi TradeMaster, chúng ta sẽ đi sâu vào 2 phát kiến lớn giải quyết bài toán bùng nổ chiều không gian (Curse of Dimensionality) và thay đổi chế độ thị trường (Regime Shift): Mạng nơ-ron tích chập chia sẻ trọng số EIIE và Mô hình học tăng cường tăng cường trạng thái SARL.

1. Thách Thức Khi Đưa DRL Vào Quản Trị Danh Mục Đa Tài Sản

Khi số lượng tài sản trong danh mục tăng lên (từ $m=5$ đến $m=50$ mã), các thuật toán Reinforcement Learning truyền thống đối mặt với 3 rào cản nghiêm trọng:

Rào Cản 1: Bùng Nổ Tham Số
Curse of Dimensionality
Nếu dùng mạng MLP nối tất cả các chuỗi nến của $m$ tài sản vào một vector phẳng, số lượng trọng số bùng nổ theo cấp số nhân, dẫn đến over-fitting nặng và thời gian huấn luyện kéo dài bất tận.
Rào Cản 2: Chi Phí Tái Cân Bằng
Turnover & Slippage Cost
Nếu không được phạt nghiêm ngặt, Agent có xu hướng xáo trộn 100% danh mục tại mỗi cây nến, khiến toàn bộ lợi nhuận lý thuyết bị nuốt chửng bởi phí giao dịch và trượt giá.
Rào Cản 3: Tương Quan Động
Regime Shift & Correlation
Ma trận tương quan giữa các tài sản không đứng yên. Trong các cuộc khủng hoảng thanh khoản, hệ số tương quan giữa các nhóm ngành có thể nhảy vọt từ 0.2 lên 0.9.

2. Kiến Trúc EIIE (Ensemble Identical Independent Evaluator)

Kiến trúc EIIE (được khởi xướng bởi Jiang et al. và chuẩn hóa trong TradeMaster) là đột phá then chốt giúp loại bỏ hiện tượng bùng nổ tham số mạng nơ-ron:

3. Mô Hình SARL (State-Augmented Reinforcement Learning)

Một điểm yếu cố hữu của DRL là "tầm nhìn đường hầm" (Tunnel Vision): Agent chỉ nhìn vào dữ liệu giá nội tại của từng cổ phiếu mà bỏ qua bức tranh vĩ mô tổng thể. Khi Cục Dự trữ Liên bang (Fed) tăng lãi suất bất ngờ hoặc chỉ số VIX bật tăng 40%, các mô hình RL thông thường sẽ phản ứng rất chậm chạp.

TradeMaster phát triển mô hình SARL (State-Augmented RL) với cơ chế phân tách không gian trạng thái thành 2 phần độc lập:

Mạng nơ-ron của SARL sử dụng một bộ mã hóa tự động (Auto-encoder / Transformer Encoder) để nén thông tin vĩ mô thành một vector biểu diễn chế độ thị trường (Market Regime Latent Vector) $\mathbf{z}_t$, sau đó hòa trộn (concatenate) vào lớp fully-connected của mạng Actor trước khi đưa ra quyết định phân bổ vốn.

4. Học Bắt Chước Nhà Đầu Tư (Investor-Imitator)

Quá trình khởi tạo trọng số ngẫu nhiên ban đầu của DRL thường tạo ra các chính sách phi thực tế (ví dụ: liên tục bán tháo đáy và mua đỉnh trong 100 epoch đầu tiên). TradeMaster tích hợp cơ chế Investor-Imitator:

  1. Giai đoạn 1 — Pre-training bằng Behavior Cloning (Học Bắt Chước): Agent được huấn luyện giám sát (Supervised Learning) trên các quyết định phân bổ lịch sử của các chiến lược định lượng cổ điển thành công (như Risk Parity, Mean-Variance Markowitz, hoặc Momentum Quintile).
  2. Giai đoạn 2 — Fine-tuning bằng DRL: Sau khi đã đạt được nền tảng giao dịch ổn định, Agent bắt đầu chuyển sang chế độ tương tác tự do với môi trường Gymnasium để khám phá những cơ hội Alpha siêu việt mà các quy tắc tĩnh không thể nắm bắt.

5. Sơ Đồ Kiến Trúc Mạng Phân Bổ Danh Mục EIIE

Sơ đồ sau đây minh họa luồng xử lý tensor của kiến trúc EIIE từ ma trận giá lịch sử $m$ tài sản đến vector phân bổ trọng số cuối cùng:

KIẾN TRÚC MẠNG TÍCH CHẬP CHIA SẺ TRỌNG SỐ EIIE CHO DANH MỤC Xử lý song song ma trận chuỗi nến thời gian đa tài sản và xuất vector Softmax Portfolio TENSOR DỮ LIỆU ĐẦU VÀO Tài sản 1: [VHM] Tensor (T×F) Tài sản 2: [HPG] Tensor (T×F) Tài sản 3: [FPT] Tensor (T×F) Tài sản m: [Vàng] Tensor (T×F) T = 50 nến quá khứ, F = 5 giá EIIE SHARED BACKBONE Lớp Conv1D / Dilated Conv Trích xuất đặc trưng động lượng Lớp LSTM / Temporal Conv Học phụ thuộc chuỗi thời gian Nhúng Trọng Số Cũ w_{t-1} Kiểm soát phí xoay vòng vốn Dùng chung tham số cho mọi mã SOFTMAX PORTFOLIO VECTOR w_0 (Tiền mặt Cash): 25.0% w_1 (VHM): 20.0% w_2 (HPG): 15.0% w_3 (FPT): 30.0% w_m (Vàng): 10.0% Tổng vector: ∑ w_i = 100%

6. Triển Khai Code Mạng EIIE PyTorch Hoàn Chỉnh

Dưới đây là mã nguồn Python triển khai lớp mạng nơ-ron EIIEPortfolioNet với tích chập 1D và chuẩn hóa Softmax theo đúng thông số chuẩn của TradeMaster:

import torch import torch.nn as nn import torch.nn.functional as F class EIIEPortfolioNet(nn.Module): """ Mạng nơ-ron Ensemble Identical Independent Evaluator (EIIE) cho danh mục đa tài sản. Đầu vào: Tensor (Batch, Num_Assets, Features, Window_Size) Đầu ra: Vector phân bổ tỷ trọng (Batch, Num_Assets + 1) [Gồm cả Tiền mặt] """ def __init__(self, num_features: int = 5, window_size: int = 50): super().__init__() # Lớp tích chập 2D xử lý từng tài sản độc lập nhưng dùng chung trọng số (Shared Weights) self.conv1 = nn.Conv2d(in_channels=num_features, out_channels=32, kernel_size=(1, 3)) self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=(1, window_size - 2)) # Lớp nén điểm số tiềm ẩn cho mỗi tài sản (kết hợp với trọng số cũ w_{t-1}) self.fc_score = nn.Linear(64 + 1, 1) # Điểm số thiên vị cho tiền mặt (Cash Bias) self.cash_bias = nn.Parameter(torch.zeros(1)) def forward(self, x: torch.Tensor, prev_weights: torch.Tensor) -> torch.Tensor: """ x shape: (B, M, F, T) -> Hoán vị thành (B, F, M, T) prev_weights shape: (B, M) [Tỷ trọng cổ phiếu ở bước trước] """ B, M, F_dim, T = x.shape x = x.permute(0, 2, 1, 3) # (B, F, M, T) h = F.relu(self.conv1(x)) h = F.relu(self.conv2(h)) # Shape: (B, 64, M, 1) h = h.squeeze(-1).permute(0, 2, 1) # Shape: (B, M, 64) # Nối thêm trọng số cũ của từng tài sản để kiểm soát phí xoay vòng prev_w_expanded = prev_weights.unsqueeze(-1) # (B, M, 1) h = torch.cat([h, prev_w_expanded], dim=-1) # (B, M, 65) asset_scores = self.fc_score(h).squeeze(-1) # (B, M) # Ghép điểm số tiền mặt ở cột đầu tiên: [Cash_Score, Score_1, Score_2, ...] cash_scores = self.cash_bias.expand(B, 1) all_scores = torch.cat([cash_scores, asset_scores], dim=-1) # (B, M + 1) # Chuẩn hóa Softmax để đảm bảo tổng tỷ trọng đúng 1.0 portfolio_weights = F.softmax(all_scores, dim=-1) return portfolio_weights
💡
TỔNG KẾT BÀI HỌC: Quản lý danh mục DRL bằng EIIE cho phép tối ưu hóa đồng thời hàng chục tài sản mà không lo bùng nổ số lượng tham số, trong khi SARL bảo vệ tài khoản khỏi những cú sốc vĩ mô bất ngờ. Trong Phần 4 tiếp theo (bài cuối cùng), chúng ta sẽ bước vào thế giới tần suất cao (High-Frequency Trading) với các thuật toán Tối Ưu Hóa Khớp Lệnh (Optimal Execution) và Tạo Lập Thị Trường DRL (Market Making)!
🧠

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.