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は最強のツールといえます。
おすすめ参考書書籍:
|
|


コメント