Re: FinancialDerivative Ver 8 (Bug maybe)

*To*: mathgroup at smc.vnet.net*Subject*: [mg114142] Re: FinancialDerivative Ver 8 (Bug maybe)*From*: Tanya.Mikhaylover at demag-us.com*Date*: Thu, 25 Nov 2010 05:56:29 -0500 (EST)*References*: <icdo80$6da$1@smc.vnet.net>

On Nov 22, 6:38 am, Dana DeLouis <dana.... at gmail.com> wrote: > Hi. Could anyone explain this behavior? I know the documentation is= a little lacking. > It appears to me this is a major bug. > Here's a 3% dividend on a $45 stock. > > d = 45 * 0.03 > 1.3499999999999999 > > (* Option expires on 12/17/2010 *) > > exp = {2010, 12, 17}; > today = {2010, 11, 22}; > > If I use this really close approximation to 1.35 (using =91d above), I = get the Critical value of this dividend paying stock > > FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, > "Expiration" -> exp}, {"CurrentPrice" -> 45, "InterestRate" -> 0.1, > "Volatility" -> 0.3, "ReferenceTime" -> today, > "Dividend" -> d}, {"CriticalValue"}] > 51.53 > > However, If I physically type in 1.35, the value Jumps by quite a bit. > > FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, > "Expiration" -> exp}, {"CurrentPrice" -> 45, "InterestRate" -> 0.1, > "Volatility" -> 0.3, "ReferenceTime" -> today, > "Dividend" -> 1.35}, {"CriticalValue"}] > 52.06 > > If I type in a dividend of 1.36, the value goes back down to a reasonable= value again, and slightly less than the value at 1.35 as it should. > > FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, > "Expiration" -> exp}, {"CurrentPrice" -> 45, "InterestRate" -> 0.1, > "Volatility" -> 0.3, "ReferenceTime" -> today, > "Dividend" -> 1.36}, {"CriticalValue"}] > 51.52 > > Stated another way, the extra 0 in the second dividend below causes the s= olution to jump horribly. > > FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, > "Expiration" -> exp}, {"CurrentPrice" -> 45, "InterestRate" -> 0.1, > "Volatility" -> 0.3, "ReferenceTime" -> today, > "Dividend" -> 1.35000000001}, {"CriticalValue"}] > 51.53 > > FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, > "Expiration" -> exp}, {"CurrentPrice" -> 45, "InterestRate" -> 0.1, > "Volatility" -> 0.3, "ReferenceTime" -> today, > "Dividend" -> 1.350000000001}, {"CriticalValue"}] > 52.06 > > Thanks for any insight. > I Included a reference time to 11/22/2010, otherwise the answers others g= et would depend on the date the example was run. (ie Current date is assume= d if not given) > > I'm using an Apple Mac Pro with Version 8. > > Dana > dana.... at gmail.com There are a couple of things going on here. First of all, when times are specified as datelists, all rates are assumed to be annual, so d- >1.35 denotes an annual dividend yield of 135%! The o.p. was probably surprised by the high critical values returned when d is set to 0.03 (or lower), yet that is the appropriate critical value (which is defined-for a call-as the lowest value of the underlying at which the holder is indifferent between continuing to hold the option and exercising it), even in the case of an option expiring shortly. The American contract solver uses a grid to evaluate the option, and simply scans the values of the option at the grid points to find the lowest price at which the value of the option does not exceed the amount obtained if exercised immediately at that price. Given the unusually high value for the yield, the default grid density is simply insufficient to properly adjust to the values being put in, so the value jumps around a bit. The simplest way to resolve this is by increasing the grid density: FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> exp}, {"CurrentPrice" -> 45, "InterestRate" -> 0.1, "Volatility" -> 0.3, "ReferenceTime" -> today, "Dividend" -> d}, {"CriticalValue"}, "GridSize"->{200, Automatic}] Alternatively, use the binomial solver: FinancialDerivative[{"American", "Call"}, {"StrikePrice" -> 50, "Expiration" -> exp}, {"CurrentPrice" -> 45, "InterestRate" -> 0.1, "Volatility" -> 0.3, "ReferenceTime" -> today, "Dividend" -> d}, {"CriticalValue"}, Method->"Binomial"] A good initial response to strange solver behavior is to increase grid density. --Ed Bukhman