fxDigitalOptionPricer

首发版本:3.00.6

语法

fxDigitalOptionPricer(instrument, pricingDate, spot, domesticCurve, foreignCurve, volSurf, [setting])

详情

对外汇数字期权进行定价,返回期权现值;也可以通过 setting 指定是否同时计算希腊字母(Greeks)。

参数

instrument INSTRUMENT 类型标量或向量,表示需要定价的外汇数字期权。外汇数字期权所需的关键字段,详见产品字段说明。

pricingDate DATE 类型标量或向量,表示定价日期。

spot 数值类型标量或向量,表示外汇即期价格。

domesticCurve MKTDATA 类型(IrYieldCurve)的标量或向量,表示本币贴现曲线。

foreignCurve MKTDATA 类型(IrYieldCurve)的标量或向量,表示外币贴现曲线。

volSurf 外汇波动率曲面,表示定价使用的波动率数据。

setting 可选参数,字典(Dictionary<STRING, ANY>),用于指定是否计算希腊字母(Greeks)所代表的期权价格敏感性指标。支持的键包括:

  • "calcDelta":是否计算 Delta,即期权价格相对于标的资产价格的一阶敏感度,默认为 false。
  • "calcGamma":是否计算 Gamma,即期权 Delta 相对于标的资产价格的二阶敏感度,默认为 false。
  • "calcVega":是否计算 Vega,即期权价格相对于标的资产波动率的一阶敏感度,默认为 false。
  • "calcTheta":是否计算 Theta,即期权价格相对于时间变化的敏感性,默认为 false。
  • "calcRhoDomestic":是否计算本币利率 Rho,即期权价格对本币无风险利率的一阶敏感度,默认为 false。
  • "calcRhoForeign":是否计算外币 Rho,即期权价格对外币无风险利率的一阶敏感度,默认为 false。
  • "calcVolga":是否计算 Vega 对波动率的二阶敏感度,默认为 false。
  • "calcVanna":是否计算 Delta 对波动率的交叉敏感度,默认为 false。

返回值

  • 未指定 setting 时,返回 DOUBLE 类型标量或向量,表示外汇数字期权的定价结果。
  • 指定 setting 时,返回一个字典(Dictionary<STRING, DOUBLE>),包含定价结果以及通过 setting 指定计算的 Greeks。

例子

例1. 给一笔货币对为 EURUSD 的数字期权定价。

// 定价基准日
pricingDate = 2025.12.16

// 交易货币对:EUR 为外币,USD 为本币
ccyPair = "EURUSD"

// 标的资产的即期汇率,即 1 EUR 可兑换 1.1748 USD
spot = 1.1748

// 定义外汇数字期权的合约结构
option = {
    "productType": "Option",
    "optionType": "DigitalOption",
    "assetType": "FxDigitalOption",
    "notionalCurrency": "EUR",
    "notionalAmount": 1E6,
    "strike": 1.1799999114260407,
    "direction": "Sell",
    "maturity": 2026.03.16,
    "payoffType": "Call",
    "reportCurrency": "USD",
    "dayCountConvention": "Actual365",
    "underlying": ccyPair
}
instrument = parseInstrument(option)

// 构建本币与外币的利率收益率曲线
curveDates = [2026.02.24, 2026.05.20]
domesticCurveInfo = {
    "mktDataType": "Curve",
    "curveType": "IrYieldCurve",
    "referenceDate": pricingDate,
    "currency": "USD",
    "dayCountConvention": "Actual360",
    "compounding": "Simple",
    "interpMethod": "Linear",
    "extrapMethod": "Flat",
    "frequency": "Annual",
    "dates": curveDates,
    "values": [0.03703, 0.03703]
}
foreignCurveInfo = {
    "mktDataType": "Curve",
    "curveType": "IrYieldCurve",
    "referenceDate": pricingDate,
    "currency": "EUR",
    "dayCountConvention": "Actual360",
    "compounding": "Simple",
    "interpMethod": "Linear",
    "extrapMethod": "Flat",
    "frequency": "Annual",
    "dates": curveDates,
    "values": [0.01924, 0.01924]
}
domesticCurve = parseMktData(domesticCurveInfo)
foreignCurve = parseMktData(foreignCurveInfo)

// 构建外汇波动率曲面
surfInfo = {
    "surfaceName": "EURUSD",
    "mktDataType": "Surface",
    "surfaceType": "FxVolatilitySurface",
    "referenceDate": pricingDate,
    "smileMethod": "Linear",
    "termDates": curveDates,
    "volSmiles": [
        {"strikes": [1.1, 1.2, 1.3], "vols": [0.05736, 0.05736, 0.05736]},
        {"strikes": [1.1, 1.2, 1.3], "vols": [0.05736, 0.05736, 0.05736]}
    ],
    "currencyPair": "EURUSD"
}
surf = parseMktData(surfInfo)

// 配置 Greeks 计算设置
setting = dict(STRING, ANY)
setting["calcDelta"] = true
setting["calcGamma"] = true
setting["calcVega"] = true
setting["calcTheta"] = true
setting["calcRhoDomestic"] = true
setting["calcRhoForeign"] = true
setting["calcVolga"] = true
setting["calcVanna"] = true

// 调用定价函数并输出结果
res = fxDigitalOptionPricer(instrument, pricingDate, spot, domesticCurve, foreignCurve, surf, setting)
res
/* 返回结果:
npv: 591230.5971531753        期权现值。由于是 Sell(空头),正值代表卖出该期权已收取的账面价值(或权利金)。
delta: -14441185.231181722    EURUSD 汇率每变动 1.0,期权价值的变化量。
gamma: -399739.6773414655     Delta 的敏感度。
vega: -1157.952755196379      隐含波动率每上升 1%,该空头期权价值的变化量。
theta: 96.88165340417233      每日时间流逝对期权价值的影响。
rhoDomestic: -40374.9217293   本币 Rho(USD)。
rhoForeign: 41832.750598994   外币 Rho(EUR)。
volga: 0.16377576173769282    衡量 Vega 随波动率变化的速度。
vanna: 2429410.3420697395     衡量 Delta 随波动率变化的速度。
*/

例2. 仅返回期权定价结果。

price = fxDigitalOptionPricer(
    instrument=instrument,
    pricingDate=pricingDate,
    spot=spot,
    domesticCurve=domesticCurve,
    foreignCurve=foreignCurve,
    volSurf=surf)
price
// output: 591230.5971531753

例3. 只计算 Delta 和 Vega。

setting = dict(STRING, ANY)
setting["calcDelta"] = true
setting["calcVega"] = true

result = fxDigitalOptionPricer(
    instrument=instrument,
    pricingDate=pricingDate,
    spot=spot,
    domesticCurve=domesticCurve,
    foreignCurve=foreignCurve,
    volSurf=surf,
    setting=setting)
result
/* output:
npv: 591230.5971531753
delta: -14441185.231181722
vega: -1157.952755196379
*/

相关函数:parseInstrument, parseMktData

产品字段说明

字段名 类型 是否必填 描述
productType STRING 是 固定填 "Option"。
optionType STRING 是 固定填 "DigitalOption"。
assetType STRING 是 固定填 "FxDigitalOption"。
notionalAmount DOUBLE 是 名义本金金额。
notionalCurrency STRING 否 名义本金货币,如 "USD"。必须与货币对中的 base currency(ccy1)一致,即只能填写货币对的第一个币种。
instrumentId STRING 否 金融工具 ID。
maturity DATE 是 到期日。
underlying STRING 是

货币对,格式如:"EURUSD","EUR.USD" 或 "EUR/USD"。支持以下货币对:

  • "EURUSD":欧元兑美元
  • "USDCNY":美元兑人民币
  • "EURCNY":欧元兑人民币
  • "GBPCNY":英镑兑人民币
  • "JPYCNY":日元兑人民币
  • "HKDCNY":港币兑人民币
direction STRING 是 交易方向,可选值为 "Buy" 或 "Sell"。
strike DOUBLE 是 执行价格。
dayCountConvention STRING 是 日期计数惯例,可选值为 "ActualActualISDA"、"ActualActualISMA"、"Actual365" 或 "Actual360"。
payoffType STRING 是 收益类型,可选值为 "Call" 或 "Put"。
reportCurrency STRING 是 最终输出(NPV / Greeks)使用的货币。
domesticCurve STRING 否 定价时参考的本币贴现曲线名称。
foreignCurve STRING 否 定价时参考的外币贴现曲线名称。