今回はブラック-ショールズ方程式で
オプション価格を計算する方法についてです


解説動画はこちら




ブラック-ショールズ方程式とは

デリバティブの価格づけに現れる
偏微分方程式のことです。

デリバティブは株式や債券、通貨、商品などの
原資産から派生した金融商品の総称のことです。

ブラックショールズ方程式は主に
ヨーロピアン・オプション(満期時のみ行使可) の
理論価格を求めるためのモデルになっています。


オプション取引とは

金融商品のデリバティブの一種で
ある原資産について、あらかじめ決められた
将来の一定の日または期間において
事前に定めた権利行使価格で取引できる
「権利」のことです

原資産を
買う権利についてのオプションを「コールオプション」
売る権利についてのオプションを「プットオプション」
と呼んでいます。



日経225オプション

日経225オプションの価格情報があります。


オプション取引の価格計算ツール(日本取引所)

価格計算ツールもついているので
今回はこの計算方法をPythonで再現します。


ブラックショールズの計算式について

モデルの前提条件

•    価格は幾何ブラウン運動に従う
•    市場は完全で、裁定取引がない
•    無リスク金利は一定
•    ボラティリティ(変動率)は一定
•    配当は考慮しない(配当あり版も考慮は可)


使用する変数

S 現在の価格(Spot Price)
K 権利行使価格(Strike Price)
T 満期までの残存期間(年単位)
r 無リスク金利(年利)
σ 価格のボラティリティ(年率標準偏差)

ブラック-ショールズの数式

コールオプション価格(買う権利):
スクリーンショット 2025-07-12 17.06.54


プットオプション価格(売る権利):
スクリーンショット 2025-07-12 17.06.59

こんな感じの計算式になっていますが
途中、d1,d2というものが必要になります。

d_1, d_2 の定義
スクリーンショット 2025-07-12 17.08.28

なお、N(x) は 標準正規分布の累積分布関数(CDF)になります。


オプション計算のPythonコード

下記の関数で、オプション価格を計算できます。
import numpy as np
from scipy.stats import norm

def black_scholes_option_price(S, K, T, r, sigma, option_type='call'):
    """
    ブラック-ショールズ方程式によるオプション価格の計算
    S: 現在の株価
    K: 権利行使価格
    T: 残存期間(年単位)
    r: 無リスク金利(年利)
    sigma: ボラティリティ(年率標準偏差)
    option_type: 'call' か 'put'
    """
    d1 = (np.log(S / K) + (r + sigma**2 / 2) * T) / (sigma * np.sqrt(T))
    d2 = d1 - sigma * np.sqrt(T)
    if option_type == 'call':
        price = S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)
    elif option_type == 'put':
        price = K * np.exp(-r * T) * norm.cdf(-d2) - S * norm.cdf(-d1)
    else:
        raise ValueError("option_type must be 'call' or 'put'")
    return price

実際に値を入れて計算する場合はこのようになります。
日数で計算したい場合は年単位なのでうまく合わせます。
# パラメータ例
S = 39425       # 現在の価格
K = 40000       # 権利行使価格
T = 62/365      # 満期まで62日
r = 0.0         # 無リスク金利 0%
sigma = 0.1883  # ボラティリティ 18.83%

call_price = black_scholes_option_price(S, K, T, r, sigma, option_type='call')
put_price = black_scholes_option_price(S, K, T, r, sigma, option_type='put')

print(f"Call Option Price: {call_price:.4f}")
print(f"Put Option Price : {put_price:.4f}")
Call Option Price: 963.0367
Put Option Price : 1538.0367




まとめ

この計算結果をどう応用するかですが
オプション取引の戦略を決定するために使います。

市場価格 > 理論価格

オプションが「割高」
プットまたはコールを「売る(ショート)」

市場価格 < 理論価格

オプションが「割安」
プットまたはコールを「買う(ロング)」


ということになります。

この辺りを実際の売買手順フローに落とし込むと
① 必要データ収集(S, K, T, r, σ)
        ↓
② BSモデルで理論価格算出(call/put)
        ↓
③ 実際の市場価格と比較(割高・割安を判断)
        ↓
④ 戦略選定(買う/売る or 戦略組み合わせ)
        ↓
⑤ 証券口座で売買、モニタリング

という感じになるので
自動取引ができるんじゃ無いかと
画策しているところです。

今回はブラックショールズ方程式による
オプション価格の計算方法についてでした。

今回はここまでです
それでは。