Dùng hàm uniroot để tìm YTM
Phương pháp thử–sai rất mất công. Một cách khác là dùng thuật toán để làm việc đó cho bạn. Trong trường hợp này, lời giải tương đương với việc tìm nghiệm (root) của một hàm.
Trong bài tập này, bạn sẽ dùng hàm unrioot() để tìm nghiệm.
Hàm uniroot() yêu cầu bạn thiết lập một vector dòng tiền cf, trong đó phần tử đầu tiên là giá của trái phiếu (mang dấu âm) và các phần tử còn lại là các dòng tiền bạn kỳ vọng nhận được từ trái phiếu (tức là tiền coupon và tiền gốc).
Nhắc lại: giá trái phiếu là $95.79, mệnh giá $100, lãi coupon 5%, và thời gian đáo hạn 5 năm.
Bài tập này là một phần của khóa học
Định giá và Phân tích Trái phiếu bằng R
Hướng dẫn bài tập
- Tạo một vector dòng tiền
cf, gồm giá mua ban đầu của trái phiếu (âm) và các khoản thanh toán đến khi đáo hạn (dương). - Dùng đoạn mã có sẵn để tạo hàm định giá trái phiếu đơn giản
bval(), hàm này tính giá trị trái phiếu tại mỗi kỳ. - Dùng đoạn mã có sẵn để tạo hàm
ytm()bằnguniroot(). - Dùng
ytm()với vectorcfcủa bạn để tìm lợi suất đến ngày đáo hạn (yield to maturity) của trái phiếu.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Create cash flow vector
cf <- c(___, ___, ___, ___, ___, ___)
# Create bond valuation function
bval <- function(i, cf,
t=seq(along = cf))
sum(cf / (1 + i)^t)
# Create ytm() function using uniroot
ytm <- function(cf) {
uniroot(bval, c(0, 1), cf = cf)$root
}
# Use ytm() function to find yield