Black–Scholes Pricing for FX
Week 5 — 24 February 2025
The syllabus calls this class “Introduction to Black-Scholes. BS usage for a practitioner. First and Second order risks. Xgamma. Intuitive awareness.” The source notes are the VBA workbook below, so the article preserves the implementation rather than replacing it with a summary.
Notes on inputs
- (T = Days / 365)
- (S = Forward) (the workbook expects forward FX)
- (X = Strike)
- (r = DiscRate)
- (v = vol)
- (ExtRate) is the foreign-currency rate.
- All returned prices are in USD.
BSPrice
This is a cleaned transcription of the source workbook function. The branches cover calls, puts, forwards, and the two zero-coupon deposits recorded in the notes.
Function BSPrice(ContractType As String, _
Forward As Double, _
Strike As Double, _
Days As Double, _
DiscRate As Double, _
ExtRate As Double, _
vol As Double)
T = Days / 365
S = Forward
X = Strike
r = DiscRate
v = vol
OptionType = ContractType
' Call Option
If OptionType = "C" Then
BSPrice = Exp(-r * T) * (S * Application.NormSDist(dOne(S, X, T, r, v)) - X * Application.NormSDist(dTwo(S, X, T, r, v)))
' Put Option
ElseIf OptionType = "P" Then
BSPrice = Exp(-r * T) * (X * Application.NormSDist(-dTwo(S, X, T, r, v)) - S * Application.NormSDist(-dOne(S, X, T, r, v)))
' Fwd FX
ElseIf OptionType = "F" Then
BSPrice = Exp(-r * T) * (S - X)
' Deposit in USD (ZC in USD)
ElseIf OptionType = "D" Then
BSPrice = Exp(-r * T)
' Deposit in MXN (ZCB in MXN)
ElseIf OptionType = "M" Then
BSPrice = Exp(-r * T) * S
End If
End Function