fxEuropeanOptionPricer

语法

fxEuropeanOptionPricer(instrument, pricingDate, spot, domesticCurve, foreignCurve, volSurf)

详情

对外汇欧式期权进行定价,返回期权的净现值(NPV)。

返回值:DOUBLE 类型标量。

参数

instrument INSTRUMENT 类型标量,表示待定价的外汇欧式期权。外汇欧式期权所需的关键字段详见产品字段要求

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

spot 数值类型标量,表示标的汇率的即期价格。

domesticCurve MKTDATA 类型对象(IrYieldCurve),表示本币的折现曲线。曲线所需包含的关键字段见曲线字段要求

foreignCurve MKTDATA 类型对象(IrYieldCurve),表示外币的折现曲线。曲线所需包含的关键字段见曲线字段要求

volSurf MKTDATA 类型(FxVolatilitySurface),表示外汇期权波动率曲面。曲线所需包含的关键字段见曲线字段要求

例子

pricingDate = 2025.08.18
ccyPair = "USDCNY"

option = {
    "productType": "Option",
    "optionType": "EuropeanOption",
    "assetType": "FxEuropeanOption",
    "version": 0,
    "notional": ["USD", 1E6],
    "strike": 7.2,
    "maturity": 2025.10.28,
    "payoffType": "Call",
    "dayCountConvention": "Actual365",
    "underlying": ccyPair
}

quoteTerms = ['1d', '1w', '2w', '3w', '1M', '2M', '3M', '6M', '9M', '1y', '18M', '2y', '3y']
quoteNames = ["ATM", "D25_RR", "D25_BF", "D10_RR", "D10_BF"]
quotes = [0.030000, -0.007500, 0.003500, -0.010000, 0.005500, 
          0.020833, -0.004500, 0.002000, -0.006000, 0.003800, 
          0.022000, -0.003500, 0.002000, -0.004500, 0.004100, 
          0.022350, -0.003500, 0.002000, -0.004500, 0.004150, 
          0.024178, -0.003000, 0.002200, -0.004750, 0.005500, 
          0.027484, -0.002650, 0.002220, -0.004000, 0.005650, 
          0.030479, -0.002500, 0.002400, -0.003500, 0.005750, 
          0.035752, -0.000500, 0.002750,  0.000000, 0.006950, 
          0.038108,  0.001000, 0.002800,  0.003000, 0.007550, 
          0.039492,  0.002250, 0.002950,  0.005000, 0.007550, 
          0.040500,  0.004000, 0.003100,  0.007000, 0.007850, 
          0.041750,  0.005250, 0.003350,  0.008000, 0.008400, 
          0.044750,  0.006250, 0.003400,  0.009000, 0.008550]
quotes = reshape(quotes, size(quoteNames):size(quoteTerms)).transpose()

curveDates = [2025.08.21,
              2025.08.27,
              2025.09.03,
              2025.09.10,
              2025.09.22,
              2025.10.20,
              2025.11.20,
              2026.02.24,
              2026.05.20,
              2026.08.20,
              2027.02.22,
              2027.08.20,
              2028.08.21]
              
domesticCurveInfo = {
    "mktDataType": "Curve",
    "curveType": "IrYieldCurve",
    "referenceDate": pricingDate,
    "currency": "CNY",
    "dayCountConvention": "Actual365",
    "compounding": "Continuous",  
    "interpMethod": "Linear",
    "extrapMethod": "Flat",
    "frequency": "Annual",
    "dates": curveDates,
    "values":[1.5113, 
              1.5402, 
              1.5660, 
              1.5574, 
              1.5556, 
              1.5655, 
              1.5703, 
              1.5934, 
              1.6040, 
              1.6020, 
              1.5928, 
              1.5842, 
              1.6068]/100
}
foreignCurveInfo = {
    "mktDataType": "Curve",
    "curveType": "IrYieldCurve",
    "referenceDate": pricingDate,
    "currency": "USD",
    "dayCountConvention": "Actual365",
    "compounding": "Continuous",  
    "interpMethod": "Linear",
    "extrapMethod": "Flat",
    "frequency": "Annual",
    "dates": curveDates,
    "values":[4.3345, 
              4.3801, 
              4.3119, 
              4.3065, 
              4.2922, 
              4.2196, 
              4.1599, 
              4.0443, 
              4.0244, 
              3.9698, 
              3.7740, 
              3.6289, 
              3.5003]/100
}

spot = 7.1627
instrument = parseInstrument(option)
domesticCurve = parseMktData(domesticCurveInfo)
foreignCurve = parseMktData(foreignCurveInfo)
surf = fxVolatilitySurfaceBuilder(pricingDate, ccyPair, quoteNames, quoteTerms, quotes, spot, domesticCurve, foreignCurve)

npv = fxEuropeanOptionPricer(instrument, pricingDate, spot, domesticCurve, foreignCurve, surf)
print(npv)

相关函数:parseInstrument, parseMktData

产品字段说明

字段名 类型 描述 是否必填
productType STRING 固定填 "Option"
optionType STRING 固定填 "EuropeanOpiton"
assetType STRING 固定填 "FxEuropeanOpiton"
version INT 版本号,默认值 0 非必填
notional ANY 向量 名义本金,格式如 ["USD", 1.0]
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"
domesticCurve STRING 定价时参考的本币贴现曲线名称
foreignCurve STRING 定价时参考的外币贴现曲线名称

曲线字段要求

IrYieldCurve

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Curve"
referenceDate DATE 参考日期
version INT 版本号,默认值 0
curveType STRING 固定填 "IrYieldCurve"
dayCountConvention STRING

曲线的日期计数惯例,可选值为:

  • "Actual360":实际天数除以360

  • "Actual365":实际天数除以365(不区分闰年)

  • "ActualActualISMA":实际天数/实际天数(ISMA规则)

  • "ActualActualISDA":实际天数/实际天数(ISDA规则)

interpMethod STRING

内插方法,可选值为:

  • "Linear":线性插值

  • "CubicSpline":三次样条插值

  • "CubicHermiteSpline":三次埃尔米特样条插值

extrapMethod STRING

外插方法,可选值为:

  • "Flat":平插

  • "Linear":线性插值

dates DATE 向量 数据点的日期
values DOUBLE 向量 数据点的值,与 dates 中的元素一一对应
curveName STRING 曲线名称
currency STRING 货币,可选值为"CNY", "USD", "EUR", "GBP", "JPY", "HKD"
compounding STRING

复利类型,可选值为:

  • "Simple":单利

  • "Compounded":离散复利

  • "Continuous":连续复利

settlement DATE 结算日,如果指定了结算日,则后续期限间隔的计算都将从 settlement 开始,而不是 referenceDate
frequency INTEGRAL或 STRING

计息频率,可选值为:

  • -1 或 "NoFrequency":无效计息频率

  • 0 或 "Once":到期一次还本付息

  • 1 或 "Annual":每年付息一次

  • 2 或 "Semiannual":每半年付息一次

  • 3 或 "EveryFourthMonth":每四个月付息一次

  • 4 或 "Quarterly":每季度付息一次

  • 6 或 "BiMonthly":每两月付息一次

  • 12 或 "Monthly":每月付息一次

  • 13 或 "EveryFourthWeek":每四周付息一次

  • 26 或 "BiWeekly":每两周付息一次

  • 52 或 "Weekly":每周付息一次

  • 365 或 "Daily":每日付息一次

  • 999 或 "Other":其他计息频率

curveModel STRING 曲线构建模型,目前仅支持 "Bootstrap"。
curveParams DICT 模型的参数。

FxVolatilitySurface

字段名 类型 描述 是否必填
mktDataType STRING 固定填 "Surface"
referenceDate DATE 参考日期
version INT 版本号,默认值 0
surfaceType STRING 固定填 "FxVolatilitySurface"
smileMethod STRING

波动率微笑方法,可选值为:

  • "Linear":线性微笑

  • "CubicSpline":三次样条微笑

  • "SVI":SVI 模型微笑

  • "SABR":SABR 模型微笑

volSmiles DICT(STRING, ANY) 向量

波动率微笑向量,向量中每个元素为一条波动率微笑。

包含以下成员:

  • strikes: DOUBLE 类型向量,表示不同的行权价

  • vols: DOUBLE 类型向量,表示行权价对应的波动率,与 strikes等长

  • curveParams:字典DICT(STRING, DOUBLE)类型,表示波动率微笑方法的模型参数,只在 smileMethod 取值 "SVI" 或 "SABR" 时生效:

    • smileMethod = 'SVI': 应包含键 'a', 'b', 'rho', 'm', 'sigma'

    • smileMethod = 'SABR': 应包含键 'alpha', 'beta', 'rho', 'nu'

  • fwd:可选,DOUBLE 类型标量,当 smileMethod取值 "SVI" 或 "SABR" 时必填,表示远期值

termDates DATE 向量 volSmiles中每条波动率微笑对应的期限日期
surfaceName STRING 曲面名称
currencyPair STRING

外汇的货币对,可选值为"EURUSD", "USDCNY", "EURCNY", "GBPCNY", "JPYCNY", "HKDCNY"。

货币对的表示也可由 ./ 分隔,例如 "EURUSD" 也可写为 "EUR.USD" 或 "EUR/USD"。