• C++ Programming for Financial Engineering
    Highly recommended by thousands of MFE students. Covers essential C++ topics with applications to financial engineering. Learn more Join!
    Python for Finance with Intro to Data Science
    Gain practical understanding of Python to read, understand, and write professional Python code for your first day on the job. Learn more Join!
    An Intuition-Based Options Primer for FE
    Ideal for entry level positions interviews and graduate studies, specializing in options trading arbitrage and options valuation models. Learn more Join!

How to price American Options using Monte Carlo???

Joined
3/25/11
Messages
26
Points
13
I wrote a VBA program to price options based on black-scholes model. The european option prices I got from my program is close to the prices calculated by Black-Schole formula, which is what I expected. However, the american option prices from my program do not make sense at all. The american put prices are consistently lower than the prices of european put, which indicates problem. I am not sure if this is a problem of the model or my coding. Can anybody help me look at my code??? I appreciate it.

btw, let me interpret the parameters of the function. s0 is stock pirce at time 0. k is strike price. r is interest rate. t is time. d is dividend rate. v is volatility. Thanks!

C++:
Function YuAmericanPut(s0 As Double, k As Double, r As Double, t As Double, d As Double, v As Double)
Dim normalnum As Double
Dim stock() As Double
Dim sum As Double
Dim payoff(10000)
ReDim stock(1 To 10000, 1 To t * 12)
For i = 1 To 10000
For j = 1 To t * 12
normalnum = WorksheetFunction.NormInv(Rnd(), 0, 1)
stock(i, j) = s0 * Exp((r - d - (v ^ 2) / 2) * t * j / 12 + v * ((t * j / 12) ^ 0.5) * normalnum)
Next j
Next i
j = t * 12

Do While j >= 2
For i = 1 To 10000

If payoff(i) > (k - stock(i, j)) Then
payoff(i) = payoff(i) * Exp(-r / 12)
Else
payoff(i) = (k - stock(i, j))
End If
Next i
j = j - 1
Loop

For i = 1 To 10000
sum = sum + payoff(i)
Next i
YuAmericanPut = sum / 10000

End Function
 
Back
Top