> For the complete documentation index, see [llms.txt](https://opusdigital.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://opusdigital.gitbook.io/docs/opusdigital-ecosystem/opusamm/garman-kohlhagen-pricing-formula.md).

# Garman-Kohlhagen pricing formula

OpusAMM provides 24/7/365 on-demand option pricing liquidity. Option premiums are calculated using the Garman Kohlhagen pricing formula (GKPM) for European style options. The&#x20;

GKPM accounts for two interest rates to correct the Black-Scholes-Merton formula’s limiting  assumption that borrowing and lending takes place at the same interest rate. GKPM inputs are sourced via external oracles (ex. Chainlink) and OpusARM:&#x20;

Model inputs:&#x20;

a. Spot&#x20;

b. Forward Price&#x20;

c. Maturity&#x20;

d. Strike Price&#x20;

e. Domestic Interest Rate (Rd)&#x20;

f. Foreign Interest Rate (Rf)&#x20;

g. Implied Volatility&#x20;

Implied volatility prices are adjusted by **OpusARM**.&#x20;

## The formula

European vanilla option payoffs are calculated using spot at maturity (St) and the strike<br>

$$
\text{Payoff}*\text{call}=\max (S\_T-K;0), \ \ \text{Payoff}*{\text{put}} = \max (K - S\_T; 0)
$$

Then option prices (premiums) are calculated as

$$
\text{Price}*{\text{call}}=Se^{-r*{\text{CCY1}}T}N(d\_1)-Ke^{-r\_{\text{CCY2}}T}N(d\_2)
$$

$$
\text{Price}*{\text{call}}=Ke^{-r*{\text{CCY2}}T}N(-d\_2)-Se^{-r\_{\text{CCY1}}T}N(-d\_1)
$$

where:

$$
d\_1=\frac{\ln (S/K) + (r\_{\text{CCY1}} - r\_{\text{CCY2}} + \sigma^2/2)\cdot T}{\sigma\sqrt{T}}
$$

$$
d\_2=\frac{\ln (S/K) + (r\_{\text{CCY1}} - r\_{\text{CCY2}} - \sigma^2/2)\cdot T}{\sigma\sqrt{T}} = d\_1 - \sigma\sqrt{T}
$$
