Garman Kohlhagen Model and VBA

Get VBA and an Excel spreadsheet for the Garman Kohlhagen model, a method of pricing European foreign exchange options.

The Garman Kohlhagen model generalizes the standard Black-Scholes model to include two interest rates – one for a domestic currency, and one for a foreign currency. The dividend yield is replaced by the foreign currency interset rate. The size of the interest rate gap between a foreign and domestic currency affects the pricing of these options.

The model was published in 1976 by Mark Garman and Steven Kohlhagen, and predicts that foreign exchange options are cheaper than standard European option for a call but more expensive for a put.

The Garman Kohlhagen model assumes

  • European-style options with a pre-determined expiration date,
  • foreign and domestic interest rates and the exchange rate are constant,
  • the market is efficient (i.e. no arbitrage),
  • there are no transaction costs,
  • and the exchange rate has a log-normal price distribution
Garman Kohlhagen in Excel VBA
The governing equations are
Garman Kohlhagen equations
  • rd and rf are the domestic and foreign interest rates
  • S0 is the spot rate (i.e. foreign exchange rate)
  • K is the strike
  • T is the maturity time
  • σ is the foreign exchange rate volatility
  • N is the cumulative normal distribution

Garman Kohlhagen Model in VBA

This VBA implements the equations above, and can be used in Excel. However, you can just download the Excel spreadsheet which uses this code at the bottom of this article.
Function GarmanKohlhagen(CallOrPut As String, SpotRate As Double, Strike As Double, TimeToMaturity As Double, DomesticInterestRate As Double, ForeignInterestRate As Double, Volatility As Double) As Double
Dim d1 As Double, d2 As Double
d1 = (Log(SpotRate / Strike) + (DomesticInterestRate - ForeignInterestRate + Volatility ^ 2 / 2) * TimeToMaturity) / (Volatility * Sqr(TimeToMaturity))
d2 = d1 - Volatility * Sqr(TimeToMaturity)
If CallOrPut = "Call" Then
    GarmanKohlhagen = SpotRate * Exp(-ForeignInterestRate * TimeToMaturity) * Application.NormSDist(d1) - Strike * Exp(-DomesticInterestRate * TimeToMaturity) * Application.NormSDist(d2)
ElseIf CallOrPut = "Put" Then
    GarmanKohlhagen = Strike * Exp(-DomesticInterestRate * TimeToMaturity) * Application.NormSDist(-d2) - SpotRate * Exp(-ForeignInterestRate * TimeToMaturity) * Application.NormSDist(-d1)
End If
End Function

Download Excel Spreadsheet for Garman-Kohlhagen model in VBA

One thought on “Garman Kohlhagen Model and VBA

  1. the above wouldnt get you fair value price/
    the reason is that implied intrest rates from fx market are not consistent with market ir.

Leave a Reply

Your email address will not be published. Required fields are marked *

What is 10 + 3 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)