bondCalculator

语法

bondCalculator(start, maturity, issuePrice, coupon, frequency, dayCountConvention, bondType, calendar, businessDayConvention, settlement, price, priceType, [calcRisk=false], [benchmark='Qeubee'])

详情

该函数用于实现债券到期收益率、净价和全价三者之间的互算,同时支持计算久期、凸度等风险指标。

返回值:字典或元组。

参数

注意:所有输入向量必须等长,输入标量将自动扩展以匹配其它向量的长度。

start DATE 类型标量或向量,表示债券的起息日。

maturity start 等长的 DATE 类型标量或向量,表示债券的到期日。

issuePrice start 等长的数值型标量或向量,表示债券的发行价格。贴现债需指定真实发行价(通常小于100);其他债券通常为100。

coupon 数值型标量或向量,表示债券的票面利率。例如 0.03,表示票息为 3%。

frequency 整型或 STRING 类型的标量或向量,表示债券的付息频率。可选值为:

  • 0/“Once”:到期一次还本付息
  • 1/“Annual”:每年付息一次
  • 2/“Semiannual:每半年付息一次
  • 4/“Quarterly”:每季度付息一次
  • 12/“Monthly”:每月付息一次

dayCountConvention STRING 类型的标量或向量,表示债券的计息日数惯例。可选值为:

  • "Thirty360US":US (NASD) 30/360
  • "ActualActual":实际/实际
  • "Actual360":实际/360
  • "Actual365":实际/365
  • "Thirty360EU":欧洲 30/360

bondType STRING 类型标量或向量,表示债券的类型。可选值为:

  • "FixedRate":固定利率债券,定期按息票利率支付利息。
  • "Discount":贴现债券,没有利息支付,以贴现方式发行的债券,期末FV=面值。
  • "ZeroCoupon":零息债券,期末一次性支付利息和面值,期末FV=面值+利息。

calendar STRING 类型标量,表示使用的交易日历。目前仅支持 “CFET”,表示中国人民银行债券交易日历(以 .IB 结尾的债券)。

businessDayConvention STRING 类型的标量,表示把非工作日调整到工作日的方法。目前仅支持 “Unadjusted”,表示不作调整。

settlement DATE 类型标量或向量,表示债券的结算日,即购买日期。

price 数值型标量或向量,具体含义取决于 priceType 的取值:

  • priceType 为 "YTM" 时,price 表示债券的到期收益率;
  • priceType 为 "CleanPrice" 时,price 表示债券的净价;
  • priceType 为 "DirtyPrice" 时,price 表示债券的全价。

priceType STRING 类型的标量或向量,用于指定债券价格类型,可选值为:

  • "YTM":到期收益率
  • "CleanPrice":净价
  • "DirtyPrice":全价

calcRisk 可选参数,布尔值,默认为 false,只计算输出全价、净价、应计利息和收益率。若设置为 true,除上述4项外,还会计算并输出麦考利久期、修正久期、凸度、基点价值。

benchmark 可选参数,STRING 类型标量,表示算法参考基准。目前仅支持 “Qeubee”(国内债券算法)。

例子

例1. 计算固定利率债券的价格、到期收益率、应计利息和风险指标。

bondCalculator(start=2022.07.15, maturity=2072.07.15, issuePrice=100, coupon=0.034, frequency="Semiannual", dayCountConvention="ActualActual", bondType="FixedRate", calendar="CFET", businessDayConvention="Unadjusted", settlement=2025.04.10, price=0.02, priceType="YTM", calcRisk=true);

/* Output:
pvbp->0.3902
ytm->0.0200
macaulayDuration->27.4761
dirtyPrice->143.4689
accruedInterest->0.7983
cleanPrice->142.6705
modifiedDuration->27.2041
convexity->1025.4003
*/


bondCalculator(start=2022.07.15, maturity=2072.07.15, issuePrice=100, coupon=0.034, frequency="Semiannual", dayCountConvention="ActualActual", bondType="FixedRate", calendar="CFET", businessDayConvention="Unadjusted", settlement=2072.04.18, price=100.2143, priceType="CleanPrice", calcRisk=false);

/* Output:
accruedInterest->0.8780
cleanPrice->100.2143
ytm->0.0250
dirtyPrice->101.0923
*/

例2. 计算零息债券的价格、到期收益率、应计利息和风险指标。

bondCalculator(start=2025.01.09, maturity=2026.02.05, issuePrice=100, coupon=0.0119, frequency="Annual", dayCountConvention="ActualActual", bondType="ZeroCoupon", calendar="CFET", businessDayConvention="Unadjusted", settlement=2025.04.10, price=0.025, priceType="YTM", calcRisk=true);

/* Output:
pvbp->0.0080
ytm->0.0250
macaulayDuration->0.8246
dirtyPrice->99.2322
accruedInterest->0.2966
cleanPrice->98.9355
modifiedDuration->0.8079
convexity->1.3057
*/

例3. 计算贴现债券的价格、到期收益率、应计利息和风险指标。

bondCalculator(start=2025.02.13, maturity=2025.05.15, issuePrice=99.663, coupon=0.0, frequency="Once", dayCountConvention="ActualActual", bondType="Discount", calendar="CFET", businessDayConvention="Unadjusted", settlement=2025.04.10, price=0.02, priceType="YTM", calcRisk=true);

/* Output:
pvbp->0.0009
ytm->0.0200
macaulayDuration->0.0958
dirtyPrice->99.8085
accruedInterest->0.2073
cleanPrice->99.6012
modifiedDuration->0.0957
convexity->0.0183
*/  

例4. 同时计算多种债券的价格、到期收益率、应计利息和风险指标。

result = bondCalculator(start=[2025.02.13, 2025.01.09, 2022.07.15], maturity=[2025.05.15, 2026.02.05, 2072.07.15], issuePrice=[99.663, 100, 100], coupon=[0.0, 0.0119, 0.034], frequency=["Once", "Annual", "Semiannual"], dayCountConvention=["ActualActual", "ActualActual", "ActualActual"], bondType=["Discount", "ZeroCoupon", "FixedRate"], calendar=["CFET", "CFET", "CFET"], businessDayConvention=["Unadjusted", "Unadjusted", "Unadjusted"], settlement=[2025.04.10, 2025.04.10, 2072.04.18], price=[0.02, 0.025, 100.2143], priceType=["YTM", "YTM", "CleanPrice"], calcRisk=true);

print result

/* Output:
(dirtyPrice->99.808586272901294
cleanPrice->99.601201657516682
ytm->0.02
accruedInterest->0.207384615384617
macaulayDuration->0.095890410958904
modifiedDuration->0.095706863549357
convexity->0.018319607460911
pvbp->0.000955236674747
,dirtyPrice->99.232212603180983
cleanPrice->98.935527671674137
ytm->0.025
accruedInterest->0.296684931506849
macaulayDuration->0.824657534246575
modifiedDuration->0.80799946312328
convexity->1.305726264815019
pvbp->0.008017957450791
,dirtyPrice->101.092321978021971
cleanPrice->100.214299999999994
ytm->0.025000792220527
accruedInterest->0.878021978021978
macaulayDuration->0.240437158469945
modifiedDuration->0.239000497930427
convexity->0.114242476021984
pvbp->0.002416111528969
)
*/ 

相关函数:bondAccrIntbondConvexitybondDirtyPricebondDurationbondYield