Skip to main content

Xây dựng Module Chung Cho Phân Tích Định Lượng

· 3 min read

📌 Giới thiệu

Trong giao dịch định lượng (quantitative trading), việc có một module chung giúp tái sử dụng code, giảm lỗi và tăng hiệu suất là rất quan trọng. Module này có thể bao gồm các chức năng như:

  • Lấy dữ liệu tài chính từ nhiều nguồn (Yahoo Finance, Binance API, Alpha Vantage, etc.)
  • Tiền xử lý dữ liệu (Xử lý thiếu dữ liệu, chuẩn hóa, tạo đặc trưng)
  • Tính toán chỉ báo kỹ thuật (SMA, EMA, RSI, MACD, Bollinger Bands)
  • Thực hiện backtesting chiến lược giao dịch
  • Tối ưu và đánh giá mô hình giao dịch

🏗️ Thiết Kế Module

1️⃣ Cấu trúc thư mục dự án

Một dự án phân tích định lượng thường có cấu trúc như sau:

quant_trading_project/
│── data/ # Chứa dữ liệu tài chính
│── common/ # Module chung
│ ├── data_loader.py # Lấy dữ liệu từ API
│ ├── indicators.py # Tính toán các chỉ báo kỹ thuật
│ ├── utils.py # Các hàm tiện ích (helpers)
│── strategies/ # Chiến lược giao dịch
│── backtesting/ # Kiểm tra hiệu suất giao dịch
│── main.py # Chương trình chính
│── requirements.txt # Danh sách thư viện

2️⃣ Module data_loader.py – Lấy dữ liệu tài chính

import yfinance as yf
import pandas as pd

def get_stock_data(symbol, start="2023-01-01", end="2024-01-01"):
"""Lấy dữ liệu giá cổ phiếu từ Yahoo Finance"""
data = yf.download(symbol, start=start, end=end)
return data

# Ví dụ sử dụng
if __name__ == "__main__":
df = get_stock_data("AAPL")
print(df.head())

3️⃣ Module indicators.py – Tính toán các chỉ báo kỹ thuật

import pandas as pd

def calculate_sma(data, window=20):
"""Tính đường trung bình động SMA"""
return data["Close"].rolling(window=window).mean()

def calculate_rsi(data, window=14):
"""Tính RSI (Relative Strength Index)"""
delta = data["Close"].diff(1)
gain = (delta.where(delta > 0, 0)).rolling(window=window).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=window).mean()
rs = gain / loss
return 100 - (100 / (1 + rs))

# Ví dụ sử dụng
if __name__ == "__main__":
df = get_stock_data("AAPL")
df["SMA20"] = calculate_sma(df, window=20)
df["RSI14"] = calculate_rsi(df, window=14)
print(df.tail())

4️⃣ Module utils.py – Các hàm tiện ích chung

import numpy as np

def normalize_data(series):
"""Chuẩn hóa dữ liệu về khoảng [0, 1]"""
return (series - series.min()) / (series.max() - series.min())

def log_return(series):
"""Tính log return của giá đóng cửa"""
return np.log(series / series.shift(1))

# Ví dụ sử dụng
if __name__ == "__main__":
df = get_stock_data("AAPL")
df["Normalized Close"] = normalize_data(df["Close"])
df["Log Return"] = log_return(df["Close"])
print(df.head())

✅ Kết Luận

Module chung giúp tối ưu hóa quá trình phân tích định lượng bằng cách:
✔ Tự động hóa việc lấy dữ liệu
✔ Tính toán các chỉ báo kỹ thuật một cách hiệu quả
✔ Cung cấp các hàm tiện ích giúp tiền xử lý dữ liệu nhanh chóng

Module này có thể dễ dàng mở rộng bằng cách thêm các chỉ báo khác, hoặc tích hợp vào hệ thống giao dịch tự động. 🚀