eqDigitalOptionPricer
首发版本:3.00.6
语法
eqDigitalOptionPricer(instrument, pricingDate, spot, discountCurve,
dividendCurve, volSurf, [setting], [model], [method])
详情
对权益类数字期权进行定价。
目前,model 仅支持 "BlackScholes",method 仅支持 "Analytic"。
参数
instrument INSTRUMENT 类型标量或向量,表示需要定价的权益类数字期权。字段要求详见产品字段说明。
pricingDate DATE 类型标量或向量,表示定价日期。
spot 数值类型标量或向量,表示现货价格。
discountCurve MKTDATA 类型(IrYieldCurve)的标量或向量,表示折现曲线。
dividendCurve MKTDATA 类型(DividendCurve)的标量或向量,表示股息曲线。该曲线可通过
eqDividendCurveBuilder 构建。
volSurf MKTDATA 类型(VolatilitySurface)的标量或向量,表示权益类期权波动率曲面。该曲面可通过
eqVolatilitySurfaceBuilder 构建。
setting 可选参数,字典(Dictionary<STRING, BOOL>),用于指定是否计算希腊字母(Greeks)所代表的期权价格敏感性指标。可选键如下:
| 键 | 值 | 描述 |
|---|---|---|
| calcDelta | 布尔值,默认为 false | 是否计算 Delta,即期权价格相对于标的资产价格的敏感性。 |
| calcGamma | 布尔值,默认为 false | 是否计算 Gamma,即期权 Delta 相对于标的资产价格的敏感性。 |
| calcVega | 布尔值,默认为 false | 是否计算 Vega,即期权价格相对于标的资产波动率的敏感性。 |
| calcTheta | 布尔值,默认为 false | 是否计算 Theta,即期权价格相对于时间变化的敏感性。 |
| calcRho | 布尔值,默认为 false | 是否计算 Rho,即期权价格相对于利率变化的敏感性。 |
model 可选参数,STRING 类型标量,表示使用的模型。可选值为:
- BlackScholes:Black-Scholes 公式。
method 可选参数,STRING 类型标量,表示使用的方法。可选值为:
- Analytic:解析法。
返回值
- 若不指定 setting 参数,返回 DOUBLE 类型标量,表示期权的净现值(NPV),即期权的理论价格。
- 指定 setting 参数时,返回一个字典(Dictionary<STRING, DOUBLE>),包含期权的净现值(NPV)以及由 setting 指定的 Greeks 结果。
例子
注意:以下示例依赖已支持 EqDigitalOption 与
eqDigitalOptionPricer 的 DolphinDB 版本。
// =====================================================
// 一、构造股票数字期权产品
// =====================================================
eqDigitalOptionJson = {
"productType": "Option",
"optionType": "DigitalOption",
"assetType": "EqDigitalOption",
"instrumentId": "111222334",
"notionalCurrency": "CNY",
"notionalAmount": 1E8,
"maturity": 2026.03.25,
"strike": 3.2000,
"dayCountConvention": "Actual360",
"underlying": "CCC",
"payoffType": "Call",
"direction": "Buy",
"discountCurve": "discountCurve",
"dividendCurve": "dividendCurve"
}
instrument = parseInstrument(eqDigitalOptionJson)
// =====================================================
// 二、设置定价日、参考日和标的现货价格
// =====================================================
pricingDate = 2026.02.13
referenceDate = pricingDate
spot = 3.1140
// =====================================================
// 三、设置期权市场数据期限节点
// =====================================================
termDates = [
2026.02.25,
2026.03.25,
2026.06.24,
2026.09.23
]
// =====================================================
// 四、输入欧式 Call 期权市场价格矩阵
// =====================================================
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]
)
// =====================================================
// 五、输入欧式 Put 期权市场价格矩阵
// =====================================================
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"
)
// =====================================================
// 九、整理用于构造波动率曲面的期权价格数据
// =====================================================
optionExpiries = termDates
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,
optionExpiries,
strikes,
optionPrices,
payoffTypes,
spot,
discountCurve,
dividendCurve,
"SABR",
"50ETF_SABR_20260213"
)
// =====================================================
// 十二、设置定价输出项
// =====================================================
setting = {
"calcDelta": true,
"calcGamma": true,
"calcVega": true,
"calcTheta": true,
"calcRho": true
}
// =====================================================
// 十三、调用股票数字期权定价器
// =====================================================
result = eqDigitalOptionPricer(
instrument,
pricingDate,
spot,
discountCurve,
dividendCurve,
volSurface,
setting
)
// =====================================================
// 十四、输出定价结果
// =====================================================
print(result)
产品字段说明
| 字段名 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
| productType | STRING | 固定填 "Option"。 | 是 |
| optionType | STRING | 固定填 "DigitalOption"。 | 是 |
| assetType | STRING | 固定填 "EqDigitalOption"。 | 是 |
| instrumentId | STRING | 合约代码,场外期权可自定义。 | 否 |
| maturity | DATE | 到期日。 | 是 |
| strike | DOUBLE | 执行价格。 | 是 |
| dayCountConvention | STRING | 日期计数惯例,可选 "ActualActualISDA"、"ActualActualISMA"、"Actual365"、"Actual360"。 | 是 |
| direction | STRING | 买卖方向,可选 "Buy" 和 "Sell"。默认值为 "Buy"。 | 否 |
| payoffType | STRING | 收益类型,可选 "Call" 和 "Put"。 | 是 |
| underlying | STRING | 标的代码,例如 "510050"。 | 是 |
| notionalAmount | DOUBLE | 名义本金额。 | 是 |
| notionalCurrency | STRING | 名义本金货币。默认值为 "CNY"。 | 否 |
| discountCurve | STRING | 定价时参考的贴现曲线名称。默认值为空字符串。 | 否 |
| dividendCurve | STRING | 定价时参考的股息曲线名称。默认值为空字符串。 | 否 |
相关函数:parseInstrument、parseMktData、eqDividendCurveBuilder、eqVolatilitySurfaceBuilder
