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 向量

若输入为向量,返回 DOUBLE 类型向量(若未指定 setting)或字典组成的元组(若指定 setting)。

例子

对固定利率债券进行定价,计算 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

债券产品字段要求

贴现债

字段名 类型 描述 是否必填
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"
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 STRING 付息频率
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",无需传 interpMethodextrapMethoddatesvalues 字段。

curveParams DICT

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

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

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