Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

コール オプション価格についてのブラック・ショールズの公式

この例では、ブラック・ショールズの公式を使用してコール オプション価格を計算する方法を示します。この例では、vpasolve を使用して、ブラック・ショールズの公式からスポット価格とインプライド ボラティリティを求める問題を数値的に解きます。

コール オプション価格を求める

ブラック・ショールズの公式は、ヨーロピアン コール オプションの価格をモデル化したものです [1]。配当のない原株について、式のパラメーターが次のように定義されます。

  • S は、現在の株価またはスポット価格。

  • K は、行使価格。

  • σ は、株式の連続複利の年次収益の標準偏差。ボラティリティと呼ばれる。

  • T は、オプションが満期となるまでの期間 (年単位)。

  • r は、年率換算した無リスク金利。

ブラック・ショールズのパラメーターに基づくコール オプションの価格 C は次のようになります。

C=N(d1)×S-N(d2)×PV(K),

ここで

  • d1=1σT[log(SK)+(r+σ22)T]

  • d2=d1-σT

  • PV(K)=Kexp(-rT)

  • N(d) は標準正規累積分布関数で、N(d)=12π-dexp(-t2/2)dt となります。

95 ドルの行使価格で 3 か月で有効期限が切れるヨーロピアン ストック オプションの価格を求めます。原株が無配当で、100 ドルで取引され、ボラティリティが年間 50% であると仮定します。無リスク金利は年間 1% です。

sym を使用して、ブラック・ショールズのパラメーターの値を表現するシンボリック数を作成します。

syms t d
S = sym(100);        % current stock price (spot price)
K = sym(95);         % exercise price (strike price)
sigma = sym(0.50);   % volatility of stock
T = sym(3/12);       % expiry time in years
r = sym(0.01);       % annualized risk-free interest rate

オプション価格を近似なしで計算します。標準正規累積分布関数を表現するシンボリック関数 N(d) を作成します。

PV_K = K*exp(-r*T);
d1 = (log(S/K) + (r + sigma^2/2)*T)/(sigma*sqrt(T));
d2 = d1 - sigma*sqrt(T);
N(d) = int(exp(-((t)^2)/2),t,-Inf,d)*1/sqrt(2*sym(pi))
N(d) = 

erf(2d2)2+12

Csym = N(d1)*S - N(d2)*PV_K
Csym = 

50erf(24log(2019)+272002)-95e-1400erf(24log(2019)-232002)2+12+50

可変精度の数値結果を取得するには、vpa を使用します。既定では、vpa は有効桁数 32 桁の数値を返します。

Cvpa = vpa(Csym)
Cvpa = 12.52792339252145394554497137187

精度を変更するには、digits を使用します。有効桁数 6 桁でのオプション価格は 12.5279 ドルです。

digits(6)
Cvpa = vpa(Csym)
Cvpa = 12.5279

コール オプション価格のプロット

次に、同じストック オプションで、満期までの期間が変わり、日々の株価がわからないとします。満期までの期間 T を 0~0.25 年まで変動させ、スポット価格 S を 50 ドル~140 ドルまで変動させた場合の、このコール オプションの価格を求めます。行使価格 (K)、ボラティリティ (sigma)、および金利 (r) は、前の例の値を使用します。この場合、満期までの期間 T と日々の株価 S を変量として使用します。

シンボリック式 C を定義し、TS を未知の変数として使用してコール オプション価格を表現します。

syms T S

PV_K = K*exp(-r*T);
d1 = (log(S/K) + (r + sigma^2/2)*T)/(sigma*sqrt(T));
d2 = d1 - sigma*sqrt(T);
Nd1 = int(exp(-((t)^2)/2),-Inf,d1)*1/sqrt(2*pi);
Nd2 = int(exp(-((t)^2)/2),-Inf,d2)*1/sqrt(2*pi);
C = Nd1*S - Nd2*PV_K;

スポット価格と満期までの期間の関数としてコール オプション価格をプロットします。

fsurf(C,[50 140 0 0.25])
xlabel('Spot price')
ylabel('Expiry time')
zlabel('Call option price')

Figure contains an axes object. The axes object with xlabel Spot price, ylabel Expiry time contains an object of type functionsurface.

満期までの期間 0.1 年、スポット価格 105 ドルで、コール オプション価格を計算します。subs を使用して TS の値を式 C に代入します。vpa を使用して価格を数値結果として返します。

Csym = subs(C,[T S],[0.1 105]);
Cvpa = vpa(Csym)
Cvpa = 12.5868

スポット価格を求める

オプション価格が変化した場合に、原株価にどのような影響があるかを知りたいとします。これは、既知のパラメーター KσTr、および C を与えたブラック・ショールズの公式から S を求める問題です。

たとえば、1 か月後に、同じコール オプション価格が満期までの期間 2 か月で 15.04 ドルで取引されるとします。原株のスポット価格を求めます。未知のパラメーター S をもつブラック・ショールズの公式を表現するシンボリック関数 C(S) を作成します。

syms C(S) d1(S) d2(S) Nd1(S) Nd2(S)

K = 95;         % exercise price (strike price)
sigma = 0.50;   % volatility of stock
T = 2/12;       % expiry time in years
r = 0.01;       % annualized risk-free interest rate

PV_K = K*exp(-r*T);
d1(S) = (log(S/K) + (r + sigma^2/2)*T)/(sigma*sqrt(T));
d2(S) = d1 - sigma*sqrt(T);
Nd1(S) = int(exp(-((t)^2)/2),-Inf,d1)*1/sqrt(2*pi);
Nd2(S) = int(exp(-((t)^2)/2),-Inf,d2)*1/sqrt(2*pi);
C(S) = Nd1*S - Nd2*PV_K;

vpasolve を使用して原株のスポット価格を数値的に解きます。正の数値でのみ解を求めます。原株のスポット価格は 106.162 ドルです。

S_Sol = vpasolve(C(S) == 15.04,S,[0 Inf])
S_Sol = 106.162

インプライド ボラティリティを求める

オプション価格が変化した場合に、インプライド ボラティリティがどうなるか知りたいとします。これは、既知のパラメーター SKTr、および C を与えたブラック・ショールズの公式から σ の値を求める問題です。

95 ドルの行使価格で、3 か月で有効期限が切れる、同じストック オプションを考えます。原株が 100 ドルで取引され、無リスク金利が年間 1% であると仮定します。6 ドル~25 ドルの範囲のオプション価格の関数としてインプライド ボラティリティを求めます。オプション価格の範囲のベクトルを作成します。未知のパラメーター sigma をもつブラック・ショールズの公式を表現するシンボリック関数 C(sigma) を作成します。vpasolve を使用してインプライド ボラティリティを数値的に解きます。

syms C(sigma) d1(sigma) d2(sigma) Nd1(sigma) Nd2(sigma)

S = 100;        % current stock price (spot price)
K = 95;         % exercise price (strike price)
T = 3/12;       % expiry time in years
r = 0.01;       % annualized risk-free interest rate
C_Range = 6:25; % range of option price
sigma_Sol = zeros(size(C_Range));

PV_K = K*exp(-r*T);
d1(sigma) = (log(S/K) + (r + sigma^2/2)*T)/(sigma*sqrt(T));
d2(sigma) = d1 - sigma*sqrt(T);
Nd1(sigma) = int(exp(-((t)^2)/2),-Inf,d1)*1/sqrt(2*pi);
Nd2(sigma) = int(exp(-((t)^2)/2),-Inf,d2)*1/sqrt(2*pi);
C(sigma) = Nd1*S - Nd2*PV_K;
for i = 1:length(C_Range)
    sigma_Sol(i) = vpasolve(C(sigma) == C_Range(i),sigma,[0 Inf]);
end

オプション価格の関数としてインプライド ボラティリティをプロットします。

plot(C_Range,sigma_Sol)
xlabel('Option price')
ylabel('Implied volatility')

Figure contains an axes object. The axes object with xlabel Option price, ylabel Implied volatility contains an object of type line.

参考文献

[1] https://en.wikipedia.org/wiki/Black–Scholes_model

参考

関数