Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

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


  • Prev by Date: Re: Exporting .eps file, screen doesn't match .eps file
  • Next by Date: MathLink - Linux - Calling the Kernel from External Program - undefined reference to `shm_open'
  • Previous by thread: Re: /. Hold -> Identity (Was: One more rules + ev<>rol problem)
  • Next by thread: MathLink - Linux - Calling the Kernel from External Program - undefined reference to `shm_open'