Tải bản đầy đủ (.docx) (40 trang)

Hướng dẫn sử dụng Addin cho mô hình Danh mục đầu trên trên Excel

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.24 MB, 40 trang )

HƯỚNG DẪN SỬ DỤNG MỘT SỐ HÀM EXCEL VIẾT BẰNG VBA
SỬ DỤNG CHO PHẦN MƠ HÌNH DANH MỤC ĐẦU TƯ

Mục lục

1


I. Giới thiệu
Để thuận tiện trong việc xử lý số liệu trong phần xây dựng mơ hình cho “Danh Mục Đầu Tư”. Sau khi
mình đã tham khảo tài liệu Financial Modeling của tác giả Simon Benninga về các đoạn code VBA dùng
để tạo các Function bằng Macro, mình đã viết lại cũng như viết thêm một số hàm khác và tạo ln add-in
của Excel để chứa các hàm này.
Mục đích tạo các add-in là để mình khơng cần phải viết lại hay copy hoàn toàn các đoạn code VBA vào
phần Macro mỗi khi tạo một file Excel mới. Với add-in thì chỉ cần cài đặt một lần trên máy tính là có thể
dùng các hàm đó ở bất kỳ file Excel nào được tạo trên máy tính đó.
II. Hướng dẫn cài đặt add-in
1. Download add-in về máy tính của bạn: Tải về
2. Click chuột phải vào file “QF_Excel_Addin_yyyymmdd.zip”, chọn Extract All…

3. Chọn ổ đĩa D:\ (Trong phần trình bày này mình dùng ổ đĩa D:\, các bạn chọn ổ đĩa hay thư mục
nào cũng được)

Click nút Extract.
4. Mở thư mục D:\QF_Excel_Addin

2


Các bạn sẽ thấy file QF_Tools_Addin.xlam.
5. Mở chương trình Excel lên, Click vào Blank workbook để tạo file Excel mới



6. Hiển thị tab “Developer”
Click tap File

Rồi chọn Options

Ở cửa sổ Excel Options, chọn Customize Ribbon. Sau đó, tick chọn ơ Developer như hình sau

3


Xong, click nút OK. Khi đó tab Developer sẽ xuất hiện:

7. Tham chiếu đến các file add-in
Chọn tab Developer, rồi click Excel Add-ins:

Ở cửa sổ Add-ins

4


Click Browse…

Chọn tới thư mục “D:\QF_Excel_Addin”, sau đó chọn file “QF_Tools_Addin.xlam”. Click Open

5


Khi đó, cái add-in “QF_Tools_Addin.xlam” đã được hiện thị và được tick chọn (Nếu khơng tick
chọn sẵn, thì bạn tick chọn nó). Xong, click OK.

Khi đó, sẽ có một cái tab tên là “QF Tools” hiển thị ngay sau tab “Help” như hình sau:

8. Sau khi chọn tham chiếu file add-in xong, chọn một ơ (cell) bất kỳ. Sau đó chọn vào thanh
formula và gõ “=QF”. Nếu Excel nó hiển thị ra các hàm như hình bên dưới thì coi như Excel đã
nhận thấy các hàm trong file add-in.

6


III. Hướng dẫn sử dụng các hàm trong add-in
Để xem mô tả cũng như tham số của các hàm QF ở Excel, ta có thể xem bằng cách chọn tab “QF Tools”,
tại nhóm “QF Function Helps”, click vào tương ứng từng tên hàm sẽ xuất hiện một hộp thoại như hình
sau:

Phần tiếp theo sẽ mơ tả từng hàm QF cùng với ví dụ sử dụng các hàm này trên thanh Formula.
1. Hàm QF_GetFormula()
Hàm này trả về giá trị là công thức của một ô (cell)
Cú pháp:
QF_GetFormula(cell)
cell: là ô muốn lấy công thức. Nếu không truyền giá trị cell cụ thể, thì hàm này sẽ trả về cơng thức của ơ
liền kề trước nó.
Ví dụ:

7


Ô D2 = QF_GetFormula()
Ô D4 = QF_GetFormula(C4)
2. Hàm QF_ReturnMatrix()
Hàm này dùng để tính TSSL cho từng quan sát. Kết quả trả về là một ma trận TSSL

Cú pháp:
QF_ReturnMatrix(rngPrice, firstRowLabel, fml)
rngPrice: là vùng chọn ma trận giá của nhiều loại cổ phiếu
firstRowLabel:
= 1: Nếu vùng chọn bao gồm dòng đầu tiên là tên các cổ phiếu. (Default = 1 nếu không truyền giá trị)
= 0: Nếu vùng chọn không bao gồm dòng đầu là tên các cổ phiếu
fml:
= 0: Nếu muốn dùng cơng thức tính TSSL là Logarit Nepe (hàm LN). (Default = 0 nếu không truyền giá
trị)
= 1: Nếu muốn dùng cơng thức tính TSSL là
Ví dụ:
Bảng giá các cổ phiếu:

Đánh dấu chọn vùng xuất kết quả M2:V427
8


Gõ cơng thức:
=QF_ReturnMatrix(B2:K427)
(Các tham số phía sau khơng nhập thì mặc định là: firstRowLabel=1, fml=0)
Rồi nhấn tổ hợp phím Ctrl + Shift + Enter. Kết quả là:

Nếu đánh dấu chọn vùng xuất kết quả M3:V427.
9


Gõ cơng thức:
=QF_ReturnMatrix(B3:K427,0)
Nhấn Ctrl + Shift + Enter
Thì vùng kết quả là:


Chú ý: Vùng chọn giá bao nhiêu dịng thì vùng chọn xuất kết quả cũng phải tương ứng bấy nhiêu dịng.
Nếu dịng đầu tiên của vùng chọn giá khơng phải là dịng chứa tên cổ phiếu thì cho tham số
firstRowLabel = 0

3. Hàm QF_CovMatrix()
Hàm này dùng để tính ma trận hiệp phương sai (Covariance) từ ma trận TSSL. Công thức này viết code
VBA theo tài liệu Financial Modeling của tác giả Simon Benninga
Cú pháp:
QF_CovMatrix(rngReturn, isSample=1, totalTradingPeriod=1)
rngReturn: Là vùng chọn ma trận TSSL
isSample:
= 1: dùng cơng thức tính cho mẫu (Default =1 nếu không truyền giá trị)
= 0: dùng công thức tính cho tổng thể
totalTradingPeriod:
Dùng để chuyển TSSL theo Ngày/Tuần/Tháng ra TSSL theo Năm (Default = 1: nghĩa là tính theo năm)
Ngày ==> Năm: totalTradingPeriod = 252
Tuần ==> Năm: totalTradingPeriod = 52
10


Tháng ==> Năm: totalTradingPeriod = 12

Ví dụ:
Chọn vùng xuất kết quả: 10x10

Gõ công thức:
=QF_CovMatrix(M4:V427,,252)
Nhấn Ctrl + Shift + Enter


11


Chú ý:
Khi gõ công thức QF_CovMatrix(M4:V427,,252). Nếu tham số mặc định nằm ở cuối cùng thì mình khơng
cần truyền gì cả. Nhưng nếu tham số đó khơng phải ở cuối cùng thì nếu khơng muốn truyền giá trị vào
mà dùng giá trị mặc định thì cứ gõ liên tiếp 2 dấu ,, như vậy thì Excel sẽ hiểu là tham số đó dùng giá trị
mặc định của hàm.

4. Hàm QF_CorrelMatrix()
Hàm này dùng để tính ma trận tương quan (Correlation) từ ma trận TSSL. Công thức này viết code VBA
theo tài liệu Financial Modeling của tác giả Simon Benninga
Cú pháp:
QF_CorrelMatrix(rngReturn)
rngReturn: Là vùng chọn ma trận TSSL
Ví dụ:
Chọn vùng xuất kết quả: 10x10
12


Gõ công thức:
=QF_CorrelMatrix(M4:V427)
Nhấn Ctrl + Shift + Enter

13


5. Hàm QF_MeanReturn()
Để tính TSSL trung bình, ta phải tính ra cái ma trận TSSL theo từng quan sát rồi mới tính TSSL trung
bình của từng cổ phiếu bằng hàm AVERAGE. Tuy nhiên, để nhanh hơn ta dùng hàm QF_MeanReturn()

để tính trực tiếp từ ma trận giá, khơng cần tính ma trận TSSL.
Cú pháp:
QF_MeanReturn(rngPrice, displayColOrRow, fml, totalTradingPeriod=1)
rngPrice: là vùng chọn ma trận giá của nhiều loại cổ phiếu
displayColOrRow:
= 0: Hiển thị kết quả theo hàng dọc. (Default = 0 nếu không truyền giá trị)
= 1: Hiển thị kết quả theo hàng ngang
fml:
= 0: Nếu muốn dùng cơng thức tính TSSL là Logarit Nepe (hàm LN). (Default = 0 nếu không truyền giá
trị)
14


= 1: Nếu muốn dùng cơng thức tính TSSL là
totalTradingPeriod:
Dùng để chuyển TSSL theo Ngày/Tuần/Tháng ra TSSL theo Năm (Default = 1: nghĩa là tính theo năm)
Ngày ==> Năm: totalTradingPeriod = 252
Tuần ==> Năm: totalTradingPeriod = 52
Tháng ==> Năm: totalTradingPeriod = 12

Ví dụ:
* Hiển thị hàng ngang:
Chọn vùng xuất kết quả: 2x10

Gõ công thức:
=QF_MeanReturn(B2:K427,1,,252)
Nhấn Ctrl + Shift + Enter

* Hiển thị hàng dọc:
15



Chọn vùng xuất kết quả: 10x2
Gõ công thức:
= QF_MeanReturn(B2:K427,,,252)
Nhấn Ctrl + Shift + Enter

Chú ý: Vùng chọn giá bắt buộc phải chọn ln dịng đầu tiên là dịng chứa tên các cổ phiếu

6. Hàm QF_CovMatrixByPrice()
Hàm này dùng để tính ma trận hiệp phương sai (Covariance) từ ma trận giá, không cần tính ma trận
TSSL.
Cú pháp:
QF_CovMatrixByPrice(rngPrice, firstRowLabel, fml, isSample, totalTradingPeriod=1)
rngPrice: là vùng chọn ma trận giá của nhiều loại cổ phiếu
firstRowLabel:
= 1: Nếu vùng chọn bao gồm dòng đầu tiên là tên các cổ phiếu. (Default = 1 nếu không truyền giá trị)
= 0: Nếu vùng chọn khơng bao gồm dịng đầu là tên các cổ phiếu
fml:
= 0: Nếu muốn dùng cơng thức tính TSSL là Logarit Nepe (hàm LN). (Default = 0 nếu không truyền giá
trị)
= 1: Nếu muốn dùng cơng thức tính TSSL là
16


isSample:
= 1: dùng cơng thức tính cho mẫu (Default =1 nếu khơng truyền giá trị)
= 0: dùng cơng thức tính cho tổng thể
totalTradingPeriod:
Dùng để chuyển TSSL theo Ngày/Tuần/Tháng ra TSSL theo Năm (Default = 1: nghĩa là tính theo năm)

Ngày ==> Năm: totalTradingPeriod = 252
Tuần ==> Năm: totalTradingPeriod = 52
Tháng ==> Năm: totalTradingPeriod = 12

Ví dụ:
* Chọn vùng giá bao gồm dòng đầu tiên chứa tên cổ phiếu
Chọn vùng xuất kết quả: 11x11
Lúc này vùng xuất kết quả phải tăng thêm 1 dòng 1 cột để hiển thị tên cổ phiếu
Gõ công thức:
=QF_CovMatrixByPrice(B2:K427,1,,,252)
Nhấn Ctrl + Shift + Enter

* Chọn vùng giá khơng bao gồm dịng đầu tiên chứa tên cổ phiếu
Chọn vùng xuất kết quả:10x10
Gõ công thức:
=QF_CovMatrixByPrice(B3:K427,0,,,252)
Nhấn Ctrl + Shift + Enter

17


7. Hàm QF_CorrelMatrixByPrice()
Hàm này dùng để tính ma trận tương quan (Correlation) từ ma trận giá, khơng cần tính ma trận TSSL.
Cú pháp:
QF_CorrelMatrixByPrice(rngPrice, firstRowLabel, fml)
rngPrice: là vùng chọn ma trận giá của nhiều loại cổ phiếu
firstRowLabel:
= 1: Nếu vùng chọn bao gồm dòng đầu tiên là tên các cổ phiếu. (Default = 1 nếu không truyền giá trị)
= 0: Nếu vùng chọn khơng bao gồm dịng đầu là tên các cổ phiếu
fml:

= 0: Nếu muốn dùng cơng thức tính TSSL là Logarit Nepe (hàm LN). (Default = 0 nếu không truyền giá
trị)
= 1: Nếu muốn dùng cơng thức tính TSSL là
Ví dụ:
* Chọn vùng giá bao gồm dịng đầu tiên chứa tên cổ phiếu
Chọn vùng xuất kết quả: 11x11
Lúc này vùng xuất kết quả phải tăng thêm 1 dòng 1 cột để hiển thị tên cổ phiếu
Gõ công thức:
=QF_CorrelMatrixByPrice(B2:K427)
Nhấn Ctrl + Shift + Enter

18


* Chọn vùng giá khơng bao gồm dịng đầu tiên chứa tên cổ phiếu
Chọn vùng xuất kết quả: 10x10
Gõ công thức:
=QF_CorrelMatrixByPrice(B2:K427,0)
Nhấn Ctrl + Shift + Enter

8. Hàm QF_RandomWeights()
Hàm này dùng để tạo ngẫu nhiên ma trận tỉ trọng của danh mục (1xN hoặc Nx1)
Cú pháp:
QF_RandomWeights(length)
length: là số lượng cổ phiếu trong danh mục
Ví dụ:
Đánh dấu chọn vùng xuất kết quả

19



Gõ công thức:
= QF_RandomWeights (10)
Nhấn Ctrl + Shift + Enter

9. Hàm QF_PortfolioVar()
Hàm này dùng để tính phương sai của danh mục (Variance). Đây là hàm viết gọn lại cho dễ nhớ, không
cần quan tâm thứ tự nhân các ma trận X, S, XT
Cú pháp:
QF_PortfolioVar(rngWeight, rngCovariance)
rngWeight: là vùng chọn ma trận tỉ trọng. Có thể là ma trận hàng hoặc cột (Ma trận X)
rngCovariance: là vùng chọn ma trận hiệp phương sai (Ma trận S)
Ví dụ:
Chọn 1 ơ bất kỳ, gõ công thức:
=QF_PortfolioVar(O10:X10,O15:X24)

20


10. Hàm QF_PortfolioReturn()
Hàm này dùng để tính TSSL của danh mục. Không quan tâm ma trận truyền vào là ma trận 1xN hay Nx1
Cú pháp:
QF_PortfolioReturn(rngWeight, rngMeanReturn)
rngWeight: là vùng chọn ma trận tỉ trọng (1xN hoặc Nx1)
rngMeanReturn: là vùng chọn ma trận TSSL trung bình (1xN hoặc Nx1)
Ví dụ:

11. Sử dụng công thức bằng cách gọi Form
Cách apply/gọi các hàm trên các ơ/vùng chọn tương ứng có ưu điểm là khi ta thay đổi số liệu từ vùng
input thì số liệu ở dùng output sẽ cập nhật ngay tức thì. Nhưng nó cũng có một nhược điểm là nếu số

lượng dịng và cột của dữ liệu tăng lên thì việc chọn vùng xuất kết quả sẽ nhiều lên, dẫn đến có thể ta quét
vùng chọn xuất kết quả nó bị thiếu hoặc thừa. Chẳng hạn như ta có 30 cái cổ phiếu thì ta phải quét chọn
vùng xuất kết quả cho các ma trận có kích thước là 30x30
Do đó, mình tạo thêm cho mỗi hàm tương ứng một cái Form để thao tác chọn vùng input và output nó dễ
dàng hơn, cụ thể là vùng output chỉ cần chọn 1 ô thôi, phần còn lại vùng output bao nhiêu dòng/cột thì
Form nó sẽ tự tính và xuất ra. Cách này thì nó có nhược điểm là khi dữ liệu input thay đổi thì dữ liệu
output nó sẽ khơng cập nhật theo.
Chú ý: chỉ trừ 4 hàm QF_GetFormula, QF_RandomWeights, QF_PortfolioVar và QF_PortfolioReturn
khơng có gọi Form
Ví dụ, thay vì chọn vùng xuất kết quả trước xong rồi gõ
=QF_ReturnMatrix(B2:K63)
21


Thì chỉ cần click “QF_ReturnMatrixForm” trong nhóm “QF Function Forms”

Sẽ hiện ra cái Form sau:

Các tham số sẽ hiển thị tương ứng như trong phần mô tả. Quan trọng ở đây, output chỉ cần chọn một ô
(cell) trống bất kỳ. Tương tự cho các Form cịn lại.
Ở đây có nhiều lựa chọn, thấy cái nào tiện cho mình thì dùng thơi.
Ngồi ra, có một Form dùng để vẽ các điểm danh mục ngẫu nhiên bằng cách tạo một số lượng lớn danh
mục bằng cách cho tỉ trọng thay đổi ngẫu nhiên để tạo một tập hợp các danh mục khả thi với đầu vào là
ma trận TSSL trung bình và ma trận hiệp phương sai của danh mục

Click QF_PlotRandomPortfoliosForm

22



Chọn tham số đầu vào như hình, xong bấm OK

Ta sẽ có một đồ thị gồm 5000 điểm danh mục với tỉ trọng khác nhau cho thấy một hình dạng đường cong
cong bao bên ngoài.

23


12. Chạy Excel Solver nhiều lần bằng vòng lặp
1. Cài đặt Excel Solver
Nếu chưa cài Solver thì bạn chọn tab Developer, click Excel Add-ins:

Tick cái Solver Add-in như hình trên, nhấn OK là xong.

2. Mở cửa sổ (Form) QF Solver Parameter

Chọn tab “QF Tools”, click “QF Solver Parameter”, cửa sổ “QF Solver Parameter” xuất hiện cái Form
như hình sau:

24


*** Lý do mình tạo cái form QF Solver Parameter này:
Trong tài liệu tham khảo Financial Modeling của tác giả Simon Benninga, tác giả đã đặt tên cố định cho
các vùng dữ liệu (Range), sau đó tác giả sử dụng các tên này trong hàm Doit() để chạy Solver nhiều lần
bằng vòng lặp. Điều này làm cho các vùng dữ liệu đầu vào cũng như đầu ra là luôn cố định, không linh
động được. Nếu vùng dữ liệu tăng số dịng và số cột thì ta phải đi đặt lại tên cho các vùng dữ liệu này và
sửa code VBA.
Để thuận tiện và trực quan hơn, mình tạo cái form này để ta có thể tùy chọn các vùng dữ liệu đầu vào, đầu
ra khác nhau. Khi vùng dữ liệu thay đổi thì mình chỉ việc chọn lại từ trên form này mà thôi.


3. Sử dụng hằng số C để chạy Solver nhiều lần
Để đơn giản, mình sẽ sử dụng các thông số đã cài đặt sẵn 1 lần trong Excel Solver
25


×