Black-Scholes equation
1973
原資産✖️正規分布の適当な範囲に収まる確率
C = S_0 N(d1)e^{-qt} - S_1N(d2)e^{-rt}
ここで
S0 = 資産の現在の価格(given)
S_1 = 権利行使価格
q = 元資産の利回り
t = 満期までの時間(年単位)
d1 = \ln\frac{S_0}{S_1} + \frac{(r + \sigma^2 / 2) t}{\sigma \sqrt{t}}
d2 = d1 - {\sigma \sqrt{t}}
σ ボラティリティ(given)
簡単にして意味を把握する
S1=S0, t=1, r=q=0とすると
S0(N(σ/2) - N(-σ/2))
σ=2とすると、カッコの中は標準正規分布で±1σの範囲に収まる確率となる
対称性からN(-σ/2) = 1 - N(σ/2)なので
S_0(2N(σ/2) - 1)
S_0(2N(1)-1)\sim0.68S_0
$ 2*CDF[NormalDistribution[0,1],1]-1
標準正規分布の累積分布関数(CDF)の表は、標準正規分布の確率を示しています。この表の軸は以下のようになります:
縦軸(または行): これはZスコアの整数部分または十の位を示しています。
Zスコアは、データポイントが平均からどれだけ離れているかを示す統計的測定です
横軸(または列): これはZスコアの小数部分または一の位を示しています。
pyimport numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
def black_scholes_call(S0, X, r, q, t, sigma):
d1 = (np.log(S0 / X) + (r - q + sigma**2 / 2) * t) / (sigma * np.sqrt(t))
d2 = d1 - sigma * np.sqrt(t)
call_price = S0 * np.exp(-q * t) * norm.cdf(d1) - X * np.exp(-r * t) * norm.cdf(d2)
return call_price
# Parameters
S0 = 15000 # asset price
X = 15500 # strike price
r = 0.0 # risk-free rate
q = 0.0 # yield on the underlying asset
t = 1.0/12 # time to expiration in years
# Create a range of volatilities
sigmas = np.arange(0.1, 0.4, 0.01)
# Calculate call option prices for each volatility
call_prices = [black_scholes_call(S0, X, r, q, t, sigma) for sigma in sigmas]
# Plot
plt.figure(figsize=(10, 6))
plt.plot(sigmas, call_prices, label='Call Option Price')
plt.xlabel('Volatility (σ)')
plt.ylabel('Call Option Price')
plt.title('Call Option Price vs. Volatility')
plt.legend()
plt.grid(True)
# Set y-axis ticks
max_price = max(call_prices)
plt.yticks(np.arange(0, max_price, 50))
plt.show()
に聞いたら微妙に間違えた式を出してきた
のリスト
高校数学 + αぐらいで導出できる