Định giá
Mục lục
Tính năng trên trang này đang trong giai đoạn phát triển thử nghiệm và chưa ổn định. Bạn dùng được để tìm hiểu và chạy thử, nhưng tên hàm hay công cụ, tham số và cấu trúc kết quả có thể còn đổi giữa các bản phát hành, cách tính và cách xử lý cũng có thể còn được hiệu chỉnh.
Hãy đối chiếu kết quả với một cách tính độc lập trước khi đưa vào quy trình nghiên cứu, và ghim phiên bản thư viện trong dự án để mã đang chạy không tự đổi theo bản mới.
Tổng quan
vnstock_quant.valuation gồm các hàm tính theo mô hình chiết khấu cổ tức (DDM), suy ra giả định tăng trưởng hoặc lợi suất từ thị giá, và tính P/E theo các giả định bạn đặt. Kết quả thay đổi khi cổ tức, tốc độ tăng trưởng hoặc lợi suất yêu cầu thay đổi; vì vậy nên xem nhiều kịch bản thay vì một con số duy nhất.
Mọi kết quả định giá là đầu ra toán học của mô hình dựa trên các giả định đầu vào (lợi suất yêu cầu, tốc độ tăng trưởng, tỷ lệ chi trả) do người dùng thiết lập. Đây không phải là giá mục tiêu hay khuyến nghị đầu tư của Vnstock.
Mô hình chiết khấu cổ tức (DDM)
DDM dùng dòng cổ tức dự kiến để tính giá trị theo mô hình. Trước khi áp dụng, hãy xem doanh nghiệp có lịch sử chi trả cổ tức tiền mặt đủ để bạn xây dựng giả định hay không.
from vnstock_quant import valuation as vl
# Trường hợp 1: Mô hình tăng trưởng đều Gordon (Gordon Growth Model)
# Cổ tức vừa chi trả d0 = 3.700 VNĐ, kỳ vọng tăng trưởng dài hạn g = 5,4%/năm, lợi suất yêu cầu r = 7,5%
gordon_val = vl.ddm(r=0.075, d0=3700, terminal_g=0.054)
print(f"Giá trị nội tại: {gordon_val['value']:,.0f} VNĐ")
# Trường hợp 2: Mô hình DDM hai giai đoạn (Two-stage DDM)
# Doanh nghiệp tăng trưởng cao 10%/năm trong 3 năm đầu, sau đó ổn định ở mức 5%
multi_stage = vl.ddm(
r=0.15,
d0=5000,
stages=[(0.10, 3)], # [(tốc độ tăng trưởng, số năm)]
terminal_g=0.05
)
print(multi_stage[["value", "pv_dividends", "pv_terminal", "terminal_share"]])
# Trường hợp 3: Khai báo dòng cổ tức dự phóng chi tiết (Explicit Dividends)
# 4 năm đầu tái đầu tư toàn bộ (cổ tức = 0), từ năm thứ 5 bắt đầu trả 4.000 VNĐ rồi tăng trưởng 6%
explicit_val = vl.ddm(r=0.10, dividends=[0, 0, 0, 0, 4000], terminal_g=0.06)
print(f"Giá trị nội tại: {explicit_val['value']:,.0f} VNĐ")Tham số chi tiết của hàm ddm()
| Tham số | Kiểu dữ liệu | Ý nghĩa |
|---|---|---|
r | float | Lợi suất yêu cầu của nhà đầu tư (tính theo năm, dạng phân số). Bắt buộc phải lớn hơn terminal_g |
terminal_g | float | Tốc độ tăng trưởng dài hạn sau khi kết thúc giai đoạn tăng trưởng nhanh |
d0 / d1 | float | Mức cổ tức tiền mặt vừa chi trả gần nhất (d0) hoặc cổ tức dự kiến kỳ tới (d1) |
stages | list[tuple] | Danh sách các giai đoạn tăng trưởng: [(g1, số_năm1), (g2, số_năm2)] |
dividends | list[float] | Danh sách dự phóng cổ tức chi tiết từng năm [D1, D2, ..., Dn] |
terminal_share cho biết phần giá trị mô hình đến từ giai đoạn sau thời kỳ dự phóng chi tiết. Nếu phần này lớn, hãy thử nhiều giá trị r và g để xem kết quả thay đổi ra sao.
Định giá đảo ngược (Reverse Valuation)
Với định giá đảo ngược, bạn bắt đầu từ thị giá và một số giả định khác để tính tốc độ tăng trưởng hoặc lợi suất yêu cầu mà mô hình hàm ý. Đây là cách kiểm tra mức độ nhạy của kết quả với những giả định đó.
# Cổ phiếu đang giao dịch ở mức giá 63.000 VNĐ, cổ tức năm tới dự kiến 1.760 VNĐ
current_price = 63000
expected_d1 = 1760
# 1. Tính tốc độ tăng trưởng ngầm định khi biết lợi suất yêu cầu là 7%
implied_g = vl.implied_growth(price=current_price, d1=expected_d1, r=0.07)
print(f"Tăng trưởng dài hạn ngầm định: {implied_g * 100:.2f}%/năm")
# 2. Tính lợi suất yêu cầu ngầm định khi giả định tốc độ tăng trưởng dài hạn là 4%
implied_r = vl.implied_return(price=current_price, d1=expected_d1, g=0.04)
print(f"Lợi suất yêu cầu ngầm định: {implied_r * 100:.2f}%/năm")Nếu implied_g cao hơn nhiều so với mức tăng trưởng bạn cho là có cơ sở, hãy xem lại dữ liệu và giả định đầu vào trước khi diễn giải kết quả.
Xác định tỷ số P/E hợp lý theo cơ bản (Justified P/E)
vl.justified_pe() tính P/E theo tỷ lệ chi trả cổ tức (payout), lợi suất yêu cầu (r) và tốc độ tăng trưởng (g). Đây là kết quả của mô hình với các giả định bạn chọn:
# Doanh nghiệp chi trả cổ tức 68% lợi nhuận, lợi suất yêu cầu 9%, tăng trưởng 6,9%
payout_ratio = 0.68
cost_of_equity = 0.09
growth_rate = 0.069
# 1. P/E dự phóng hợp lý (Forward Justified P/E = payout / (r − g))
pe_forward = vl.justified_pe(payout=payout_ratio, r=cost_of_equity, g=growth_rate)
print(f"P/E Forward hợp lý: {pe_forward:.2f}x")
# 2. P/E trượt hợp lý (Trailing Justified P/E = payout * (1 + g) / (r − g))
pe_trailing = vl.justified_pe(payout=payout_ratio, r=cost_of_equity, g=growth_rate, kind="trailing")
print(f"P/E Trailing hợp lý: {pe_trailing:.2f}x")
# 3. Suy ra lợi suất yêu cầu ngầm định từ P/E thị trường đang ở mức 28x
implied_cost = vl.pe_implied(pe=28, payout=0.70, g=0.04)
print(f"Lợi suất yêu cầu ngầm định từ P/E: {implied_cost * 100:.2f}%")Đối chiếu công thức
Các công thức trong mô-đun valuation được đối chiếu với bài toán mẫu của CFA Program Level I (Equity Investments & Quantitative Methods). Xem phần kiểm định để biết phạm vi đối chiếu.
Đọc tiếp
- Chỉ số tài chính — Phân tích dòng tiền tự do FCFF/FCFE.
- Quản lý danh mục đầu tư — Tối ưu hoá phân bổ tài sản.
- Đo lường rủi ro và hiệu suất — Đo lường Sharpe, Sortino và Amihud.
