Re: Question on FinancialDerivative in Ver 8

*To*: mathgroup at smc.vnet.net*Subject*: [mg114106] Re: Question on FinancialDerivative in Ver 8*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Tue, 23 Nov 2010 06:03:03 -0500 (EST)

On 22 Nov 2010, at 13:39, Dana DeLouis wrote: > Hi. Here's a Call option with Low Volatility 1 year out. > A dividend of 0 returns a value of 0.05 for this call option. > > FinancialDerivative[ > {"American", "Call"}, > {"StrikePrice" -> 50, > "Expiration" -> 1}, > { "CurrentPrice" -> 30, > "InterestRate" -> .1, > "Volatility" -> .2, > "Dividend" -> 0}] > > 0.05384 > > If I increase the Dividend to a penny, the Call option goes ==91up==92 (not down) in price to 0.087 ?? > > FinancialDerivative[ > {"American", "Call"}, > {"StrikePrice" -> 50, > "Expiration" -> 1}, > { "CurrentPrice" -> 30, > "InterestRate" -> .1, > "Volatility" -> .2, > "Dividend" -> .01}] > > 0.08731 This is a problem with the accuracy of the (default) PDE based method for call options with a small when the dividiend. If you switch the binary tree approach method you get a better answer: FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> 1}, {"CurrentPrice" -> 30, "InterestRate" -> .1, "Volatility" -> .2, "Dividend" -> .01}, Method -> "Binomial"] 0.0446121 > > If during a calculation, the dividend is calculated close to zero (say 0.0001) the Call Option is now worth $27.05 ?? Huh? How I would love to sell this Call option all day long. :>) > > FinancialDerivative[ > {"American", "Call"}, > {"StrikePrice" -> 50, > "Expiration" -> 1}, > { "CurrentPrice" -> 30, > "InterestRate" -> .1, > "Volatility" -> .2, > "Dividend" -> 0.0001}] > > 27.05 That's the same problem getting worse. An accurate answer is: FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> 1}, {"CurrentPrice" -> 30, "InterestRate" -> .1, "Volatility" -> .2, "Dividend" -> 0.0001}, Method -> "Binomial"] 0.0513195 > > A Dividend of 0.10 brings the price back down to below that of the 0 dividend price. > > FinancialDerivative[ > {"American", "Call"}, > {"StrikePrice" -> 50, > "Expiration" -> 1}, > { "CurrentPrice" -> 30, > "InterestRate" -> .1, > "Volatility" -> .2, > "Dividend" -> .10}] > > 0.01211 This is now close to the value given by the binomial tree method: FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> 1}, {"CurrentPrice" -> 30, "InterestRate" -> .1, "Volatility" -> .2, "Dividend" -> .10}, Method -> "Binomial"] 0.011439 > > Any thoughts/insight into this? You can see how the difference between the values computed using the PDE and the binomial method grows when d is near 0: Plot[(FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> 1}, {"CurrentPrice" -> 30, "InterestRate" -> .1, "Volatility" -> .2, "Dividend" -> d}] - FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> 1}, {"CurrentPrice" -> 30, "InterestRate" -> .1, "Volatility" -> .2, "Dividend" -> d}, Method -> "Binomial"]), {d, 0, 0.4}] I am no expert on this but it seems to me that the PDE method used in FinancialDerivative is inaccurate for small values of the dividend. One thing that confirms is the computation of critical values. For example: FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> 1}, {"CurrentPrice" -> 30, "InterestRate" -> .1, "Volatility" -> .2, "Dividend" -> 0.0001}, "CriticalValue"] -303.072 which is nonsense. This is much better: FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> 1}, {"CurrentPrice" -> 30, "InterestRate" -> .1, "Volatility" -> .2, "Dividend" -> 0.0001}, "CriticalValue", Method -> "Binomial"] 54719.8 Andrzej Kozlowski