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 |
债券子类型,中国债券可选值为:
|
否 |
| 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 |
债券子类型,中国债券可选值为:
|
否 |
| 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 |
债券子类型,中国债券可选值为:
|
否 |
| 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 |
债券子类型,中国债券可选值为:
|
否 |
| 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 |
债券子类型,中国债券可选值为:
默认值为空。 |
否 |
| 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 |
曲线的日期计数惯例,可选值为:
|
是 |
| interpMethod | STRING |
内插方法,可选值为:
|
是 |
| extrapMethod | STRING |
外插方法,可选值为:
|
是 |
| dates | DATE 向量 | 数据点的日期 | 是 |
| values | DOUBLE 向量 | 数据点的值,与 dates 中的元素一一对应 | 是 |
| curveName | STRING | 曲线名称 | 否 |
| currency | STRING | 货币,可选值为"CNY", "USD", "EUR", "GBP", "JPY", "HKD" | 是 |
| compounding | STRING |
复利类型,可选值为:
|
是 |
| settlement | DATE | 结算日,如果指定了结算日,则后续期限间隔的计算都将从 settlement 开始,而不是 referenceDate | 否 |
| frequency | INTEGRAL或 STRING |
计息频率,可选值为:
|
否 |
| curveModel | STRING |
曲线构建模型,可选值为 "Bootstrap"(默认),"NS","NSS"。 当取值 "NSS" 或 "NS",无需传 interpMethod、extrapMethod、dates、values 字段。 |
否 |
| curveParams | DICT |
模型的参数,当 curveModel取值 "NSS" 或 "NS" 时必填:
|
否 |
