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

来源:互联网 发布:华为隐藏软件 编辑:程序博客网 时间:2024/06/11 21:58

应计利息

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



0 0