Google Colaboratoryでオプション価格計算式を実装する

当ページのリンクには広告が含まれています。
stock-g6cf54e20b_640

スマホのアプリから計算できますが、週末はメンテナンスしていることも多いので、他の方法としてPythonを使ってGoogle Colaboratoryで計算してみます。間違いがあるかもしれませんので、ご注意下さい。

テストです。

原資産28143.97

短期金利 -0.03%としています

4月限 26500 プット IV19.486% Priceは230です

セータパラメータは365日とするか、営業日ベースとするかでかなり差が出てきてしまいます。営業日ベースが多くの場合用いられていると思います。

プット26500の計算

目次

Google Colaboratoryでのオプション計算式の実装

エクセルのVBAの方が早いですが、Google Colaboratoryの場合はOfficeを必要としませんので、すぐに確認できます

オプション価格計算はBlack_scholes方程式が用いられます。

import numpy as np
from scipy.stats import norm

def black_scholes(S, K, T, r, sigma, q, option_type):
    d1 = (np.log(S/K) + (r - q + sigma**2/2)*T) / (sigma*np.sqrt(T))
    d2 = d1 - sigma*np.sqrt(T)
    if option_type == 'call':
        price = S*np.exp(-q*T)*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
    elif option_type == 'put':
        price = -S*np.exp(-q*T)*norm.cdf(-d1) + K*np.exp(-r*T)*norm.cdf(-d2)
    return price

def implied_volatility_put(price, S, K, T, r, q):
    tol = 1e-6
    max_iter = 100
    sigma = 0.5
    for i in range(max_iter):
        d1 = (np.log(S/K) + (r - q + sigma**2/2)*T) / (sigma*np.sqrt(T))
        d2 = d1 - sigma*np.sqrt(T)
        vega = S*np.exp(-q*T)*norm.pdf(d1)*np.sqrt(T)
        diff = black_scholes_put(S, K, T, r, sigma, q) - price
        if abs(diff) < tol:
            return sigma
        sigma = sigma - diff/vega
    return None

S = 27500.0
K = 26500.0
T = 24.74/280.0
r = -0.03
q = 0.0
price = 230.0

sigma = implied_volatility_put(price, S, K, T, r, q)

if sigma is not None:
    print(f"Implied volatility: {sigma:.2%}")
else:
    print("Could not compute implied volatility.")

S 原資産価格

K オプション行使価格

T セータ 残存日数/365日か営業日ベースで計算するかでだいぶ変わります

r 金利 -0.03%

q 配当 0として計算しました

price オプション価格 を入力して計算すると

Implied volatility: 18.10%

とIV(Implied volatility)が計算できます

IVからオプション価格を計算する

# Define the Black-Scholes option pricing formula
S = 27855
K = 26500.0
T = 24.74/280.0
r = -0.03
iv = 0.1857
q = 0.0
option_type = 'put'

# Calculate option price using implied volatility
price = black_scholes(S, K, T, r, iv, q, option_type)

# Print the result
if iv is not None:
    print(f"The implied volatility is: {iv:.2%}")
    print(f"The option price using the implied volatility is: {price:.2f}")
else:
    print
The implied volatility is: 18.57%
The option price using the implied volatility is: 163.51

金曜日の引けの値で計算してみるとだいたい同じ値になったので計算は大丈夫なようです。

残存100日以上であったり、合成ポジションのグリークスが正確にでないなど限界もありますが多くのオプション価格予測ソフトは上記のようなモデルで行われています。

相場急変時は理論価格との乖離や誤差が問題になるので、注意して下さい。

また、コードに間違いがあるかもしれません。注意して下さい。

stock-g6cf54e20b_640

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ボラティリティトレードを意識してオプショントレーディングのエッジを追求していきたいと研究の日々です。よろしくお願い申し上げます。

このフォームに入力するには、ブラウザーで JavaScript を有効にしてください。
目次