关于国债的一些计算: 应计利息
应计利息
给定一只券,一个日期(必须在[IssueDate,MaturityDate]范围内)
如果时间点存在于付息日(包括IssueDate),此时应计利息为0 (因为此时会由券的发行方付息,所以不需要计入买卖双方的成本)
否则:
1.计算 arg_date(一个日期)的前后2个付息日,记录为 prev , next
2.计算每次付息日的利率: Coupon/Frequency 记为c
3.计算prev的日期到arg_date的日期值 d1
4.计算prev到next的日期的差值 d2 (也就是一个付息周期是几天)
5.于是应计利息AccruedInterest为: c*( d1 / d2 )
static double CalculateAccruedInterest(BondVariety arg_bondvariety,DateTime arg_date) { var bondvar = arg_bondvariety; var dateTarget = arg_date.Date; if( bondvar.maturitydate < dateTarget) { throw new NotImplementedException(); } if(bondvar.issuedate > dateTarget) { throw new NotImplementedException(); } var dates = bondvar.GetCashFlows().ToOtherTypeArray(c => c.时间); var datePrev = bondvar.issuedate; var dateNext = new DateTime(); for (var i = 0; i < dates.Length; i++) { if (dates[i] == dateTarget) return 0; if (dates[i] > dateTarget) { dateNext = dates[i]; if(i>0) datePrev = dates[i-1]; break; } } var dRet = (bondvar.couponrate/bondvar.frequency)*(dateTarget-datePrev).Days/(dateNext-datePrev).Days; return dRet.Round(4); }