Skip to main content

Cách đánh giá hiệu suất mô hình giao dịch định lượng

· 6 min read

Đánh giá hiệu suất là một phần quan trọng trong phát triển mô hình giao dịch định lượng. Bài viết này sẽ hướng dẫn bạn các phương pháp và chỉ số để đánh giá hiệu suất của mô hình giao dịch một cách toàn diện.

Các chỉ số hiệu suất chính

1. Các chỉ số cơ bản

Tỷ suất lợi nhuận (Return)

Tỷ suất lợi nhuận là chỉ số cơ bản nhất để đánh giá hiệu suất của mô hình. Có hai loại lợi nhuận chính:

  1. Lợi nhuận tuyệt đối: Tổng lợi nhuận của danh mục
  2. Lợi nhuận tương đối: Lợi nhuận so với benchmark

So sánh lợi nhuận

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# Tính toán lợi nhuận
def calculate_returns(portfolio_values):
returns = portfolio_values.pct_change()
return returns

# Ví dụ
portfolio_values = pd.Series([100, 105, 110, 108, 115])
returns = calculate_returns(portfolio_values)
print("Lợi nhuận hàng ngày:")
print(returns)

Độ biến động (Volatility)

Độ biến động đo lường mức độ dao động của lợi nhuận. Đây là một chỉ số quan trọng để đánh giá rủi ro của mô hình.

Độ biến động theo thời gian

def calculate_volatility(returns, annualization_factor=252):
volatility = returns.std() * np.sqrt(annualization_factor)
return volatility

# Ví dụ
volatility = calculate_volatility(returns)
print(f"\nĐộ biến động hàng năm: {volatility:.2%}")

2. Các chỉ số nâng cao

Tỷ số Sharpe

Tỷ số Sharpe đo lường lợi nhuận điều chỉnh theo rủi ro. Công thức:

Sharpe Ratio = (R - Rf) / σ

Trong đó:

  • R: Lợi nhuận của danh mục
  • Rf: Lợi nhuận phi rủi ro
  • σ: Độ lệch chuẩn của lợi nhuận
def calculate_sharpe_ratio(returns, risk_free_rate=0.02, annualization_factor=252):
excess_returns = returns - risk_free_rate/annualization_factor
sharpe_ratio = np.sqrt(annualization_factor) * excess_returns.mean() / returns.std()
return sharpe_ratio

# Ví dụ
sharpe = calculate_sharpe_ratio(returns)
print(f"\nTỷ số Sharpe: {sharpe:.2f}")

Tỷ số Sortino

Tỷ số Sortino tương tự như Sharpe nhưng chỉ xem xét rủi ro downside. Công thức:

Sortino Ratio = (R - Rf) / σd

Trong đó:

  • σd: Độ lệch chuẩn của lợi nhuận âm
def calculate_sortino_ratio(returns, risk_free_rate=0.02, annualization_factor=252):
excess_returns = returns - risk_free_rate/annualization_factor
downside_returns = returns[returns < 0]
sortino_ratio = np.sqrt(annualization_factor) * excess_returns.mean() / downside_returns.std()
return sortino_ratio

# Ví dụ
sortino = calculate_sortino_ratio(returns)
print(f"\nTỷ số Sortino: {sortino:.2f}")

3. Phân tích rủi ro

Drawdown

Drawdown đo lường mức độ sụt giảm từ đỉnh xuống đáy của danh mục. Đây là một chỉ số quan trọng để đánh giá rủi ro tối đa.

def calculate_drawdown(portfolio_values):
rolling_max = portfolio_values.expanding().max()
drawdown = (portfolio_values - rolling_max) / rolling_max
return drawdown

# Ví dụ
drawdown = calculate_drawdown(portfolio_values)
print("\nDrawdown:")
print(drawdown)

Biểu đồ Drawdown

Value at Risk (VaR)

VaR đo lường mức thua lỗ tối đa có thể xảy ra với một xác suất nhất định. Ví dụ, VaR 95% là mức thua lỗ tối đa có thể xảy ra với xác suất 95%.

Value at Risk (VaR)

def calculate_var(returns, confidence_level=0.95):
var = np.percentile(returns, (1 - confidence_level) * 100)
return var

# Ví dụ
var_95 = calculate_var(returns)
print(f"\nVaR 95%: {var_95:.2%}")

4. Phân tích hiệu suất

Phân tích thời gian

Phân tích hiệu suất theo các khung thời gian khác nhau giúp đánh giá tính ổn định của mô hình.

def analyze_performance_by_time(returns):
# Phân tích theo tháng
monthly_returns = returns.resample('M').mean()
# Phân tích theo quý
quarterly_returns = returns.resample('Q').mean()
# Phân tích theo năm
yearly_returns = returns.resample('Y').mean()

return monthly_returns, quarterly_returns, yearly_returns

# Ví dụ
monthly, quarterly, yearly = analyze_performance_by_time(returns)
print("\nLợi nhuận theo tháng:")
print(monthly)

Phân tích tương quan

Phân tích tương quan giúp đánh giá mức độ phụ thuộc của mô hình vào thị trường.

def analyze_correlation(returns, benchmark_returns):
correlation = returns.corr(benchmark_returns)
return correlation

# Ví dụ
benchmark_returns = pd.Series([0.01, 0.02, -0.01, 0.03, 0.01])
correlation = analyze_correlation(returns, benchmark_returns)
print(f"\nTương quan với benchmark: {correlation:.2f}")

Ma trận tương quan

Hiệu suất danh mục theo thời gian

5. Đánh giá tổng thể

Báo cáo hiệu suất

Tạo báo cáo tổng hợp các chỉ số hiệu suất để có cái nhìn toàn diện.

def generate_performance_report(returns, portfolio_values):
report = {
'Tổng lợi nhuận': (portfolio_values[-1] / portfolio_values[0] - 1),
'Lợi nhuận trung bình': returns.mean(),
'Độ biến động': returns.std(),
'Tỷ số Sharpe': calculate_sharpe_ratio(returns),
'Tỷ số Sortino': calculate_sortino_ratio(returns),
'VaR 95%': calculate_var(returns),
'Drawdown tối đa': calculate_drawdown(portfolio_values).min()
}
return report

# Ví dụ
report = generate_performance_report(returns, portfolio_values)
print("\nBáo cáo hiệu suất:")
for metric, value in report.items():
print(f"{metric}: {value:.2%}")

6. Trực quan hóa

Biểu đồ hiệu suất

Biểu đồ hiệu suất giúp trực quan hóa kết quả của mô hình theo thời gian.

def plot_performance(portfolio_values, benchmark_values=None):
plt.figure(figsize=(12, 6))
plt.plot(portfolio_values.index, portfolio_values, label='Portfolio')
if benchmark_values is not None:
plt.plot(benchmark_values.index, benchmark_values, label='Benchmark')
plt.title('Hiệu suất danh mục')
plt.xlabel('Thời gian')
plt.ylabel('Giá trị')
plt.legend()
plt.grid(True)
plt.show()

# Ví dụ
plot_performance(portfolio_values)

Biểu đồ phân phối lợi nhuận

Biểu đồ phân phối lợi nhuận giúp hiểu rõ hơn về tính chất của lợi nhuận.

def plot_returns_distribution(returns):
plt.figure(figsize=(12, 6))
sns.histplot(returns, kde=True)
plt.title('Phân phối lợi nhuận')
plt.xlabel('Lợi nhuận')
plt.ylabel('Tần suất')
plt.show()

# Ví dụ
plot_returns_distribution(returns)

Phân phối lợi nhuận

Kết luận

Đánh giá hiệu suất mô hình giao dịch định lượng đòi hỏi việc xem xét nhiều khía cạnh khác nhau:

  1. Lợi nhuận và rủi ro

    • Tỷ suất lợi nhuận
    • Độ biến động
    • Drawdown
    • VaR
  2. Các chỉ số hiệu suất điều chỉnh theo rủi ro

    • Tỷ số Sharpe
    • Tỷ số Sortino
  3. Phân tích theo thời gian

    • Hiệu suất theo tháng/quý/năm
    • Tính ổn định của mô hình
  4. Tương quan với benchmark

    • Mức độ phụ thuộc vào thị trường
    • Khả năng tạo alpha

Việc sử dụng kết hợp các chỉ số này sẽ giúp bạn có cái nhìn toàn diện về hiệu suất của mô hình giao dịch và đưa ra quyết định đầu tư tốt hơn.

Tài liệu tham khảo