Skip to content

Conversation

@joaquinbejar
Copy link
Owner

Summary

This PR implements pricing support for Quanto options as described in issue #246. Quanto options are derivatives where the underlying asset is denominated in one currency (foreign) but the payoff is settled in another currency (domestic) at a fixed exchange rate.

What was implemented

ExoticParams Extensions

Added quanto-specific fields to ExoticParams:

  • quanto_fx_volatility: Volatility of the exchange rate
  • quanto_fx_correlation: Correlation between the underlying asset and the exchange rate (-1 to 1)
  • quanto_foreign_rate: Foreign risk-free interest rate

Pricing Implementation

Created src/pricing/quanto.rs with the quanto-adjusted Black-Scholes formula:

Quanto Adjustment

The key insight is that the drift of the underlying asset must be adjusted for the correlation between the asset and the exchange rate:

Adjusted drift = r_d - q - ρ × σ_S × σ_FX

Where:

  • r_d: Domestic risk-free rate
  • q: Dividend yield of the underlying
  • ρ: Correlation between asset and FX rate
  • σ_S: Volatility of the underlying asset
  • σ_FX: Volatility of the exchange rate

Pricing Formula

  • Quanto Forward: F = S × e^((r_d - q - ρ×σ_S×σ_FX)×T)
  • Call: C = X × e^(-r_d×T) × [F × N(d1) - K × N(d2)]
  • Put: P = X × e^(-r_d×T) × [K × N(-d2) - F × N(-d1)]

Where X is the fixed exchange rate.

Why This Implementation?

  • Quanto adjustment: Accounts for the covariance between asset returns and exchange rate movements
  • Correlation impact:
    • When ρ > 0: Asset and FX move together, reducing the quanto call value
    • When ρ < 0: Asset and FX move oppositely, increasing the quanto call value
  • Exchange rate scaling: The fixed exchange rate directly scales the option value

Common Applications

  • Foreign equity investments with currency protection
  • Commodity options settled in a different currency
  • Cross-border structured products
  • International index options

Tests

12 comprehensive unit tests covering:

  • Quanto call and put pricing (positive values)
  • Zero correlation case
  • Positive correlation reduces call value
  • Negative correlation increases call value
  • Invalid correlation rejection
  • Missing parameters handling
  • Short position pricing
  • Exchange rate scaling verification
  • Zero FX volatility handling
  • Deep ITM/OTM scenarios

Files Changed

  • src/model/option.rs: Added quanto fields to ExoticParams
  • src/model/format.rs: Updated Display implementations
  • src/pricing/quanto.rs: NEW - Quanto option pricing implementation
  • src/pricing/mod.rs: Added quanto module export
  • src/pricing/black_scholes_model.rs: Routed Quanto to new module
  • src/pricing/rainbow.rs: Updated ExoticParams in tests
  • src/pricing/spread.rs: Updated ExoticParams in tests
  • src/pricing/cliquet.rs: Updated ExoticParams in tests
  • examples/examples_exotics/src/bin/cliquet_example.rs: Updated ExoticParams

Closes #246

- Add quanto-specific fields to ExoticParams (FX volatility, correlation, foreign rate)
- Implement quanto-adjusted Black-Scholes formula
- Handle correlation between underlying asset and exchange rate
- Support both call and put quanto options
- Add comprehensive unit tests (12 tests covering all scenarios)
- Update Display implementations for new ExoticParams fields
- Route Quanto options in black_scholes_model.rs to new module
@joaquinbejar joaquinbejar merged commit 33cf49c into main Jan 13, 2026
10 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Implement Quanto option pricing model

2 participants