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 定价时参考的外币贴现曲线名称。