| Bài 2: Kỹ Nghệ Đặc Trưng (Feature Engineering) – Biến Dữ Liệu Thô Thành Tín Hiệu Giao Dịch

Được viết bởi thanhdt vào ngày 05/06/2026 lúc 14:43 | 33 lượt xem

Bài 2: Kỹ Nghệ Đặc Trưng (Feature Engineering) – Biến Dữ Liệu Thô Thành Tín Hiệu Giao Dịch

Chào mừng bạn trở lại với chuỗi bài viết “Xây Dựng Hệ Thống Machine Learning Trading Chuyên Nghiệp” của DNT Academy. Ở [Bài 1], chúng ta đã thành công trong việc trích xuất hàng triệu dòng dữ liệu Tick Data và OHLCV (Mở, Cao, Thấp, Đóng, Volume) từ nền tảng MT5.

Tuy nhiên, nếu bạn “tọng” nguyên đống dữ liệu thô này vào một mô hình AI (như Random Forest hay Neural Network), mô hình sẽ học rất tệ. Tại sao? Vì bản chất giá là những chuỗi thời gian ngẫu nhiên (Random Walk). Để AI có thể nhận diện được xu hướng, chúng ta cần phải thực hiện Feature Engineering (Kỹ Nghệ Đặc Trưng).


1. Feature Engineering trong Algo Trading là gì?

Nói một cách dễ hiểu, Feature Engineering là quá trình chế biến nguyên liệu thô (OHLCV) thành các “món ăn” (Đặc trưng – Features) mà thuật toán Machine Learning có thể dễ dàng “tiêu hóa” và phân tích.

Thay vì đưa cho AI xem giá đóng cửa hôm nay là 2015.45, chúng ta sẽ đưa cho AI các thông tin ý nghĩa hơn:
Động lượng: Giá đang nằm trên hay dưới đường trung bình 50 phiên (SMA 50)?
Quá mua/Quá bán: Chỉ báo RSI đang ở mức 75 (Quá mua) hay 25 (Quá bán)?
Biến động: Độ rộng của dải Bollinger Bands đang co thắt hay mở rộng?


2. Tính toán Moving Average (SMA, EMA) bằng Python

Moving Average (Trung bình động) là chỉ báo nền tảng nhất. Chúng ta sẽ sử dụng thư viện pandas_ta – một vũ khí cực kỳ sắc bén của dân Quant.

import pandas as pd
import pandas_ta as ta

# Giả sử df là DataFrame chứa dữ liệu OHLCV từ Bài 1
# Tính SMA 20 và EMA 50
df.ta.sma(length=20, append=True)
df.ta.ema(length=50, append=True)

# Tạo đặc trưng (Feature) tín hiệu cắt nhau:
df['SMA20_cross_EMA50'] = (df['SMA_20'] > df['EMA_50']).astype(int)

💡 Ý nghĩa: Đặc trưng SMA20_cross_EMA50 mang giá trị 1 (Uptrend) hoặc 0 (Downtrend). AI sẽ học được trạng thái xu hướng thay vì chỉ nhìn vào mức giá.


3. Tạo Tín Hiệu Động Lượng (RSI & MACD)

RSI (Relative Strength Index) và MACD giúp AI hiểu được áp lực Mua/Bán hiện tại.

# Tính RSI chu kỳ 14
df.ta.rsi(length=14, append=True)

# Tính MACD (12, 26, 9)
df.ta.macd(fast=12, slow=26, signal=9, append=True)

# Tạo đặc trưng Phân loại (Categorical Features)
df['RSI_Overbought'] = (df['RSI_14'] > 70).astype(int)
df['RSI_Oversold'] = (df['RSI_14'] < 30).astype(int)

4. Đặc Trưng Trễ (Lag Features) – Bí Mật Của Time Series

Khi dự báo tương lai, AI cần biết “quá khứ”. Lag Features chính là việc bạn tịnh tiến các giá trị về trước. Ví dụ: Để dự đoán ngày mai, AI cần biết chỉ số RSI của ngày hôm qua và ngày hôm kia.

# Tạo Lag Features cho RSI (T-1, T-2)
df['RSI_14_Lag1'] = df['RSI_14'].shift(1)
df['RSI_14_Lag2'] = df['RSI_14'].shift(2)

# Tạo Return (Tỷ suất sinh lời)
df['Return'] = df['close'].pct_change()
df['Return_Lag1'] = df['Return'].shift(1)

5. Làm Sạch Dữ Liệu Trước Khi Huấn Luyện

Sau khi áp dụng các tính toán trên, bạn sẽ bị xuất hiện các giá trị NaN (Missing Values) ở những hàng đầu tiên do các chỉ báo cần chu kỳ để tính (VD: SMA 50 cần 50 ngày).

# Loại bỏ các hàng chứa NaN
df.dropna(inplace=True)

# Xem kết quả sau khi Feature Engineering
print(df.tail())

🎯 Tổng kết Bài 2

Bạn vừa thực hiện xong bước quan trọng bậc nhất trong Data Science: Biến dữ liệu “chết” thành tín hiệu “sống”.

Bây giờ, DataFrame của bạn đã dày đặc các cột chỉ báo giá trị: SMA, EMA, RSI, MACD, Lag_Features. Vũ khí đã sẵn sàng!

Bài 3, chúng ta sẽ chính thức mang bộ dữ liệu hoàn hảo này đưa vào lò luyện đan, sử dụng thuật toán XGBoost để xây dựng Mô hình dự đoán Xu hướng giá (Tăng/Giảm) với độ chính xác cao.

🎓 DNT Academy – Hệ Thống Đào Tạo Thuật Toán & Data Science Thực Chiến
👉 Hãy tiếp tục theo dõi series này để tự tay xây dựng hệ thống Giao dịch định lượng cho riêng mình!