Giải bài toán Markowitz: Ti ưu hóa danh mục đầu tư chứng khoán bằng
VBA for Excel
Tác giả: Nguyễn Văn Thắng
Harry Markowitz đã mô hình hóa quá trình lựa chọn danh mục đầu (nhờ
đó đoạt giải Nobel kinh tế năm 1990) dưới dạng một bài toán quy hoch phi
tuyến (bài toán Markowitz). Mục tiêu ca bài toán Markowitz là tìm các t
trọng của các chứng khoán trong danh mục đầu tư sao cho giảm tới mức tối
thiểu phương sai (rủi ro) của danh mục mà đạt được một mức thu nhập đã
định. Giải liên tiếp bài toán với các mức thu nhập mục tiêu người ta xác định
được một tập hợp các danh mục đầu tư có hiệu quả. Từ đây nhà đầu tư sẽ lựa
chọn một danh mục nằm trong tập hợp này dựa trên quan điểm của mình v
việc đánh đổi giữa thu nhập và rủi ro.
Tìm
Với hệ ràng buộc
Trong đó:
Phương sai thu nhập của danh mục
đầu tư
Xi
Tỉ trọng của chứng khoán thứ i
trong danh mục đầu tư g
ồm n chứng
khoán; do thị trường chứng khoán
nước ta chưa cho phép bán khống.
(Nếu cho phép bán khống thì bài
toán được giải bằng phương pháp
Lagrange và r
ủi ro của danh mục tối
ưu còn giảm nhiều hơn, bài toán
Markowitz kinh điển không có điều
kiện này)
ri
Thu nhập kỳ vọng của chứng khoán
thứ i
Thu nhập dự tính của toàn bdanh
mục đầu tư
Tôi đã viết một chương trình nhbằng VBA for Excel để giải bài toán
Markowitz. Qua tạp chí TGVT giới thiệu để các bạn cùng xem xét và sửa đổi
chương trình hiu quả hơn.
THUẬT TOÁN
Phương pháp giải: Tham khảo phương pháp “Gradien” và “đơn hình” trong
giáo trình “Tối ưu hóa” – Nhà xuất bản khoa học kỹ thuật của PGS.TS Bùi
Minh Trí.
Bước 1 : Tìm phương án đầu tiên xo
Bước 2 : Tính các đạo hàm riêng của f(x) tại xo
Bước 3 : Khởi tạo vector ma trận cho bài toán đơn hình
Bước 4 : Sử dụng thuật toán đơn hình hai pha để giải bài toán đơn hình để
tìm hướng di chuyển xk
Bước 5 : Kiểm tra điều kiện tối ưu của bài toán Markowitz
Bước 6 : Nếu chưa tìm thấy lời giải, tính nhân tố l, tính xk+1, đặt xo=xk+1
rồi quay trở lại bước 2.
CHƯƠNG TRÌNH
Chương trình gồm 20
hàm viết bằng VBA for
Excel được tóm tắt trong
bảng bên dưới. Bạn đọc
có thể tải file “Solution
for Markowitz.xls” tại
website của TGVT để
xem chi tiết mã nguồn
(mở Tools\Macro\Visual
Basic Editor để xem).
HƯỚNG DẪN SỬ
DỤNG
Dữ liệu
Giả sử chúng ta xem xét việc thiết lập danh mục đầu tư từ 5 mã chứng khoán
và có bảng dữ liệu về thu nhập từ tháng 12/2004 đến 7/2007 tại sheet Dulieu
vùng B2:F33 như sau:
(dữ liệu trích từ trang web http://www.saga.vn/
Taichinh/Quihoach/Mohinhhoa_Dubao/5673.saga)
Để thuận lợi cho việc tính toán ta định nga các vùng d liệu bằng chọn
Insert\Name\Define như sau:
AGF=dulieu!$B2$B33; GIL=dulieu!$C2$C33; GMD=dulieu!$D2$D33;
NKD=dulieu!$E2$E33; REE =dulieu!$F2$F33
Thiết lập các tham số
Tham số được thiết lập tại sheet thamso, như sau:
Hàm/thủ tục
Chức năng
Tham s
1. Function Sol(Var
As Range, R As
Range, RConst As
Double, idx As
Integer) As Double
• Hàm lấy dữ
liệu, tính phương
án khởi tạo, tạo
lập vector
Gradien của
f(xo), gọi hàm
“donhinh” để tìm
xk; tìm lamda l,
tính toán xk+1.
• Trả về tỷ trọng
tối ưu của chứng
khoán th “idx”
trong danh mục
• “Var” bảng dữ liệu
về ma trận phương
sai;
• ”R” b
ảng dữ liệu về
vector thu nhập kỳ
vọng của các chứng
khoán,
• “Rconst” thu nhập
mục tiêu của danh
mục,
• “idx” sthứ tự của
ch
ng khoán cần tính
t trọng