เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ใช้ฟังก์ชัน 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


แก้ไขและรันโค้ด