eqRangeAccrualOptionPricer
首发版本:3.00.6
语法
eqRangeAccrualOptionPricer(instrument, pricingDate, spot, discountCurve,
dividendCurve, volSurf, [setting], [model], [method])
详情
使用 Black-Scholes 模型和解析法,对权益类区间累计期权进行定价。权益类区间累计期权是一种路径依赖结构化衍生品,其收益取决于观察日上标的资产价格落在指定区间内的比例。
目前 model 仅支持 "BlackScholes",method 仅支持 "Analytic"。
参数
注意:所有输入向量必须等长;输入标量将自动扩展以匹配其它向量的长度。
instrument INSTRUMENT 类型标量或向量,表示待定价的权益类区间累计期权。该产品的关键字段详见产品字段说明。
pricingDate DATE 类型标量或向量,表示定价日期。
spot 数值类型标量或向量,表示标的资产的即期价格。
discountCurve MKTDATA 类型标量或向量(IrYieldCurve),表示折现曲线。该曲线可通过
parseMktData 构建。
dividendCurve MKTDATA 类型标量或向量(DividendCurve),表示股息曲线。该曲线可通过
eqDividendCurveBuilder 构建。
volSurf MKTDATA 类型标量或向量(EqVolatilitySurface),表示权益类期权波动率曲面。该曲面可通过
eqVolatilitySurfaceBuilder 构建。
setting 可选参数,一个字典,用于指定是否计算 Greeks。支持以下 key,value 均为 BOOL 类型,默认值均为 false:
| key | 描述 |
|---|---|
| calcDelta | 是否计算 Delta,即期权价格相对于标的资产价格的敏感性。 |
| calcGamma | 是否计算 Gamma,即 Delta 相对于标的资产价格的敏感性。 |
| calcVega | 是否计算 Vega,即期权价格相对于标的资产波动率的敏感性。 |
| calcTheta | 是否计算 Theta,即期权价格相对于时间变化的敏感性。 |
| calcRhoIr | 是否计算 RhoIr,即期权价格相对于无风险利率的敏感性。 |
| calcRhoDividend | 是否计算 RhoDividend,即期权价格相对于股息收益率变化的敏感性。 |
model 可选参数,STRING 类型标量,表示定价模型。当前仅支持 "BlackScholes",默认值为 "BlackScholes"。
method 可选参数,STRING 类型标量,表示定价方法。当前仅支持 "Analytic",默认值为 "Analytic"。
返回值
- 若不指定 setting 参数,返回 DOUBLE 类型标量或向量,表示期权的净现值(NPV)。
- 若指定 setting 参数,返回字典或字典向量,包含 npv 以及通过 setting 指定计算的 Greeks。可能包含的 key 包括 npv、delta、gamma、vega、theta、rhoIr、rhoDividend。
例子
以下示例构造贴现曲线、股息曲线和权益期权波动率曲面,然后对一笔权益类区间累计期权进行定价。
// =====================================================
// 一、设置定价日、参考日和标的现货价格
// =====================================================
pricingDate = 2026.02.13
referenceDate = pricingDate
spot = 3.1140
// =====================================================
// 二、输入期权市场数据
// =====================================================
termDates = [2026.02.25, 2026.03.25, 2026.06.24, 2026.09.23]
callPrices = matrix(
[0.2655, 0.2155, 0.1656, 0.1156, 0.0318, 0.0039, 0.0015, 0.0008, 0.0003, 0.0001],
[0.2690, 0.2248, 0.1770, 0.1385, 0.0697, 0.0303, 0.0128, 0.0069, 0.0046, 0.0036],
[0.3030, 0.2655, 0.2278, 0.1970, 0.1431, 0.0991, 0.0677, 0.0479, 0.0346, 0.0254],
[0.3330, 0.2987, 0.2681, 0.2388, 0.1883, 0.1448, 0.1139, 0.0899, 0.0715, 0.0574]
)
putPrices = matrix(
[0.0004, 0.0009, 0.0021, 0.0045, 0.0218, 0.0939, 0.1901, 0.2896, 0.3908, 0.4916],
[0.0125, 0.0165, 0.0229, 0.0316, 0.0616, 0.1250, 0.2029, 0.2967, 0.3962, 0.4948],
[0.0396, 0.0507, 0.0634, 0.0798, 0.1253, 0.1814, 0.2499, 0.3321, 0.4175, 0.5077],
[0.0651, 0.0798, 0.0973, 0.1180, 0.1662, 0.2250, 0.2952, 0.3651, 0.4508, 0.5342]
)
strikes = matrix(
[2.8500, 2.9000, 2.9500, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000],
[2.8500, 2.9000, 2.9500, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000],
[2.8500, 2.9000, 2.9500, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000],
[2.8500, 2.9000, 2.9500, 3.0000, 3.1000, 3.2000, 3.3000, 3.4000, 3.5000, 3.6000]
)
// =====================================================
// 三、构造 CNY 折现零息收益率曲线
// =====================================================
discountCurveDict = {
"mktDataType": "Curve", "curveType": "IrYieldCurve", "curveName": "CNY_FR_007",
"referenceDate": referenceDate, "currency": "CNY", "dayCountConvention": "Actual365",
"compounding": "Continuous", "interpMethod": "Linear", "extrapMethod": "Flat",
"dates": [referenceDate + 1, referenceDate + 7, referenceDate + 14, referenceDate + 21,
referenceDate + 30, referenceDate + 61, referenceDate + 91, referenceDate + 182,
referenceDate + 273, referenceDate + 365, referenceDate + 547, referenceDate + 730,
referenceDate + 1095],
"values": [0.016134, 0.016107, 0.016102, 0.016102, 0.016102, 0.016103, 0.016029,
0.015832, 0.015889, 0.015898, 0.015561, 0.015583, 0.015892]
}
discountCurve = parseMktData(discountCurveDict)
// =====================================================
// 四、通过 Call-Put Parity 构造股息曲线
// =====================================================
dividendCurve = eqDividendCurveBuilder(
referenceDate, termDates, "CallPutParity", ,
callPrices, putPrices, strikes, spot, discountCurve, "Actual365", "510050"
)
// =====================================================
// 五、整理用于构造波动率曲面的期权价格
// =====================================================
optionPrices = matrix(
[0.0004, 0.0009, 0.0021, 0.0045, 0.0218, 0.0039, 0.0015, 0.0008, 0.0003, 0.0001],
[0.0125, 0.0165, 0.0229, 0.0316, 0.0616, 0.0303, 0.0128, 0.0069, 0.0046, 0.0036],
[0.0396, 0.0507, 0.0634, 0.0798, 0.1253, 0.0991, 0.0677, 0.0479, 0.0346, 0.0254],
[0.0651, 0.0798, 0.0973, 0.1180, 0.1662, 0.1448, 0.1139, 0.0899, 0.0715, 0.0574]
)
payoffTypes = matrix(
["Put", "Put", "Put", "Put", "Put", "Call", "Call", "Call", "Call", "Call"],
["Put", "Put", "Put", "Put", "Put", "Call", "Call", "Call", "Call", "Call"],
["Put", "Put", "Put", "Put", "Put", "Call", "Call", "Call", "Call", "Call"],
["Put", "Put", "Put", "Put", "Put", "Call", "Call", "Call", "Call", "Call"]
)
// =====================================================
// 六、构造股票期权 SABR 波动率曲面
// =====================================================
volSurface = eqVolatilitySurfaceBuilder(
referenceDate, termDates, strikes, optionPrices, payoffTypes, spot,
discountCurve, dividendCurve, "SABR", "50ETF_SABR_20260213"
)
// =====================================================
// 七、构造股票区间累计期权产品
// =====================================================
option = {
"productType": "Option",
"optionType": "RangeAccrualOption",
"assetType": "EqRangeAccrualOption",
"instrumentId": "0001",
"notionalAmount": 1000000.0,
"notionalCurrency": "CNY",
"maturity": 2026.06.01,
"delivery": 2026.06.01,
"underlying": "50ETF",
"direction": "Buy",
"dayCountConvention": "Actual365",
"lowerBarrier": 2.95,
"upperBarrier": 3.25,
"coupon": 0.1,
"fixingDates": [2026.04.01, 2026.05.01],
"discountCurve": "CNY_FR_007",
"dividendCurve": "510050"
}
instrument = parseInstrument(option)
// =====================================================
// 八、设置定价输出项
// =====================================================
setting = {
"calcDelta": true,
"calcGamma": true,
"calcVega": true,
"calcTheta": true,
"calcRhoIr": true,
"calcRhoDividend": true
}
// =====================================================
// 九、调用股票区间累计期权定价器
// =====================================================
result = eqRangeAccrualOptionPricer(
instrument,
pricingDate,
spot,
discountCurve,
dividendCurve,
volSurface,
setting
)
// =====================================================
// 十、输出定价结果
// =====================================================
print(result)
产品字段说明
| 字段名 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
| productType | STRING | 固定填 "Option"。 | 是 |
| optionType | STRING | 固定填 "RangeAccrualOption"。 | 是 |
| assetType | STRING | 固定填 "EqRangeAccrualOption"。 | 是 |
| instrumentId | STRING | 合约代码,场外期权可自定义。 | 否 |
| maturity | DATE | 到期日。 | 是 |
| delivery | DATE | 交割日。默认值等于 maturity。 | 否 |
| coupon | DOUBLE | 票息。 | 是 |
| lowerBarrier | DOUBLE | 区间下限。 | 是 |
| upperBarrier | DOUBLE | 区间上限。 | 是 |
| fixingDates | DATE 向量 | 观察日序列,要求递增。 | 是 |
| direction | STRING | 买卖方向,可选 "Buy" 和 "Sell"。默认值为 "Buy"。 | 否 |
| dayCountConvention | STRING | 日期计数惯例,可选 "ActualActualISDA"、"ActualActualISMA"、"Actual365"、"Actual360"。 | 是 |
| underlying | STRING | 标的名称,例如 "50ETF"。 | 是 |
| notionalAmount | DOUBLE | 名义本金额。 | 是 |
| notionalCurrency | STRING | 名义本金货币。默认值为 "CNY"。 | 否 |
| discountCurve | STRING | 定价时参考的贴现曲线名称。默认值为空字符串。 | 否 |
| dividendCurve | STRING | 定价时参考的股息曲线名称。默认值为空字符串。 | 否 |
相关函数:parseInstrument、parseMktData、eqDividendCurveBuilder、eqVolatilitySurfaceBuilder
