Has anybody tried that. Hull's book says it is difficult to implement Monte Carlo for American Options. My problem is that my Exotic is an intensely path dependent American Option. To start with I was trying to price an American Option but no luck. Here is my code..see if you something very silly. My values are converging for a price almost double Europen Option. Shouldn't they be converging to the same value. (p.s.: Don't tell me the random number generator!}Enclosed:Monte Carlo for Simple American OptionSub SimpleAmericanOption()' Simple American Call OptionDim InitialPrice, StrikePrice, Barrier, Count As IntegerDim StockReturn, Volatility, Dividend, Shock, Maturity, Iterations As DoubleDim Counter, Rowname As IntegerDim Stocktree1(), Stocktree2() As DoubleDim Optiontree1(), Optiontree2() As DoubleDim intI, Stockcolumn, Optioncolumn As IntegerDim dt, dz As Double' Specifies model initial values and parameters'Specifies Random number seedSeed = 2000'Specifies number of iterationsIterations = 500Volatility = 0.25InitialPrice = 217StockReturn = 0.052Shock = 1 / 365StrikePrice = 250Rowname = 1Stockcolumn = 2Optioncolumn = 3Maturity = 3 / Shock'Sizes Array length based on desired maturity of the optionReDim Stocktree1(Maturity)ReDim Stocktree2(Maturity)ReDim Optiontree1(Maturity)ReDim Optiontree2(Maturity)Workbooks.Item(1).ActivateFor i = 1 To Iterations'Fills the stockprice tree Stocktree1(0) = InitialPrice Stocktree2(0) = InitialPrice intI = 1 While intI < Maturity dt = (StockReturn - (0.5 * (Volatility ^ 2))) * Shock dz = ((Shock) ^ 0.5) * Volatility * WorksheetFunction.NormSInv(Ran()) On Error GoTo Line2:' dz and -dz for antithetic adjustment Stocktree1(intI) = Stocktree1(intI - 1) * Exp(dt + dz) Stocktree2(intI) = Stocktree2(intI - 1) * Exp(dt - dz) intI = intI + 1Line2: Wend 'Fills in the loop control variables Count = 0 'Traces stock tree for 30 consecutive days of barrier 'Need to go upto 1259 - 30 days only intI = Maturity - 2 'Calculates the optiontree Optiontree1(Maturity - 1) = Application.Max(Stocktree1(Maturity - 1) - StrikePrice, 0) Optiontree2(Maturity - 1) = Application.Max(Stocktree2(Maturity - 1) - StrikePrice, 0) While intI > 0 Optiontree1(intI) = Application.Max(Optiontree1(intI + 1) * Exp(-StockReturn * Shock), Stocktree1(intI) - StrikePrice) Optiontree2(intI) = Application.Max(Optiontree2(intI + 1) * Exp(-StockReturn * Shock), Stocktree2(intI) - StrikePrice) intI = intI - 1 Wend 'No option to call on day 0, hence simple discount Optiontree1(0) = Optiontree1(1) * Exp(-StockReturn * Shock) Optiontree2(0) = Optiontree2(1) * Exp(-StockReturn * Shock) 'Changes the column in which the result is to be printed after every 60000 iterations 'Resets rowname to 1 after 30000 runs If i Mod 30001 = 0 Then Stockcolumn = Stockcolumn + 2 If i Mod 30001 = 0 Then Optioncolumn = Optioncolumn + 2 If i Mod 30001 = 0 Then Rowname = 1 'Prints the stockvalue after 1260 days and resulting option price Sheets(2).Cells(Rowname, Stockcolumn).Value = 0.5 * (Stocktree1(Maturity - 1) + Stocktree2(Maturity - 1)) Sheets(2).Cells(Rowname, Optioncolumn).Value = 0.5 * (Optiontree1(0) + Optiontree2(0)) Rowname = Rowname + 1 'Saves after every 500 iterations, remember doing CTRL + S all the time

If i Mod 500 = 0 Then ActiveWorkbook.SaveNext iEnd Sub