การประเมินมูลค่าและวิเคราะห์พันธบัตรด้วย Python
Joshua Mayhew
Options Trader
ทบทวนสูตรราคาพันธบัตรไม่มีคูปอง:
$PV = \frac{FV}{(1 + r)^n}$
จัดรูปสมการเพื่อหา Yield $(r)$:
$FV = PV \times (1 + r)^n$
$ \frac{FV}{PV} = (1 + r)^n$
$ \sqrt[n]\frac{FV}{PV} = (1 + r)$
$ \sqrt[n]\frac{FV}{PV} -1 = r$
ลองดูพันธบัตรไม่มีคูปองจากตัวอย่างก่อนหน้าโดยทำงานย้อนกลับ:
Yield ของพันธบัตรนี้คือเท่าใด?
พันธบัตรไม่มีคูปองอายุ 3 ปี ราคา 90.19 USD มูลค่าที่ตราไว้ 100 USD:
$r = \sqrt[n]\frac{FV}{PV} -1$
ytm = (100 / 90.19) ** (1/3) - 1
print(ytm)
0.035
จะใช้ ytm แทน 'yield to maturity'
สูตรพันธบัตรคูปอง:
$ PV = \frac{C}{(1 + r)^1} + \frac{C}{(1 + r)^2} + ... +\frac{C}{(1 + r)^n} + \frac{P}{(1 + r)^n}$
$ = \sum_{i=1}^n \frac{C}{(1 + r)^i} + \frac{P}{(1 + r)^n}$
สมการนี้ไม่สามารถจัดรูปเพื่อแยก $r$ ออกมาได้โดยตรง
ต้องใช้วิธีลองผิดลองถูกเพื่อหา $r$
นี่คือวิธีที่ฟังก์ชัน npf.rate() ทำงาน
ลองพิจารณาพันธบัตรคูปองจากตัวอย่างก่อนหน้า ซึ่ง:
Yield to maturity ของพันธบัตรนี้คือเท่าใด?
พันธบัตรคูปองอายุ 3 ปี คูปองรายปี 3% ราคา 97.22 USD:
import numpy_financial as npf
npf.rate(nper=3, pmt=3, pv=-97.22, fv=100)
0.04
ต้องกำหนดให้ PV เป็นจำนวนลบ
เพราะราคาพันธบัตรคือเงินที่จ่ายออกไป (กระแสเงินสดติดลบ)
การประเมินมูลค่าและวิเคราะห์พันธบัตรด้วย Python