关于国债的一些计算: 应计利息
应计利息
给定一只券,一个日期(必须在[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);
}
浙公网安备 33010602011771号