fxRangeAccrualOptionPricer
首发版本:3.00.6
语法
fxRangeAccrualOptionPricer(instrument, pricingDate, spot, domesticCurve, foreignCurve, volSurf, [setting])
详情
对外汇区间累计期权定价。
参数
instrument INSTRUMENT 类型标量或向量,指定需要定价的外汇区间累计期权。字段要求参考产品字段说明。
pricingDate DATE 类型标量或向量,指定定价日期。
spot 数值类型标量或向量,指定汇率即期价格。
domesticCurve MKTDATA 标量或向量,指定本币折现曲线(IrYieldCurve)。
foreignCurve MKTDATA 标量或向量,指定外币折现曲线(IrYieldCurve)。
volSurf MKTDATA 标量或向量,指定外汇波动率曲面(FxVolatilitySurface)。
setting 可选参数,字典(Dictionary<STRING, ANY>),用于指定是否计算希腊字母(Greeks)所代表的期权价格敏感性指标。
| 键 | 值 | 描述 |
|---|---|---|
| calcDelta | 布尔值,默认为 false | 是否计算 Delta,即期权价格相对于标的资产价格的敏感性。 |
| calcGamma | 布尔值,默认为 false | 是否计算 Gamma,即期权 Delta 相对于标的资产价格的敏感性。 |
| calcVega | 布尔值,默认为 false | 是否计算 Vega,即期权价格相对于标的资产波动率的敏感性。 |
| calcTheta | 布尔值,默认为 false | 是否计算 Theta,即期权价格相对于时间变化的敏感性。 |
| calcRhoDomestic | 布尔值,默认为 false | 是否计算本币利率 Rho,即期权价格对本币于无风险利率的一阶敏感度。 |
| calcRhoForeign | 布尔值,默认为 false | 是否计算外币利率 Rho,即期权价格对外币于无风险利率的一阶敏感度。 |
| calcVolga | 布尔值,默认为 false | 是否计算 Vega 对波动率的敏感度。 |
| calcVanna | 布尔值,默认为 false | 是否计算 Delta 对波动率的敏感度。 |
返回值
- 若不指定 setting 参数,返回 DOUBLE 类型标量,表示期权的净现值(NPV),即期权的理论价格。
- 指定 setting 参数时,返回一个字典(Dictionary<STRING, DOUBLE>),包含期权的净现值(NPV)以及希腊字母(Greeks)所代表的期权价格敏感性指标。有关敏感性指标的说明请参考 setting 参数说明。
例子
例1:使用 fxRangeAccrualOptionPricer 对一笔 EURUSD 外汇区间累计期权定价。示例中首先构造期权合约,并准备定价所需的市场数据,包括即期汇率、境内外无风险收益率曲线和外汇波动率曲面;随后通过 setting 参数指定需要计算的风险指标(Greeks),最后调用 fxRangeAccrualOptionPricer 返回期权价格及相应的风险指标。
// ==========================================
// 1. 基础环境与全局变量设置
// ==========================================
pricingDate = 2025.12.16 // 定价日期(计算估值的基准日)
ccyPair = "EURUSD" // 交易的货币对(欧元兑美元)
// ==========================================
// 2. 定义外汇区间累积期权(Range Accrual Option)的结构
// ==========================================
option = {
"productType": "Option",
"optionType": "RangeAccrualOption", // 期权类型:区间累积期权
"assetType": "FxRangeAccrualOption", // 资产类型:外汇区间累积期权
"instrumentId": "0001", // 标的资产代码/合约编号
"notionalAmount": 1000000.0, // 名义本金:1,000,000
"notionalCurrency": "USD", // 名义本金货币:美元
"start": 2025.12.17, // 累积观察期开始日
"maturity": 2026.03.16, // 期权到期日
"underlying": "EURUSD", // 标的资产:EURUSD汇率
"direction": "Sell", // 交易方向:卖出 (Short position)
"dayCountConvention": "Actual365", // 计息天数惯例:实际天数/365
"lowerBarrier": 1.1160, // 累积区间的下限(汇率低于此值不累积计息)
"upperBarrier": 1.2335, // 累积区间的上限(汇率高于此值不累积计息)
"reportCurrency": "USD", // 财报/输出结果的本位币:美元
"payoffType": "Call" // 行权回报类型:看涨
}
spot = 1.1748 // 定价日的 EURUSD 即期汇率 (Spot Rate)
instrument = parseInstrument(option) // 解析期权结构体,转换为DolphinDB定价引擎识别的内部对象
// ==========================================
// 3. 构建市场数据:本币与外币的利率收益率曲线
// ==========================================
// 关键期限节点日期:对应后续波动率和利率期限
curveDates = [2026.02.24, 2026.05.20]
// 3.1 本币(Domestic / 计价货币)利率曲线:这里是 USD
domesticCurveInfo = {
"mktDataType": "Curve",
"curveType": "IrYieldCurve", // 市场数据类型:利率收益率曲线
"referenceDate": pricingDate, // 曲线基准日期
"currency": "USD", // 货币:美元
"dayCountConvention": "Actual360", // 货币市场天数惯例:Actual/360
"compounding": "Simple", // 复利方式:单利 (Simple)
"interpMethod": "Linear", // 插值方法:线性插值
"extrapMethod": "Flat", // 外推方法:平推 (Flat)
"frequency": "Annual", // 利率频次:年化
"dates": curveDates, // 期限节点
"values":[0.03703, 0.03703] // 对应的 USD 利率值(年化 3.703%)
}
// 3.2 外币(Foreign / 基础货币)利率曲线:这里是 EUR
foreignCurveInfo = {
"mktDataType": "Curve",
"curveType": "IrYieldCurve",
"referenceDate": pricingDate,
"currency": "EUR", // 货币:欧元
"dayCountConvention": "Actual360",
"compounding": "Simple",
"interpMethod": "Linear",
"extrapMethod": "Flat",
"frequency": "Annual",
"dates": curveDates,
"values":[0.01925, 0.01925] // 对应的 EUR 利率值(年化 1.925%)
}
// 解析并生成内部的利率曲线对象
domesticCurve = parseMktData(domesticCurveInfo)
foreignCurve = parseMktData(foreignCurveInfo)
// ==========================================
// 4. 构建市场数据:外汇波动率曲面 (Volatility Surface)
// ==========================================
surfInfo = {
"surfaceName": "EURUSD",
"mktDataType": "Surface",
"surfaceType": "FxVolatilitySurface", // 市场数据类型:外汇波动率曲面
"referenceDate": pricingDate, // 曲面基准日期
"smileMethod": "Linear", // 波动率微笑插值方法:线性
"termDates": curveDates, // 期限节点
// 定义不同到期日、不同执行价(Strikes)下的隐形波动率(这里简化为了常数波动率 5.736%)
"volSmiles":[
{"strikes": [1.1, 1.2, 1.3], "vols": [0.05736, 0.05736, 0.05736]}, // 节点1的波动率
{"strikes": [1.1, 1.2, 1.3], "vols": [0.05736, 0.05736, 0.05736]} // 节点2的波动率
],
"currencyPair": "EURUSD" // 货币对
}
surf = parseMktData(surfInfo) // 解析并生成内部的波动率曲面对象
// ==========================================
// 5. 配置计算参数(选择需要输出的风险指标 Greeks)
// ==========================================
setting = dict(STRING, ANY)
setting["calcDelta"] = true // 计算 Delta(对标的资产价格的敏感度)
setting["calcGamma"] = true // 计算 Gamma(Delta对标的资产价格的敏感度)
setting["calcVega"] = true // 计算 Vega(对波动率的敏感度)
setting["calcTheta"] = true // 计算 Theta(对时间流逝的敏感度)
setting["calcRhoDomestic"] = true // 计算本币利率的 Rho(对美元利率的敏感度)
setting["calcRhoForeign"] = true // 计算外币利率的 Rho(对欧元利率的敏感度)
setting["calcVolga"] = true // 计算 Volga(Vega对波动率的二阶敏感度)
setting["calcVanna"] = true // 计算 Vanna(Delta对波动率的交叉敏感度)
// ==========================================
// 6. 调用定价引擎并输出结果
// ==========================================
res = fxRangeAccrualOptionPricer(instrument, pricingDate, spot, domesticCurve, foreignCurve, surf, setting)
res
/* ==========================================
输出结果解析 (Output)
==========================================
npv: 568,710.38 -> 期权净现值 (Net Present Value),当前合约的理论价值。
delta: -12,700,391.97 -> Delta,即期汇率每变动1单位,期权价值的变化量(负数反映了卖出方向)。
gamma: 1,317,948.28 -> Gamma,即期汇率变动引起的Delta变化率。
vega: 14,960.41 -> Vega,隐含波动率每变动1%(或1单位),期权价值的变化量。
theta: -1,144.35 -> Theta,时间每过去一天,期权价值的流失速度。
rhoDomestic: -36,601.48 -> 本币 Rho。
rhoForeign: 38,016.45 -> 外币 Rho。
volga: 4,702.96 -> Volga,二阶波动率风险(波动率的波动)。
vanna: 3,237,277.66 -> Vanna,汇率与波动率的交叉风险。
*/
例2:使用 fxRangeAccrualOptionPricer 对一笔 USDJPY 外汇区间累计期权定价。
// ==========================================
// 1. 基础环境与全局变量设置
// ==========================================
pricingDate = 2025.12.16 // 定价日期(计算估值的基准日)
ccyPair = "USDJPY" // 交易的货币对(美元兑日元)
// ==========================================
// 2. 定义外汇区间累积期权(Range Accrual Option)的结构
// ==========================================
option = {
"productType": "Option",
"optionType": "RangeAccrualOption", // 期权类型:区间累积期权
"assetType": "FxRangeAccrualOption", // 资产类型:外汇区间累积期权
"instrumentId": "0001", // 标的资产代码/合约编号
"notionalAmount": 1000000.0, // 名义本金:1,000,000
"notionalCurrency": "USD", // 名义本金货币:美元
"start": 2025.12.17, // 累积观察期开始日
"maturity": 2026.03.16, // 期权到期日
"underlying": "USDJPY", // 标的资产:USDJPY汇率
"direction": "Sell", // 交易方向:卖出 (Short position)
"dayCountConvention": "Actual360", // 期权自身的计息天数惯例:实际天数/360
"lowerBarrier": 147.1692, // 累积区间下限(汇率低于 147.1692 则当天不累积利息)
"upperBarrier": 162.6608, // 累积区间上限(汇率高于 162.6608 则当天不累积利息)
"reportCurrency": "USD", // 财报/输出结果的本位币:美元
"payoffType": "Call" // 行权回报类型:看涨
}
spot = 154.92 // 定价日的 USDJPY 即期汇率 (Spot Rate)
instrument = parseInstrument(option) // 解析期权结构体,转换为DolphinDB定价引擎识别的内部对象
// ==========================================
// 3. 构建市场数据:本币与外币的利率收益率曲线
// ==========================================
// 关键期限节点日期:对应后续波动率和利率期限
curveDates = [2026.02.24, 2026.05.20]
// 3.1 本币(Domestic / 计价货币)利率曲线:对于 USDJPY,本币是 JPY
domesticCurveInfo = {
"mktDataType": "Curve",
"curveType": "IrYieldCurve", // 市场数据类型:利率收益率曲线
"referenceDate": pricingDate, // 曲线基准日期
"currency": "JPY", // 货币:日元
"dayCountConvention": "Actual360", // 日元市场天数惯例:Actual/360
"compounding": "Simple", // 复利方式:单利
"interpMethod": "Linear", // 插值方法:线性插值
"extrapMethod": "Flat", // 外推方法:平推
"frequency": "Annual", // 利率频次:年化
"dates": curveDates, // 期限节点
"values":[0.00434, 0.00434] // 对应的 JPY 利率值(年化 0.434%)
}
// 3.2 外币(Foreign / 基础货币)利率曲线:对于 USDJPY,外币是 USD
foreignCurveInfo = {
"mktDataType": "Curve",
"curveType": "IrYieldCurve",
"referenceDate": pricingDate,
"currency": "USD", // 货币:美元
"dayCountConvention": "Actual365", // 美元市场天数惯例:Actual/365
"compounding": "Simple",
"interpMethod": "Linear",
"extrapMethod": "Flat",
"frequency": "Annual",
"dates": curveDates,
"values":[0.03703, 0.03703] // 对应的 USD 利率值(年化 3.703%)
}
// 解析并生成内部的利率曲线对象
domesticCurve = parseMktData(domesticCurveInfo)
foreignCurve = parseMktData(foreignCurveInfo)
// ==========================================
// 4. 构建市场数据:外汇波动率曲面 (Volatility Surface)
// ==========================================
surfInfo = {
"surfaceName": "USDJPY",
"mktDataType": "Surface",
"surfaceType": "FxVolatilitySurface", // 市场数据类型:外汇波动率曲面
"referenceDate": pricingDate, // 曲面基准日期
"smileMethod": "Linear", // 波动率微笑插值方法:线性
"termDates": curveDates, // 期限节点
// 定义不同到期日、在 USDJPY 常见执行价(Strikes)下的隐形波动率(常数波动率设为 8.815%)
"volSmiles":[
{"strikes": [140.0, 150.0, 160.0], "vols": [0.08815, 0.08815, 0.08815]}, // 节点1的波动率
{"strikes": [140.0, 150.0, 160.0], "vols": [0.08815, 0.08815, 0.08815]} // 节点2的波动率
],
"currencyPair": "USDJPY" // 货币对
}
surf = parseMktData(surfInfo) // 解析并生成内部的波动率曲面对象
// ==========================================
// 5. 配置计算参数(选择需要输出的风险指标 Greeks)
// ==========================================
setting = dict(STRING, ANY)
setting["calcDelta"] = true // 计算 Delta(对标的汇率价格的敏感度)
setting["calcGamma"] = true // 计算 Gamma(Delta对标的汇率价格的敏感度)
setting["calcVega"] = true // 计算 Vega(对波动率的敏感度)
setting["calcTheta"] = true // 计算 Theta(对时间流逝的敏感度)
setting["calcRhoDomestic"] = true // 计算本币利率的 Rho(对日元利率的敏感度)
setting["calcRhoForeign"] = true // 计算外币利率的 Rho(对美元利率的敏感度)
setting["calcVolga"] = true // 计算 Volga(Vega对波动率的二阶敏感度)
setting["calcVanna"] = true // 计算 Vanna(Delta对波动率的交叉敏感度)
// ==========================================
// 6. 调用定价引擎并输出结果
// ==========================================
res = fxRangeAccrualOptionPricer(instrument, pricingDate, spot, domesticCurve, foreignCurve, surf, setting)
res
/* ==========================================
输出结果解析 (Output)
==========================================
npv: 455,601.07 -> 期权净现值 (Net Present Value),当前卖出该期权合约的理论价值。
delta: -6,488,682.37 -> Delta,USDJPY即期汇率每变动1单位,期权价值的变化量(负数反映了卖出方向)。
gamma: 1,299,231.79 -> Gamma,即期汇率变动引起的Delta变化率。
vega: 15,632.86 -> Vega,隐含波动率每变动1%(或1单位),期权价值的变化量。
theta: -1,591.54 -> Theta,时间每过去一天,期权价值的流失速度(常见于期权卖方的负时间价值)。
rhoDomestic: -17,887.72 -> 本币 Rho。
rhoForeign: 19,000.95 -> 外币 Rho。
volga: 1,104.27 -> Volga,二阶波动率风险(波动率发生变化时,Vega的变化速度)。
vanna: 9,279.49 -> Vanna,汇率与波动率的交叉风险(汇率发生变化时,Vega的变化速度)。
*/
产品字段说明
| 字段名 | 类型 | 描述 | 是否必填 |
|---|---|---|---|
| productType | STRING | 固定填 "Option" | 是 |
| optionType | STRING | 固定填 "RangeAccrualOption" | 是 |
| assetType | STRING | 固定填 "FxRangeAccrualOption" | 是 |
| notionalAmount | DOUBLE | 名义本金金额,例如,1E7 | 是 |
| notionalCurrency | STRING | 名义本金货币,例如,"USD" | 是 |
| instrumentId | STRING | 金融工具 ID | 否 |
| start | DATE | 起息日 | 是 |
| maturity | DATE | 到期日 | 是 |
| underlying | STRING | 货币对,格式如:"EURUSD","EUR.USD" 或 "EUR/USD"。支持如下货币对:
|
是 |
| direction | STRING | 交易方向。可选值为:"Buy"、"Sell"。 | 否 |
| dayCountConvention | STRING | 日期计数惯例,可选 "ActualActualISDA", "ActualActualISMA", "Actual365", "Actual360" | 是 |
| lowerBarrier | DOUBLE | 区间下限 | 是 |
| upperBarrier | DOUBLE | 区间上限 | 是 |
| payoffType | STRING | 收益类型,可选值为 "Call"、 "Put"。 | 是 |
| reportCurrency | STRING | 报告货币 | 是 |
