อัตราดอกเบี้ยและการคิดทบต้น (Interest Rates & Compounding)
คณิตศาสตร์อัตราดอกเบี้ยทำหน้าที่แปลงอัตราดอกเบี้ยที่ระบุ (Nominal Rates) ไปสู่มูลค่าเงินตามเวลา ผ่านตัวคูณคิดลด (Discount Factor) และตัวคูณทบต้น (Compound Factor)
รูปแบบการคิดดอกเบี้ยทบต้น (Compounding Conventions)
เมื่อกำหนดอัตราดอกเบี้ยต่อปี และสัดส่วนปี :
1. การคิดทบต้นตามงวด ( ครั้งต่อปี)
2. การคิดทบต้นต่อเนื่อง (Continuous Compounding)
3. การคิดดอกเบี้ยเชิงเดี่ยว (Simple Compounding)
4. ดอกเบี้ยเชิงเดี่ยวก่อนแล้วจึงทบต้น (Simple Then Compounded)
ใช้สำหรับตราสารตลาดเงินที่มีช่วงเศษงวด (Stub): ใช้ดอกเบี้ยเชิงเดี่ยวสำหรับ และคิดทบต้นหลังจากนั้น
การแปลงอัตราดอกเบี้ยที่เทียบเท่ากัน (Equivalent Rate Conversions)
การแปลงอัตราดอกเบี้ย ที่มีความถี่ ไปเป็นอัตราดอกเบี้ย ที่มีความถี่ โดยที่ตัวคูณคิดลดมีค่าเท่ากัน:
ตัวอย่างโค้ดในภาษา Rust
use sabiquant::core::rates::{InterestRate, Compounding};use sabiquant::core::Frequency;
fn main() -> Result<(), Box<dyn std::error::Error>> { // อัตราดอกเบี้ย 5.0% ต่อปี จ่ายทบต้นทุกครึ่งปี (Semi-Annual) let rate = InterestRate::new(0.05, Compounding::Compounded, Frequency::SemiAnnual);
let time = 2.5; // ระยะเวลา 2.5 ปี
// คำนวณตัวคูณทบต้นและตัวคูณคิดลด let compound_factor = rate.compound_factor(time); let discount_factor = rate.discount_factor(time);
println!("Compound Factor (2.5Y): {:.6}", compound_factor); println!("Discount Factor (2.5Y): {:.6}", discount_factor);
// แปลงเป็นอัตราดอกเบี้ยทบต้นต่อเนื่องที่เทียบเท่ากัน let continuous_rate = rate.equivalent_rate(Compounding::Continuous, Frequency::Annual, time)?; println!("Continuous Equivalent: {:.5}%", continuous_rate.rate() * 100.0);
// แปลงเป็นอัตราดอกเบี้ยทบต้นรายไตรมาสที่เทียบเท่ากัน let quarterly_rate = rate.equivalent_rate(Compounding::Compounded, Frequency::Quarterly, time)?; println!("Quarterly Equivalent: {:.5}%", quarterly_rate.rate() * 100.0);
Ok(())}