关于国债的一些计算: 应计利息

应计利息

给定一只券,一个日期(必须在[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);
        }



posted on 2013-12-20 20:20  norsd  阅读(591)  评论(0编辑  收藏  举报

导航