關於國債的一些計算: 轉換因子的計算


轉換因子的計算比較復雜,這里只給出一個公式,以及每個參數的意義

首先給出交易所計算公式:


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);
        }



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM