bondPricer

首发版本:3.00.4

语法

bondPricer(instrument, pricingDate, discountCurve, [spreadCurve], [setting], [forwardCurve])

详情

对债券进行定价,输出净现值(NPV),同时可计算多种风险指标,包括一阶敏感度(Delta)、二阶敏感度(Gamma)以及关键利率久期(Key Rate Duration)。

支持对浮动利率债券(bondType="FloatingRateBond")进行定价。首个尚未支付的票息使用 lastFixing,后续各期参考利率根据 forwardCurve 计算,再加上 spread 得到各期票面利率。

参数

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

instrument INSTRUMENT 类型标量或向量,表示需要定价的债券产品。不同类型的债券产品所需的关键字段各不相同,详见债券产品字段要求。

pricingDate DATE 类型标量或向量,表示定价日期。

discountCurve MKTDATA 类型标量或向量(IrYieldCurve),表示贴现曲线。贴现曲线所需包含的关键字段见曲线字段要求。

spreadCurve 可选参数,MKTDATA 类型标量或向量(IrYieldCurve),表示信用利差曲线。若未提供,则默认使用 0% 利率的平坦曲线。利差曲线所需包含的关键字段见曲线字段要求。

setting 可选参数,字典(Dictionary<STRING, ANY>),用于定价设置,包括以下键值对:

键 值类型 描述
"calcDiscountCurveDelta" BOOL 是否计算债券对贴现曲线的一阶敏感度
"calcDiscountCurveGamma" BOOL 是否计算债券对贴现曲线的二阶敏感度
"calcDiscountCurveKeyRateDuration" BOOL 是否计算债券的关键利率久期
"discountCurveShift" DOUBLE 标量 贴现曲线的平行扰动,比如一个 bp(0.0001)
"discountCurveKeyTerms" DOUBLE 标量或向量 关键期限年数,比如 [1.0, 3.0, 5.0]
"discountCurveKeyShifts" DOUBLE 标量或向量 关键期限的扰动幅度, 与 discountCurveKeyTerms 等长,比如 [0.0001, 0.0002, 0.0015]
"useExerciseCashflow" BOOL

可选,表示是否按最近一个未来行权日执行时的现金流计算现值。默认值为 false,表示不使用行权现金流计算。

如果定价日期在最后一个行权日之后,则该配置项无效,仍按照原现金流计算得出现值。

forwardCurve 可选参数,MKTDATA 类型标量或向量(IrYieldCurve),表示用于计算浮动票息的远期曲线。当 instrument 为浮动利率债券时,该参数必填;其他债券类型忽略该参数。曲线的 referenceDate 必须与 pricingDate 相同。

返回值

  • 若未指定 setting,返回 NPV(DOUBLE 类型标量或向量)。

  • 若指定 setting,返回 Dictionary<STRING, ANY>,键为指标名称,值为相应结果:

    • "npv":DOUBLE 标量或向量

    • "discountCurveDelta":DOUBLE 标量或向量

    • "discountCurveGamma":DOUBLE 标量或向量

    • "discountCurveKeyRateDuration":DOUBLE 向量或数组向量

例子

对固定利率债券进行定价,计算 NPV 和风险指标。

bond = {
  "productType": "Cash",
  "assetType": "Bond",
  "bondType": "FixedRateBond",
  "version": 0, 
  "instrumentId": "240025.IB",
  "start": 2024.12.25,
  "maturity": 2031.12.25,
  "issuePrice": 100.0,
  "coupon": 0.0149,
  "frequency": "Annual",
  "dayCountConvention": "ActualActualISDA"
}

pricingDate = 2025.08.18

curve = {
  "mktDataType": "Curve",
  "curveType": "IrYieldCurve",
  "referenceDate": pricingDate,
  "currency": "CNY",
  "curveName": "CNY_TREASURY_BOND",
  "dayCountConvention": "ActualActualISDA",
  "compounding": "Compounded",
  "interpMethod": "Linear",
  "extrapMethod": "Flat",
  "frequency": "Annual",
  "dates":[2025.09.18, 2025.11.18, 2026.02.18, 2026.08.18, 2027.08.18, 2028.08.18, 2030.08.18,
      2032.08.18, 2035.08.18, 2040.08.18, 2045.08.18, 2055.08.18,2065.08.18, 2075.08.18],
  "values":[1.3000, 1.3700, 1.3898, 1.3865, 1.4299, 1.4471, 1.6401,
       1.7654, 1.7966, 1.9930, 2.1834, 2.1397, 2.1987, 2.2225] / 100.0
}

instrument = parseInstrument(bond)
discountCurve = parseMktData(curve)

setting = dict(STRING, ANY)
setting["calcDiscountCurveDelta"] = true
setting["calcDiscountCurveGamma"] = true
setting["calcDiscountCurveKeyRateDuration"] = true
setting["discountCurveShift"] = 0.0001
setting["discountCurveKeyTerms"] = [1.0, 3.0, 5.0]
setting["discountCurveKeyShifts"] = [0.0002, 0.0003, 0.0001]

bondPricer(instrument, pricingDate, discountCurve, setting=setting)

bondPricer([instrument, instrument], pricingDate, discountCurve, setting=setting)
bondPricer(instrument, pricingDate, [discountCurve, discountCurve], setting=setting)
bondPricer(instrument, [pricingDate], discountCurve, setting=setting)
bondPricer(instrument, [pricingDate, pricingDate], discountCurve, setting=setting)

对一个三年期、每半年付息一次的浮动利率债券定价:

// =====================================================
// 一、构造浮动利率债券产品字典
// =====================================================

floatingBond = {

    // 产品大类:现金类产品
    "productType": "Cash",

    // 资产类型:债券
    "assetType": "Bond",

    // 债券类型:浮动利率债券
    "bondType": "FloatingRateBond",

    // 债券代码 / 产品标识
    "instrumentId": "240025.IB",

    // 债券起息日
    "start": 2017.09.11,

    // 债券到期日
    "maturity": 2020.09.11,

    // 付息频率
    "frequency": "Semiannual",

    // 日计数规则
    "dayCountConvention": "Actual365",

    // 浮动端参考利率指数
    "iborIndex": "LPR_1Y",

    // 浮动票息利差
    "spread": 0.01,

    // 上一次已经确定的 fixing 利率
    "lastFixing": 0.045
}

// -----------------------------------------------------
// 将债券产品字典解析为 DDB 系统可识别的产品对象
// -----------------------------------------------------
instrument = parseInstrument(floatingBond)

// =====================================================
// 二、设置定价日
// =====================================================

pricingDate = 2017.09.11

// =====================================================
// 三、构造贴现零息收益率曲线 discountCurve
// =====================================================

discountCurve = parseMktData({

    // 市场数据类型:Curve
    "mktDataType": "Curve",

    // 曲线类型:利率收益率曲线
    "curveType": "IrYieldCurve",

    // 曲线参考日,即定价日
    "referenceDate": pricingDate,

    // 币种:人民币
    "currency": "CNY",

    // 曲线名称
    "curveName": "CNY_TREASURY_BOND",

    // 曲线日计数规则
    "dayCountConvention": "Actual365",

    // 复利方式:连续复利
    "compounding": "Continuous",

    // 插值方式:线性插值
    "interpMethod": "Linear",

    // 外推方式:平推
    "extrapMethod": "Flat",

    // 频率
    "frequency": "Semiannual",

    // 曲线期限节点日期
    "dates": [
        2018.03.11,
        2018.09.11,
        2019.03.11,
        2019.09.11,
        2020.03.11,
        2020.09.11
    ],

    // 各期限节点上的连续复利零息利率
    "values": [
        0.025,
        0.026,
        0.023,
        0.024,
        0.029,
        0.027
    ]
})

// =====================================================
// 四、构造远期零息收益率曲线 forwardCurve
// =====================================================

forwardCurve = parseMktData({

    // 市场数据类型:Curve
    "mktDataType": "Curve",

    // 曲线类型:利率收益率曲线
    "curveType": "IrYieldCurve",

    // 曲线参考日,即定价日
    "referenceDate": pricingDate,

    // 币种:人民币
    "currency": "CNY",

    // 曲线名称
    //
    // CNY_FORWARD 表示该曲线用于生成未来远期利率。
    "curveName": "CNY_FORWARD",

    // 曲线日计数规则
    "dayCountConvention": "Actual365",

    // 复利方式:连续复利
    "compounding": "Continuous",

    // 插值方式:线性插值
    "interpMethod": "Linear",

    // 外推方式:平推
    "extrapMethod": "Flat",

    // 频率
    "frequency": "Semiannual",

    // 远期曲线期限节点日期
    "dates": [
        2018.03.11,
        2018.09.11,
        2019.03.11,
        2019.09.11,
        2020.03.11,
        2020.09.11
    ],

    // 各期限节点上的连续复利零息利率
    "values": [
        0.046,
        0.05,
        0.048,
        0.0515,
        0.051,
        0.049
    ]
})

// =====================================================
// 五、调用债券定价器
// =====================================================

round(bondPricer(
    instrument=instrument,
    pricingDate=pricingDate,
    discountCurve=discountCurve,
    forwardCurve=forwardCurve
), 4)

/*
output: 109.2565
*/

对含权债券进行定价。

bond = {
  "productType": "Cash",
  "assetType": "Bond",
  "bondType": "OptionBond",
  "version": 0, 
  "instrumentId": "240025.IB",
  "start": 2024.12.25,
  "maturity": 2031.12.25,
  "issuePrice": 100.0,
  "coupon": 0.0149,
  "frequency": "Annual",
  "exerciseDates": [2028.12.25],
   "hasCallOption": true,
   "hasPutOption": true,
   "hasCouponAdjust": true,
   "dayCountConvention": "ActualActualISMA"
}

pricingDate = 2025.08.18

curve = {
  "mktDataType": "Curve",
  "curveType": "IrYieldCurve",
  "referenceDate": pricingDate,
  "currency": "CNY",
  "curveName": "CNY_TREASURY_BOND",
  "dayCountConvention": "ActualActualISDA",
  "compounding": "Compounded",
  "interpMethod": "Linear",
  "extrapMethod": "Flat",
  "frequency": "Annual",
  "dates":[2025.09.18, 2025.11.18, 2026.02.18, 2026.08.18, 2027.08.18, 2028.08.18, 2030.08.18,
      2032.08.18, 2035.08.18, 2040.08.18, 2045.08.18, 2055.08.18,2065.08.18, 2075.08.18],
  "values":[1.3000, 1.3700, 1.3898, 1.3865, 1.4299, 1.4471, 1.6401,
       1.7654, 1.7966, 1.9930, 2.1834, 2.1397, 2.1987, 2.2225] / 100.0
}

instrument = parseInstrument(bond)
discountCurve = parseMktData(curve)

// useExerciseCashflow 为 false,不使用行权现金流计算(默认)
setting = dict(STRING, ANY)
setting["calcDiscountCurveDelta"] = true
setting["calcDiscountCurveGamma"] = true
setting["calcDiscountCurveKeyRateDuration"] = true
setting["discountCurveShift"] = 0.0001
setting["discountCurveKeyTerms"] = [1.0, 3.0, 5.0]
setting["discountCurveKeyShifts"] = [0.0002, 0.0003, 0.0001]
setting["useExerciseCashflow"] = false

useExeFalse = bondPricer(instrument, pricingDate, discountCurve, setting=setting)

// useExerciseCashflow 为 true,使用行权现金流计算(按最近行权日执行)
setting = dict(STRING, ANY)
setting["calcDiscountCurveDelta"] = true
setting["calcDiscountCurveGamma"] = true
setting["calcDiscountCurveKeyRateDuration"] = true
setting["discountCurveShift"] = 0.0001
setting["discountCurveKeyTerms"] = [1.0, 3.0, 5.0]
setting["discountCurveKeyShifts"] = [0.0002, 0.0003, 0.0001]
setting["useExerciseCashflow"] = true

useExeTrue = bondPricer(instrument, pricingDate, discountCurve, setting=setting)

相关函数:parseInstrument, parseMktData, bondZSpreadCalculator

债券产品字段要求

贴现债

字段名 类型 描述 是否必填
productType STRING 固定填 "Cash" 是
assetType STRING 固定填 "Bond" 是
bondType STRING 固定填 "DiscountBond" 是
nominal DOUBLE 名义金额,默认值 100 否
instrumentId STRING 债券代码,如 "259926.IB" 否
start DATE 起息日 是
maturity DATE 到期日 是
dayCountConvention STRING 日期计数惯例,可选 "ActualActualISDA", "ActualActualISMA", "Actual365", "Actual360" 是
issuePrice DOUBLE 发行价格 是
currency STRING 货币,默认为 "CNY" 否
discountCurve STRING 定价时参考的贴现曲线名称,如 "CNY_TRASURY_BOND" 否
spreadCurve STRING 定价时参考的利差曲线名称 否
subType STRING

债券子类型,中国债券可选值为:

  • "TREASURY_BOND":国债

  • "CENTRAL_BANK_BILL":央行票据

  • "CDB_BOND":政策性金融债(国开)

  • "EIBC_BOND":政策性金融债(进出口行)

  • "ADBC_BOND":政策性金融债(农发行)。

  • "MTN":中期票据

  • "CORP_BOND":企业债。

  • "UNSECURED_CORP_BOND":无担保企业债

  • "SHORT_FIN_BOND":短期融资券

  • "NCD":同业存单

  • "LOC_GOV_BOND":地方政府债

  • "COMM_BANK_FIN_BOND":商业银行普通金融债

  • "BANK_SUB_CAP_BOND":商业银行二级资本债

  • "ABS":资产支持证券

  • "PPN":非公开发行债

否
creditRating STRING 信用等级类型,可选值为:"B", "BB", "BBB", "BBB+", "A-", "A", "A+", "AA-", "AA", "AA+", "AAA-", "AAA", "AAA+" 否

零息债

字段名 类型 描述 是否必填
productType STRING 固定填 "Cash" 是
assetType STRING 固定填 "Bond" 是
bondType STRING 固定填 "ZeroCouponBond" 是
nominal DOUBLE 名义金额,默认值 100 否
instrumentId STRING 债券代码,如 "250401.IB" 否
start DATE 起息日 是
maturity DATE 到期日 是
coupon DOUBLE 票面利率,如 0.03 表示 3% 是
frequency STRING 付息频率 否
dayCountConvention STRING 日期计数惯例,可选 "ActualActualISDA", "ActualActualISMA", "Actual365", "Actual360" 是
currency STRING 货币,默认为 "CNY" 否
discountCurve STRING 定价时参考的贴现曲线名称,如 "CNY_TRASURY_BOND" 否
spreadCurve STRING 定价时参考的利差曲线名称 否
subType STRING

债券子类型,中国债券可选值为:

  • "TREASURY_BOND":国债

  • "CENTRAL_BANK_BILL":央行票据

  • "CDB_BOND":政策性金融债(国开)

  • "EIBC_BOND":政策性金融债(进出口行)

  • "ADBC_BOND":政策性金融债(农发行)。

  • "MTN":中期票据

  • "CORP_BOND":企业债。

  • "UNSECURED_CORP_BOND":无担保企业债

  • "SHORT_FIN_BOND":短期融资券

  • "NCD":同业存单

  • "LOC_GOV_BOND":地方政府债

  • "COMM_BANK_FIN_BOND":商业银行普通金融债

  • "BANK_SUB_CAP_BOND":商业银行二级资本债

  • "ABS":资产支持证券

  • "PPN":非公开发行债

否
creditRating STRING 信用等级类型,可选值为:"B", "BB", "BBB", "BBB+", "A-", "A", "A+", "AA-", "AA", "AA+", "AAA-", "AAA", "AAA+" 否

固定利率债

字段名 类型 描述 是否必填
productType STRING 固定填 "Cash" 是
assetType STRING 固定填 "Bond" 是
bondType STRING 固定填 "FixedRateBond" 是
nominal DOUBLE 名义金额,默认值 100 否
instrumentId STRING 债券代码,如 "250401.IB" 否
start DATE 起息日 是
maturity DATE 到期日 是
coupon DOUBLE 票面利率,如0.03表示3% 是
frequency STRING 付息频率 是
dayCountConvention STRING 日期计数惯例,可选 "ActualActualISDA", "ActualActualISMA", "Actual365", "Actual360" 是
currency STRING 货币,默认为 "CNY" 否
discountCurve STRING 定价时参考的贴现曲线名称,如 "CNY_TRASURY_BOND" 否
spreadCurve STRING 定价时参考的利差曲线名称 否
subType STRING

债券子类型,中国债券可选值为:

  • "TREASURY_BOND":国债

  • "CENTRAL_BANK_BILL":央行票据

  • "CDB_BOND":政策性金融债(国开)

  • "EIBC_BOND":政策性金融债(进出口行)

  • "ADBC_BOND":政策性金融债(农发行)。

  • "MTN":中期票据

  • "CORP_BOND":企业债。

  • "UNSECURED_CORP_BOND":无担保企业债

  • "SHORT_FIN_BOND":短期融资券

  • "NCD":同业存单

  • "LOC_GOV_BOND":地方政府债

  • "COMM_BANK_FIN_BOND":商业银行普通金融债

  • "BANK_SUB_CAP_BOND":商业银行二级资本债

  • "ABS":资产支持证券

  • "PPN":非公开发行债

否
creditRating STRING 信用等级类型,可选值为:"B", "BB", "BBB", "BBB+", "A-", "A", "A+", "AA-", "AA", "AA+", "AAA-", "AAA", "AAA+" 否

浮动利率债

字段名 类型 描述 是否必填
productType STRING 固定填 "Cash" 是
assetType STRING 固定填 "Bond" 是
bondType STRING 固定填 "FloatingRateBond" 是
nominal DOUBLE 名义金额,默认值为 100 否
instrumentId STRING 债券代码,如 "1680437.IB" 否
start DATE 起息日 是
maturity DATE 到期日 是
iborIndex STRING 参考利率,如 "LPR_1Y" 是
lastFixing DOUBLE 上一次定息日的参考利率值 是
spread DOUBLE 利差,默认值为 0.0 否
frequency STRING 付息频率 是
dayCountConvention STRING 日期计数惯例,可选 "ActualActualISDA"、"ActualActualISMA"、"Actual365"、"Actual360" 是
fixingOffsetDays INT 下一起息日与定息日之间的天数,默认值为 1 否
currency STRING 货币,默认值为 "CNY" 否
cashFlow TABLE 债券现金流表 否
discountCurve STRING 定价时参考的贴现曲线名称,如 "CNY_TREASURY_BOND" 否
spreadCurve STRING 定价时参考的利差曲线名称 否
forwardCurve STRING 定价时参考的远期曲线名称 否
subType STRING

债券子类型,中国债券可选值为:

  • "TREASURY_BOND":国债

  • "CENTRAL_BANK_BILL":央行票据

  • "CDB_BOND":政策性金融债(国开)

  • "EIBC_BOND":政策性金融债(进出口行)

  • "ADBC_BOND":政策性金融债(农发行)

  • "MTN":中期票据

  • "CORP_BOND":企业债

  • "UNSECURED_CORP_BOND":无担保企业债

  • "SHORT_FIN_BOND":短期融资券

  • "NCD":同业存单

  • "LOC_GOV_BOND":地方政府债

  • "COMM_BANK_FIN_BOND":商业银行普通金融债

  • "BANK_SUB_CAP_BOND":商业银行二级资本债

  • "ABS":资产支持证券

  • "PPN":非公开发行债

否
creditRating STRING 信用等级,可选 "B"、"BB"、"BBB"、"BBB+"、"A-"、"A"、"A+"、"AA-"、"AA"、"AA+"、"AAA-"、"AAA"、"AAA+" 否

含权债

字段名 类型 描述 是否必填
productType STRING 固定填 "Cash" 是
assetType STRING 固定填 "Bond" 是
bondType STRING 固定填 "OptionBond" 是
nominal DOUBLE 名义金额,默认值100 否
instrumentId STRING 债券代码,如 "242659.SH" 否
start DATE 起息日 是
maturity DATE 到期日 是
coupon DOUBLE 票面利率,如0.03表示3% 是
frequency DOUBLE 付息频率,如1表示每年付息1次 是
principalRatio DOUBLE 类型向量

提前偿还型债券的本金摊还比例向量。

向量长度等于债券期限,各元素表示对应期间偿还的本金占初始本金的比例,且所有元素之和为1。默认为空。

否
exerciseDates DATE 类型向量 含权债为行权时间的向量。默认为空。 否
hasCallOption BOOL 该债券发行人是否有赎回权 是
hasPutOption BOOL 该债券投资者是否有回售权 是
hasCouponAdjust BOOL 该债券发行人是否有票面利率调整权 是
newCoupon DOUBLE 票面利率调整后的新利率。当 hasCouponAdjust = true 且已到调整时点时生效。若 newCoupon 为空(默认值),则仍使用原票面利率。 否
dayCountConvention STRING 日期计数惯例,可选 "ActualActualISDA", "ActualActualISMA", "Actual365", "Actual360",国债默认为 "Actual365",其他默认为 "ActualActualISMA" 是
subType STRING

债券子类型,中国债券可选值为:

  • "TREASURY_BOND":国债

  • "CENTRAL_BANK_BILL":央行票据

  • "CDB_BOND":政策性金融债(国开)

  • "EIBC_BOND":政策性金融债(进出口行)

  • "ADBC_BOND":政策性金融债(农发行)。

  • "MTN":中期票据

  • "CORP_BOND":企业债。

  • "UNSECURED_CORP_BOND":无担保企业债

  • "SHORT_FIN_BOND":短期融资券

  • "NCD":同业存单

  • "LOC_GOV_BOND":地方政府债

  • "COMM_BANK_FIN_BOND":商业银行普通金融债

  • "BANK_SUB_CAP_BOND":商业银行二级资本债

  • "ABS":资产支持证券

  • "PPN":非公开发行债

默认值为空。

否
creditRating STRING 信用等级类型,可选值为:"B", "BB", "BBB", "BBB+", "A-", "A", "A+", "AA-", "AA", "AA+", "AAA-", "AAA", "AAA+"。默认值为空。 否

曲线字段要求

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Curve" 是
referenceDate DATE 参考日期 是
curveType STRING 固定填 "IrYieldCurve" 是
dayCountConvention STRING

曲线的日期计数惯例,可选值为:

  • "Actual360":实际天数除以360

  • "Actual365":实际天数除以365(不区分闰年)

  • "ActualActualISMA":实际天数/实际天数(ISMA规则)

  • "ActualActualISDA":实际天数/实际天数(ISDA规则)

是
interpMethod STRING

内插方法,可选值为:

  • "Linear":线性插值

  • "CubicSpline":三次样条插值

  • "CubicHermiteSpline":三次埃尔米特样条插值

是
extrapMethod STRING

外插方法,可选值为:

  • "Flat":平插

  • "Linear":线性插值

是
dates DATE 向量 数据点的日期 是
values DOUBLE 向量 数据点的值,与 dates 中的元素一一对应 是
curveName STRING 曲线名称 否
currency STRING 货币,可选值为"CNY", "USD", "EUR", "GBP", "JPY", "HKD" 是
compounding STRING

复利类型,可选值为:

  • "Simple":单利

  • "Compounded":离散复利

  • "Continuous":连续复利

是
settlement DATE 结算日,如果指定了结算日,则后续期限间隔的计算都将从 settlement 开始,而不是 referenceDate 否
frequency INTEGRAL或 STRING

计息频率,可选值为:

  • 1 或 "Annual":每年付息一次

  • 2 或 "Semiannual":每半年付息一次

  • 3 或 "EveryFourthMonth":每四个月付息一次

  • 4 或 "Quarterly":每季度付息一次

  • 6 或 "BiMonthly":每两月付息一次

  • 12 或 "Monthly":每月付息一次

  • 13 或 "EveryFourthWeek":每四周付息一次

  • 26 或 "BiWeekly":每两周付息一次

  • 52 或 "Weekly":每周付息一次

  • 365 或 "Daily":每日付息一次

  • 999 或 "Other":其他计息频率

否
curveModel STRING

曲线构建模型,可选值为 "Bootstrap"(默认),"NS","NSS"。

当取值 "NSS" 或 "NS",无需传 interpMethod、extrapMethod、dates、values 字段。

否
curveParams DICT

模型的参数,当 curveModel取值 "NSS" 或 "NS" 时必填:

  • curveModel = "NS":应包含键 'beta0', 'beta1', 'beta2', 'lambda'

  • curveModel = "NSS":应包含键'beta0', ‘beta1', 'beta2', 'beta3', 'lambda0', 'lambda1'

否

相关函数:createPricingEngine