| (%i1) | load(distrib)$ |
| (%i2) | snormal(y):=cdf_normal(y,0,1); |
| --> | /* 正規密度関数を定義 */; |
| --> | /* 正規累積密度関数を定義 */; |
| --> | /* 以下はブラックショールズのコールオプション式を定義 */; |
| --> | /* s=株式時価 x=権利行使価格 sigma=年率ボラティリティ(標準偏差) */; |
| --> | /* T=残存年数(残存日数30日なら T=30/365 r=年率金利 */; |
| (%i3) | d1(s, x, sigma, T, r):=(log(s/x)+(r+sigma^2/2)*T)/(sigma*sqrt(T)); |
| (%i4) | d2(s, x, sigma, T, r):=d1(s, x, sigma, T, r)-sigma*sqrt(T); |
| (%i6) | float(bsCall(42, 40, 0.2, 0.5, 0.1)); |
| (%i7) | dd1:float(d1(42, 40, 0.2, 0.5, 0.1)); |
| (%i8) | bsPut(s,x,sigma,T,r):=bsCall(s,x,sigma,T,r)+x*exp(-r*T)-s$ |
| (%i9) | float(bsPut(42, 40, 0.2, 0.5, 0.1)); |
| (%i10) | wxplot2d(bsCall(s, 40, 0.2,0.5, 0.1),[s,0.01,50]); |

| (%i11) | wxplot2d(bsPut(s, 40, 0.2,0.5, 0.1),[s,0.01,50]); |

|
/* 累積密度関数を微分すれば密度関数となる */;
オプションのデルタについてオプションのデルタはコールの価格式を株価sで偏微分すれば求まるが、これが意外に一筋縄ではいかない。何故なら正規分布関数の引数d1、 d2 にはsが含まれており、ややこしい合成関数の微分となってしまう。この辺の証明は上記のよくわかるブラック・ショールズモデル 蓑谷千凰彦 に書かれているので、それを参考にして数式処理する。なお、HullのOptions,Futures and other derivatives では練習問題として取り上げられており、Solutions manualの中で詳しい証明が示されている。 \[\frac{\partial C}{\partial s}= Φ(d1)+\{s・ \frac{\partial Φ(d1)}{\partial s}-x・ exp^{-rT} \frac{\partial Φ(d2)}{\partial s}\} \] 上式は株価sで偏微分した結果になるが{ }で括った部分がゼロとなることが確かめられればデルタはΦ(d1) つまり標準正規分布関数となる。括弧の部分がゼロとなることをmaximaで確かめると以下のようになる。 |
| (%i12) | z1:diff(snormal(d1),d1); |
| (%i13) | z2:diff(d1(s, x, sigma, T, r),s); |
| (%i14) | z3:z1*z2; |
| (%i15) | z4:diff(snormal(d2),d2); |
| (%i16) | z5:s*z1-x*exp(-r*T)*z4; |
| --> | /* subst(代入する式,変数名,式)は(式z5式)中の(変数-d1^2/2)に */; |
| --> | /* (代入する式(-r*T-log(s/x)-d2^2/2))を代入する */; |
| (%i17) | z6:subst((-r*T-log(s/x)-d2^2/2),-d1^2/2,z5); |
| (%i18) | DELT:z1+z6; |
| (%i19) | define (Delta(s, x, sigma, T, r),diff(bsCall(s, x, sigma, T, r),s))$ |
| (%i20) | float(Delta(42, 40, 0.2, 0.5, 0.1)); |
| (%i21) | wxplot2d(Delta(s, 40, 0.2,0.5, 0.1),[s,0.01,50]); |

| (%i22) | wxplot3d(Delta(s, 40, 0.2,T, 0.1),[T,0.1,0.95],[s,0.1,80]); |
