Black-Scholes Option Price Graphs

Define BS formulae and associated functions.

d1[S_,K_,r_,delta_,sigma_,T_,t_]:=(Log[S/K]+(r-delta+sigma^2/2)(T-t))/(sigma*Sqrt[T-t]);

d2[S_,K_,r_,delta_,sigma_,T_,t_]:=(Log[S/K]+(r-delta-sigma^2/2)(T-t))/(sigma*Sqrt[T-t]);

CNorm[d_]:=CDF[NormalDistribution[0,1],d];

VCall[S_,K_,r_,delta_,sigma_,T_,t_]:=S*Exp[-r*(T-t)]*CNorm[d1[S,K,r,delta,sigma,T,t]]-K*Exp[-r*(T-t)]*CNorm[d2[S,K,r,delta,sigma,T,t]];

VPut[S_,K_,r_,delta_,sigma_,T_,t_]:=K*Exp[-r*(T-t)]*CNorm[-d2[S,K,r,delta,sigma,T,t]]-S*Exp[-delta*(T-t)]*CNorm[-d1[S,K,r,delta,sigma,T,t]];

Plot Call Price For Various Strike Prices

Plot[{VCall[S,100,.05,.02,.1,1,0],VCall[S,90,.05,.02,.1,1,0],VCall[S,110,.05,.02,.1,1,0],VCall[S,120,.05,.02,.1,1,0],VCall[S,80,.05,.02,.1,1,0]},{S,60,130}, AxesLabel->{"Stock Price","Call Value ((Subscript[V, C])^E)"},PlotLabel->"Call option value for various strike prices K  \nwhen r = 5%, δ = 2%, σ = 10%, T=  1, and t = 0", PlotStyle->{{Red,Thick},{Blue,Thick},{Green,Thick},{Green,Thick,Dashed},{Blue,Thick,Dashed}}, PlotLegends->LineLegend[{Directive[Blue,Dashed,Thick],Directive[Blue,Thick],Directive[Red,Thick],Directive[Green,Thick],Directive[Green,Dashed]},{"K=80","K=90","K=100","K=110","K=120"},LegendFunction->"Frame"]]

Plot Call Price For Various Expiration Times

Plot[{VCall[S,100,.05,.02,.1,5,0],VCall[S,100,.05,.02,.1,2,0],VCall[S,100,.05,.02,.1,1,0],VCall[S,100,.05,.02,.1,1/2,0],VCall[S,100,.05,.02,.1,1/100,0]},{S,60,130}, AxesLabel->{"Stock Price","Call Value ((Subscript[V, C])^E)"},PlotLabel->"Call option value for various times T \nwhen K=100, r = 5%, δ = 2%, σ = 10%, and t = 0", PlotStyle->{{Red,Thick},{Blue,Thick},{Green,Thick},{Green,Thick,Dashed},{Blue,Thick,Dashed}}, PlotLegends->LineLegend[{Directive[Red,Thick],Directive[Blue,Thick],Directive[Green,Thick],Directive[Green,Thick,Dashed],Directive[Blue,Thick,Dashed]},{"T=5","T=2","T=1","T=1/2","T=1/100"},LegendFunction->"Frame"]]

Plot Call Price For Various Volatilities

Plot[{VCall[S,100,.05,.02,.75,1,0],VCall[S,100,.05,.02,.5,1,0],VCall[S,100,.05,.02,.1,1,0],VCall[S,100,.05,.02,.05,1,0],VCall[S,100,.05,.02,.01,1,0]},{S,60,130}, AxesLabel->{"Stock Price","Call Value ((Subscript[V, C])^E)"},PlotLabel->"Call option value for various volatilities σ \nwhen  K = 100, r = 5%, δ = 2%, T=  1, and t = 0", PlotStyle->{{Red,Thick},{Blue,Thick},{Green,Thick},{Green,Thick,Dashed},{Blue,Thick,Dashed}}, PlotLegends->LineLegend[{Directive[Red,Thick],Directive[Blue,Thick],Directive[Green,Thick],Directive[Green,Thick,Dashed],Directive[Blue,Thick,Dashed]},{"σ=0.75","σ=0.5","σ=0.1","σ=0.05","σ=0.01"},LegendFunction->"Frame"]]

Plot Put Price For Various Strike Prices

Plot[{VPut[S,100,.05,.02,.1,1,0],VPut[S,90,.05,.02,.1,1,0],VPut[S,110,.05,.02,.1,1,0],VPut[S,120,.05,.02,.1,1,0],VPut[S,80,.05,.02,.1,1,0]},{S,60,130}, AxesLabel->{"Stock Price","Put Value ((Subscript[V, P])^E)"},PlotLabel->"Put option value for various strike prices K  \nwhen r = 5%, δ = 2%, σ = 10%, T=  1, and t = 0", PlotStyle->{{Red,Thick},{Blue,Thick},{Green,Thick},{Green,Thick,Dashed},{Blue,Thick,Dashed}}, PlotLegends->LineLegend[{Directive[Blue,Dashed,Thick],Directive[Blue,Thick],Directive[Red,Thick],Directive[Green,Thick],Directive[Green,Dashed]},{"K=80","K=90","K=100","K=110","K=120"},LegendFunction->"Frame"]]

Plot Call Price For Various Expiration Times

Plot[{VPut[S,100,.05,.02,.1,5,0],VPut[S,100,.05,.02,.1,2,0],VPut[S,100,.05,.02,.1,1,0],VPut[S,100,.05,.02,.1,1/2,0],VPut[S,100,.05,.02,.1,1/100,0]},{S,60,130}, AxesLabel->{"Stock Price","Put Value ((Subscript[V, P])^E)"},PlotLabel->"Put option value for various times T \nwhen K=100, r = 5%, δ = 2%, σ = 10%, and t = 0", PlotStyle->{{Red,Thick},{Blue,Thick},{Green,Thick},{Green,Thick,Dashed},{Blue,Thick,Dashed}}, PlotLegends->LineLegend[{Directive[Red,Thick],Directive[Blue,Thick],Directive[Green,Thick],Directive[Green,Thick,Dashed],Directive[Blue,Thick,Dashed]},{"T=5","T=2","T=1","T=1/2","T=1/100"},LegendFunction->"Frame"]]

Plot Call Price For Various Volatilities

Plot[{VPut[S,100,.05,.02,.75,1,0],VPut[S,100,.05,.02,.5,1,0],VPut[S,100,.05,.02,.1,1,0],VPut[S,100,.05,.02,.05,1,0],VPut[S,100,.05,.02,.01,1,0]},{S,60,130}, AxesLabel->{"Stock Price","Put Value ((Subscript[V, P])^E)"},PlotLabel->"Put option value for various volatilities σ \nwhen  K = 100, r = 5%, δ = 2%, T=  1, and t = 0", PlotStyle->{{Red,Thick},{Blue,Thick},{Green,Thick},{Green,Thick,Dashed},{Blue,Thick,Dashed}}, PlotLegends->LineLegend[{Directive[Red,Thick],Directive[Blue,Thick],Directive[Green,Thick],Directive[Green,Thick,Dashed],Directive[Blue,Thick,Dashed]},{"σ=0.75","σ=0.5","σ=0.1","σ=0.05","σ=0.01"},LegendFunction->"Frame"]]

Surface Plot of Call Prices For Varying Stock and Strike Prices

Plot3D[VCall[S,K,.05,.02,.75,1,0],{S,50,130},{K,50,120}, AxesLabel->{"Stock Price S","Strike K", "Call Value ((Subscript[V, C])^E)"},PlotLabel->"Call option value for various stock prices S and strikes K \nwhen r = 5%, δ = 2%, T=  1, and t = 0", ColorFunction->Function[{x,y,z},Hue[0.65*(1-z)]]]

Surface Plot of Put Prices For Varying Stock and Strike Prices

Plot3D[VPut[S,K,.05,.02,.75,1,0],{S,50,130},{K,50,120}, AxesLabel->{"Stock Price S","Strike K", "Put Value ((Subscript[V, P])^E)"},PlotLabel->"Put option value for various stok prices S and strikes K \nwhen r = 5%, δ = 2%, T=  1, and t = 0", ColorFunction->Function[{x,y,z},Hue[0.65*(1-z)]]]

Surface Plot of Put & Call Prices For Varying Stock and Strike Prices

CallPriceSurface = Plot3D[VCall[S,K,.05,.02,.75,1,0],{S,50,130},{K,50,120}, AxesLabel->{"Stock Price S","Strike K", "Call Value \!\(\*SuperscriptBox[SubscriptBox[
  StyleBox[\"V\",\nFontSlant->\"Italic\"], \"C\"], 
 StyleBox[\"E\",\nFontSlant->\"Italic\"]]\)"}, PlotStyle->Yellow];

PutPriceSurface= Plot3D[VPut[S,K,.05,.02,.75,1,0],{S,50,130},{K,50,120}, AxesLabel->{"Stock Price S","Strike K", "Call Value \!\(\*SuperscriptBox[SubscriptBox[
  StyleBox[\"V\",\nFontSlant->\"Italic\"], \"C\"], 
 StyleBox[\"E\",\nFontSlant->\"Italic\"]]\)"}, PlotStyle->Blue];

Show[CallPriceSurface,PutPriceSurface, PlotLabel->"Put/Call option prices for various stock prices S and strikes K \nwhen r = 5%, δ = 2%, T=  1, and t = 0"]

Surface Plot of Call Prices For Varying Volatilities σ and Strike Prices K

Plot3D[VCall[100,K,.05,.02,sigma,1,0],{sigma,0,1},{K,50,120}, AxesLabel->{"Volatility σ","Strike K", "Call Value ((Subscript[V, C])^E)"},PlotLabel->"Call option value for various volatilities σ and strikes K \nwhen S = 100, r = 5%, δ = 2%, T=  1, and t = 0", ColorFunction->Function[{x,y,z},Hue[0.65*(1-z)]]]

Surface Plot of Put Prices For Varying Volatilities σ and Strike Prices K

Plot3D[VPut[100,K,.05,.02,sigma,1,0],{sigma,0,1},{K,50,120}, AxesLabel->{"Volatility σ","Strike K", "Put Value ((Subscript[V, P])^E)"},PlotLabel->"Put option value for various volatilities σ and strikes K \nwhen S = 100, r = 5%, δ = 2%, T=  1, and t = 0", ColorFunction->Function[{x,y,z},Hue[0.65*(1-z)]]]

Surface Plot of Put & Call Prices For Varying Stock and Strike Prices

CallPriceSurface = Plot3D[VCall[100,K,.05,.02,sigma,1,0],{sigma,0,1},{K,50,120}, AxesLabel->{"Volatility σ","Strike K", "Call Value \!\(\*SuperscriptBox[SubscriptBox[
  StyleBox[\"V\",\nFontSlant->\"Italic\"], \"C\"], 
 StyleBox[\"E\",\nFontSlant->\"Italic\"]]\)"}, PlotStyle->Yellow];

PutPriceSurface= Plot3D[VPut[100,K,.05,.02,sigma,1,0],{sigma,0,1},{K,50,120}, AxesLabel->{"Volatility σ","Strike K", "Call Value \!\(\*SuperscriptBox[SubscriptBox[
  StyleBox[\"V\",\nFontSlant->\"Italic\"], \"C\"], 
 StyleBox[\"E\",\nFontSlant->\"Italic\"]]\)"}, PlotStyle->Blue];

Show[CallPriceSurface,PutPriceSurface, PlotLabel->"Put/Call option prices for various volatilities σ and strikes K \nwhen S = 100, r = 5%, δ = 2%, T=  1, and t = 0"]