【金融工学 × Python】株価データ分析・ボラティリティ計算・オプション価格の実装方法を徹底解説

IT

Pythonは金融工学と最も相性の良いプログラミング言語です。
シンプルな文法・豊富な金融ライブラリ・機械学習との親和性の高さから、世界中の金融機関や個人投資家が利用しています。

本記事では、株価データ取得・ボラティリティ計算・IV推定・オプション価格の計算例・自動売買の基礎まで、投資家がPythonで実践できる金融工学の具体例をまとめています。

スポンサーリンク

1. Pythonでできること(金融データ分析の基本)

① 株価データの取得(yfinance)

Pythonでは yfinance というライブラリを使うと、わずか数行で株価データを取得できます。

import yfinance as yf

data = yf.download("AAPL", period="1y")
print(data.head())

取得できるデータ:

  • 始値・高値・安値・終値
  • 出来高
  • 日次リターン

② ボラティリティの計算

日次リターンの標準偏差を年換算することで、年率ボラティリティを求められます。

import numpy as np

returns = data["Close"].pct_change().dropna()
vol = returns.std() * np.sqrt(252)

print("年率ボラティリティ:", vol)

③ インプライド・ボラティリティ(IV)の推定

IVは「オプション価格から逆算される未来の変動率」です。
Pythonでは scipy の数値計算を使って求められます。

from scipy.optimize import brentq
from math import log, sqrt, exp, pi

# BSモデル(コール)の理論価格
def bs_call(S, K, T, r, sigma):
    d1 = (log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*sqrt(T))
    d2 = d1 - sigma * sqrt(T)
    # 正規分布
    N = lambda x: (1 + erf(x / sqrt(2))) / 2
    return S*N(d1) - K*exp(-r*T)*N(d2)

# 市場価格と一致する sigma を求める
def implied_vol(S, K, T, r, market_price):
    return brentq(lambda sigma: bs_call(S, K, T, r, sigma) - market_price, 1e-6, 5)

iv = implied_vol(150, 150, 30/365, 0.01, 5.2)
print("IV:", iv)

これで任意のオプションのIVを推定できます。

2. オプション価格の計算例

① ブラック=ショールズ(BSモデル)のPython実装

BSモデルは数行で実装できます。

import numpy as np
from scipy.stats import norm

def bs_call(S, K, T, r, sigma):
    d1 = (np.log(S/K) + (r + 0.5*sigma*sigma)*T) / (sigma*np.sqrt(T))
    d2 = d1 - sigma*np.sqrt(T)
    return S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)

price = bs_call(100, 100, 1, 0.01, 0.2)
print("コールオプション価格:", price)

S(株価), K(行使価格), T(満期), σ(ボラティリティ)を変えればあらゆる価格が計算できます。

② モンテカルロによるオプション価格の計算

GBMで株価を大量にシミュレーションし、満期時の期待値を求める方法です。

import numpy as np

S0 = 100
K = 100
T = 1
r = 0.01
sigma = 0.2
N = 10000

# 株価シミュレーション
ST = S0 * np.exp((r - 0.5*sigma*sigma)*T + sigma*np.sqrt(T)*np.random.randn(N))

# ペイオフ(コール)
payoff = np.maximum(ST - K, 0)

# 割引現在価値
price = np.exp(-r*T) * np.mean(payoff)
print("モンテカルロで計算したオプション価格:", price)

BSモデルと同程度の価格に近づきます(試行回数が多いほど精度が向上)。

3. 投資家がPythonを活かす方法

① 自動売買(アルゴリズムトレード)

Pythonは自動売買の主要言語の1つで、次のようなことが可能です。

  • 移動平均線のクロスで売買
  • RSIなどのテクニカル指標
  • 機械学習を組み合わせた予測モデル
  • API経由で証券会社へ自動注文

国内でもSBI・楽天証券などがPython向けのAPIを提供しており、個人投資でも実践できます。

② リスク評価

Pythonを使うと、次のようなリスク指標を自動化できます。

  • VaR(バリューアットリスク)
  • ES(期待ショートフォール)
  • ボラティリティ推定
  • 相関行列・共分散行列の算出
  • シナリオ分析(ショックを与えた評価)

特に、ポートフォリオ全体のリスク可視化は、Pythonが最も得意とする領域です。

③ ポートフォリオ最適化(MPTの実装)

現代ポートフォリオ理論(MPT)をPythonで実装すると、最適な資産配分を計算できます。

  • リターンと分散を推定
  • 共分散行列を作成
  • 効率的フロンティアを描画
  • シャープレシオ最大のポートフォリオを求める

例:効率的フロンティアの最適化(pypfopt の利用)

from pypfopt import EfficientFrontier, risk_models, expected_returns

prices = yf.download(["AAPL", "MSFT", "GOOGL"], period="2y")["Close"]

mu = expected_returns.mean_historical_return(prices)
S  = risk_models.sample_cov(prices)

ef = EfficientFrontier(mu, S)
weights = ef.max_sharpe()
print(weights)

Pythonを使えば、自分専用の最適ポートフォリオが数秒で計算できます。

まとめ

本記事では、金融工学 × Python の最も実用的な部分を紹介しました。

  • 株価データ取得、ボラティリティ計算、IV推定ができる
  • BSモデル・モンテカルロ法でオプション価格を求められる
  • リスク評価や最適ポートフォリオの計算に応用可能
  • 自動売買や機械学習と組み合わせれば高度な分析も可能

金融工学を実際の投資や分析に活かすなら、Pythonは最強のツールといえます。

おすすめ参考書書籍:

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

金融工学入門 第2版 [ デーヴィド・G.ルーエンバーガー ]
価格:6,600円(税込、送料無料) (2025/11/26時点)

楽天で購入

 

 

コメント

タイトルとURLをコピーしました