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的变化速度)。
*/

相关函数:parseInstrumentparseMktData

产品字段说明

字段名 类型 描述 是否必填
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"。支持如下货币对:
  • "EURUSD":欧元兑美元
  • "USDJPY":美元兑日元
  • "USDCNY":美元兑人民币
  • "EURCNY":欧元兑人民币
  • "GBPCNY":英镑兑人民币
  • "JPYCNY":日元兑人民币
  • "HKDCNY":港币兑人民币
direction STRING 交易方向。可选值为:"Buy"、"Sell"。
dayCountConvention STRING 日期计数惯例,可选 "ActualActualISDA", "ActualActualISMA", "Actual365", "Actual360"
lowerBarrier DOUBLE 区间下限
upperBarrier DOUBLE 区间上限
payoffType STRING 收益类型,可选值为 "Call"、 "Put"。
reportCurrency STRING 报告货币