I want to find the Option Value in American Options. I basically want to replace this code if possible

americanOption[type_String, k_?NumericQ, s_?NumericQ, t_?NumericQ, 
  r_?NumericQ, σ_?NumericQ, d_?NumericQ, v_: "Value"] := 
 FinancialDerivative[{"American", type}, {"StrikePrice" -> k, 
   "Expiration" -> t},  {"InterestRate" -> r, 
   "Volatility" -> σ, "CurrentPrice" -> s, 
   "Dividend" -> d}, {v}, Method -> "Binomial"]

Manipulate[ Module[{a = Quiet[Check[a = americanOption[type, 100, 100, t, r, σ, d, "CriticalValue"], -1]], pt, $strike, val, slope}, 
  slope = If[type === "Call", 1, -1]; val = If[a > 0, americanOption[type, 100, a, t, r, σ, d], 10^3]; $strike = {Dashing[0.02], Line[{{100, 0}, {100, 10^3}}]}; pt = {Red, PointSize[0.015], Point[{a, val}]};If[a > 0, 
   Plot[{val + slope (s - a), americanOption[type, 100, s, t, r, σ, d]}, {s, 0, maxstock}, Prolog -> {pt, $strike}, PlotStyle -> {Directive[Opacity[Boole[tangent]], Green], Directive[Black]}, PlotRange -> {{0, maxstock}, {0, maxoption}}, AxesLabel -> {"stock price", "option  value"}, AspectRatio -> Automatic, ImageSize -> {500, 250}],    Plot[americanOption[type, 100, s, t, r, σ, d], {s, 0, maxstock}, Prolog -> {$strike}, PlotStyle -> Directive[Black], PlotRange -> {{0, maxstock}, {0, maxoption}}, AspectRatio -> Automatic, AxesLabel -> {"stock price", "option value"}, ImageSize -> {500, 250}]]], Style["option specs", Bold], {{type, "Call", "option type"}, {"Call" -> "call", "Put" -> "put"}}, {{t, 0.5, "time to expiry (years)"}, 0.05, 1, 0.05, Appearance -> "Labeled", ImageSize -> Tiny}, Delimiter, Style["general parameters", Bold], {{r, 0.05, "risk free interest rate"}, 0.01, 0.4, 0.01, Appearance -> "Labeled"}, {{d, 0.05, "dividend"}, 0, 0.4, 0.01, Appearance -> "Labeled"}, {{σ, 0.16, "volatility"}, 0.1, 0.8, 0.1, Appearance -> "Labeled"}, Delimiter,
 {{tangent, False, "show tangent"}, {True, False}, ControlType -> Checkbox},
 {{maxstock, 200, "stock price range"}, 150, 300}, {{maxoption, 150, "options price range"}, 50, 300}, ControlPlacement -> Top,
 SaveDefinitions -> True]

For my purposes, I have the current price (S0)=1.01; S0max=1000000; strike price=119001; risk free interest rate=0.00026; volatility=0.190246; time to expiry (years)=50;dividend=0 (there is no dividend); nvalex=-1549.56

My problem is that I do not understand the code FinancialDerivative at all. In the financial literature (I am not from finance) it says that the value of a call option is F(S,T)=Max (0,S-K) and the value of a put option is F(S,T)=Max (0,K-S) where S is the current stock price (and evolves according to a stochastic process), T is the time to expiry and K is the strike price. In my case, which is a put option, I have F(S,T)=Max(f(S,T),nvalex) where nvalex=-1549.56 and is the value from not exercising the option.

S evolves according to a stochastic process over time and I think the Mathematica code uses a binomial approximation or a Cox-Ross Rubienstien process. My f(S,T)=0.9^(j - 1)*(1000 - 5S), {j,1,51} and this is repeated for all S's. I have tried to change the above code but with no success. I am not sure of what does "a" do in the above code and should it be replaced with a>nvalex.

With the reformed code if possible, I want to know for what value of the stock price does the Option Value for today become zero (where does it touch the axis)? Secondly, what would be the answer for Option Value for tomorrow, day after tomorrow and so on (when the time to maturity is 49, 48.....until 0 years)? Any help would be greatly appreciated.


  • $\begingroup$ Where did you get the code from? $\endgroup$ – C. E. Sep 14 '16 at 7:52
  • $\begingroup$ I got the code from demonstrations.wolfram.com/EarlyExerciseOfAmericanOptions and then clicking on "Download Demostration as CDF" and then in the CDF clicking on "Download Source Code." I made a mistake: in my case, f(S,T)=Sum[0.9^(j - 1)*(1000 - 5S), {j,1,51}] at each node. And S, the current stock price evolves according to a Cox-Ross Rubienstien process or binomial process. Then the put option formula is applied where F(S,T)=Max(f(S,T),nvalex) with nvalex=-1549.56 a constant. $\endgroup$ – Supratim Das Gupta Sep 14 '16 at 18:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.