关于国债的一些计算: 转换因子的计算

转换因子的计算比较复杂,这里只给出一个公式,以及每个参数的意义

首先给出交易所计算公式:


CF = ( 1/ (1+r/f)^(xf/12)   *   [   c/f  +   c/r + (1-c/r)* (1 / (1+r/f)^(n-1) ) ]  - c/f * (1-xf/12)


R:   5年期国债期货合约票面利率 3%  , 由于国债期货目前合约都是5年期所以这个值总是0.03

X: 交割月到下一个付息月的月份数

n: 剩余付息次数

c: 可交割国债的票面利率 CouponRate

f: 可交割国债每年的付息次数

注意:

关于X(交割月到下一个付息月的月份数):

            //交割月到付息月的月份数
            //注意这里是以TF的缴款日为目标得到的前后付息日
            var cashflowsTargetIsTFDeliveryMonth = bondvar.GetCashFlows(datePay);
            if (cashflowsTargetIsTFDeliveryMonth.Length != 2)
                throw new NotImplementedException();           
            var x = norlib.Time.TimeHelper.MonthDistance(tfvar.LastTradingDate, cashflowsTargetIsTFDeliveryMonth[1].时间);
bondvar.GetCashFlows(datePay) 是获取 TF的缴款日的前后付息日 

如果datePay与一个付息日t重叠,那么我们把这个t认为是datePay的前付息日,t日之后的下一个付息日记为后付息日

TF的缴款日是 TF最后交易日的后2个工作日


关于n(剩余付息次数): 

n = bondvar.GetCashFlows().ToOtherTypeArrayEx(i => i.时间 > tfvar.LastTradingDate, i=>i.时间).Length;
付息日必须大于最后交易日的才能算作一次剩余付息(也就是说如果最后交易日与一个付息日t重叠,t也不算做一次剩余付息)

static double CalculateCF(double arg_dR,int arg_nX,int arg_nN,double arg_dC, int arg_nF)
        {
            var n = arg_nN;
            var xf = arg_nX*arg_nF;
            var c1f = arg_dC/arg_nF;
            var c1r = arg_dC/arg_dR;
            var r1f = arg_dR/arg_nF;

            var part1 = (1 / Math.Pow(1 + r1f, (double)xf / 12));
            var part2 = (c1f + c1r + (1 - c1r) * (1 / (Math.Pow(1 + r1f, n - 1))));

            var cf = (1/Math.Pow(1+r1f,(double)xf/12)) * (c1f+c1r+(1-c1r)*(1/(Math.Pow(1+r1f,n-1)))) - c1f*(1-(double)xf/12);
            return cf.Round(4);
        }


转载于:https://www.cnblogs.com/norsd/p/6359370.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值