Portfolio Optimization: Diversify và tối ưu hóa Sharpe Ratio
2025-05-03 — Admin
Tối ưu hóa danh mục đầu tư là quá trình phân bổ vốn để đạt được lợi nhuận tối đa với rủi ro tối thiểu. Bài viết này sẽ giúp bạn hiểu rõ lý thuyết và thực hành tối ưu hóa danh mục.
1. Markowitz Model: Lý thuyết và ứng dụng
- Lý thuyết: Markowitz Model dựa trên nguyên tắc đa dạng hóa để giảm thiểu rủi ro.
- Công thức:
- Lợi nhuận kỳ vọng: (E(R_p) = \sum_{i=1}^{n} w_i E(R_i))
- Rủi ro (phương sai): (\sigma_p^2 = \sum_{i=1}^{n} \sum_{j=1}^{n} w_i w_j \sigma_{ij})
- Trong đó:
- (w_i): Tỷ trọng vốn cho tài sản i
- (E(R_i)): Lợi nhuận kỳ vọng của tài sản i
- (\sigma_{ij}): Hiệp phương sai giữa tài sản i và j
2. Tối ưu hóa danh mục bằng cvxpy
- Công cụ: cvxpy là thư viện Python mạnh mẽ cho tối ưu hóa lồi.
- Ví dụ code Python:
import cvxpy as cp import numpy as np # Dữ liệu lợi nhuận và hiệp phương sai returns = np.array([0.1, 0.2, 0.15]) cov_matrix = np.array([[0.1, 0.02, 0.03], [0.02, 0.2, 0.04], [0.03, 0.04, 0.15]]) # Biến tối ưu hóa w = cp.Variable(3) # Hàm mục tiêu: Tối ưu hóa Sharpe Ratio objective = cp.Maximize(returns @ w - 0.5 * cp.quad_form(w, cov_matrix)) # Ràng buộc constraints = [cp.sum(w) == 1, w >= 0] # Giải bài toán prob = cp.Problem(objective, constraints) prob.solve() print(f'Tỷ trọng tối ưu: {w.value}')
3. Mô phỏng Monte Carlo để tìm portfolio tối ưu
- Lý thuyết: Mô phỏng Monte Carlo tạo ra nhiều danh mục ngẫu nhiên để tìm danh mục tối ưu.
- Ví dụ code Python:
import numpy as np import matplotlib.pyplot as plt # Số lượng mô phỏng n_simulations = 10000 # Tạo danh mục ngẫu nhiên portfolios = np.random.dirichlet(np.ones(3), n_simulations) # Tính lợi nhuận và rủi ro returns = np.dot(portfolios, returns) risks = np.sqrt(np.diag(np.dot(portfolios, np.dot(cov_matrix, portfolios.T)))) # Vẽ biểu đồ plt.scatter(risks, returns, c=returns/risks, cmap='viridis') plt.colorbar(label='Sharpe Ratio') plt.xlabel('Rủi ro') plt.ylabel('Lợi nhuận') plt.title('Mô phỏng Monte Carlo') plt.show()
4. Kết luận
- Tối ưu hóa danh mục là quá trình phân bổ vốn để đạt được lợi nhuận tối đa với rủi ro tối thiểu.
- Nên kết hợp Markowitz Model, cvxpy và mô phỏng Monte Carlo để tìm danh mục tối ưu.
Chúc bạn thành công trên hành trình làm chủ tối ưu hóa danh mục!