ใช้ฟังก์ชัน uniroot เพื่อหา YTM
การลองผิดลองถูกเป็นกระบวนการที่ยุ่งยากมาก ทางเลือกหนึ่งคือการใช้อัลกอริทึมที่ช่วยคำนวณแทน ในกรณีนี้ การหาคำตอบของปัญหาเทียบเท่ากับการหารากของฟังก์ชัน
ในแบบฝึกหัดนี้ จะได้ใช้ฟังก์ชัน uniroot() เพื่อหาราก
ฟังก์ชัน uniroot() กำหนดให้สร้างเวกเตอร์กระแสเงินสด cf โดยองค์ประกอบแรกคือราคาของพันธบัตร (เป็นค่าลบ) และองค์ประกอบที่เหลือคือกระแสเงินสดที่คาดว่าจะได้รับจากพันธบัตร (ได้แก่ ดอกเบี้ยคูปองและเงินต้น)
ทบทวนข้อมูล: ราคาของพันธบัตรคือ $95.79 พันธบัตรมีมูลค่าที่ตราไว้ $100 อัตราคูปอง 5% และอายุครบกำหนด 5 ปี
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การประเมินมูลค่าและวิเคราะห์พันธบัตรด้วย R
คำแนะนำการฝึกหัด
- สร้างเวกเตอร์กระแสเงินสด
cfซึ่งประกอบด้วยราคาพันธบัตรเริ่มต้น (ค่าลบ) และการรับชำระเงินจนถึงวันครบกำหนด (ค่าบวก) - ใช้โค้ดที่เตรียมไว้ให้เพื่อสร้างฟังก์ชันประเมินมูลค่าพันธบัตรอย่างง่าย
bval()ซึ่งคำนวณมูลค่าของพันธบัตรในแต่ละช่วงเวลา - ใช้โค้ดที่เตรียมไว้ให้เพื่อสร้างฟังก์ชัน
ytm()โดยใช้uniroot() - เรียกใช้
ytm()ร่วมกับเวกเตอร์cfเพื่อหาอัตราผลตอบแทนจนถึงวันครบกำหนด (YTM) ของพันธบัตร
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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