1. 概要
本コードでは、株価データを取得し、そのリターンを基に モンテカルロシミュレーション を行い、将来の株価レンジを予測します。
特徴は「ハイブリッド推定」アプローチを採用し、ボラティリティと平均リターンを異なる期間で計算している点です。
2. ライブラリとデータ準備
import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
import japanize_matplotlib # グラフを日本語表示対応
yfinance : Yahoo Financeから株価データを取得
matplotlib : 結果をヒストグラムで可視化
japanize_matplotlib : タイトルなどを日本語対応にする
取得銘柄は "JMIA"、期間は2024-01-01 ~ 2025-08-28。
data = yf.download(ticker, start=start, end=end)
prices = data["Close"]
returns = prices.pct_change().dropna()
prices : 終値データ
returns : 日次リターン
3. ハイブリッド推定関数
def hybrid_params(returns, vol_window=21, mean_window=252):
vol = returns[-vol_window:].std()
mu = returns[-mean_window:].mean()
return mu, vol
mu(期待リターン)
直近 mean_window 日の平均リターンを採用
vol(ボラティリティ)
直近 vol_window 日の標準偏差を採用
👉 これにより、
トレンド(リターン)は長期の安定性を反映
ボラティリティは直近の市況を反映
する「ハイブリッド」な推定が可能になります。
4. モンテカルロシミュレーション
def monte_carlo(prices, mu, vol, horizon=1, n_sims=10000):
S0 = prices.iloc[-1] # 現在株価
sims = np.zeros(n_sims)
for i in range(n_sims):
rand_returns = np.random.normal(mu, vol, horizon)
sims[i] = S0 * np.prod(1 + rand_returns)
return sims
np.random.normal(mu, vol, horizon)
→ 期間 horizon の乱数リターンを生成
np.prod(1 + rand_returns)
→ 複利効果を加味して株価をシミュレート
n_sims=10000
→ 1万回繰り返して確率分布を構築
5. シナリオ設定と実行
scenarios = {"1d": 1, "1w": 5, "1m": 21}
翌日(1d)
翌週(1w = 5営業日)
翌月(1m = 21営業日)
それぞれについて1万回シミュレーション。
for label, horizon in scenarios.items():
sims = monte_carlo(prices, mu, vol, horizon, n_sims=n_sims)
results[label] = sims
plt.hist(sims, bins=50, alpha=0.6, label=label)
ヒストグラムで確率分布を可視化。
6. 結果の可視化と統計値
plt.axvline(prices.iloc[-1].squeeze(), color="black", linestyle="--", label="現在価格")
plt.legend()
plt.title(f"{ticker} Monte Carloシミュレーション")
出力例:
平均価格
中央値
下位25%水準
上位75%水準
print(f"現在価格 : {prices.iloc[-1].squeeze():.2f}")
for label, sims in results.items():
print(f"\n--- {label} ---")
print(f"平均価格 : {np.mean(sims):.2f}")
print(f"中央値 : {np.median(sims):.2f}")
print(f"下位25%水準 : {np.percentile(sims, 25):.2f}")
print(f"上位75%水準 : {np.percentile(sims, 75):.2f}")
7. まとめ
📊 短期的な株価予測レンジを確率的に示せる
⚖️ ハイブリッド推定で「直近のボラティリティ」と「中長期の平均リターン」を同時に反映
🔮 投資判断における「期待値とリスクのバランス」を定量的に評価可能
8.出力例
極端な例 ボラ5日 平均リターン5日
mu, vol = hybrid_params(returns, vol_window=5, mean_window=5)
現在価格 : 9.18
--- 1d ---
平均価格 : 9.63
中央値 : 9.63
下位25%水準 : 9.36
上位75%水準 : 9.90
--- 1w ---
平均価格 : 11.64
中央値 : 11.59
下位25%水準 : 10.89
上位75%水準 : 12.32
--- 1m ---
平均価格 : 24.82
中央値 : 24.41
下位25%水準 : 21.44
上位75%水準 : 27.71
標準的なパラメーター例 ボラ18日(今月) 平均リターン63日(3か月)
mu, vol = hybrid_params(returns, vol_window=18, mean_window=63)
現在価格 : 9.18
--- 1d ---
平均価格 : 9.35
中央値 : 9.36
下位25%水準 : 8.86
上位75%水準 : 9.85
--- 1w ---
平均価格 : 10.06
中央値 : 9.93
下位25%水準 : 8.82
上位75%水準 : 11.18
--- 1m ---
平均価格 : 13.35
中央値 : 12.50
下位25%水準 : 9.85
上位75%水準 : 15.93
ハイブリッド推定を使った株価モンテカルロシミュレーション(理論)
ハイブリッド推定を使った株価モンテカルロシミュレーション
1. 背景と目的
株価シミュレーションにおいて、リターン分布の期待値(μ)とボラティリティ(σ)の推定方法は結果に大きな影響を与える。
従来は「直近のデータ全体から単一の推定値を計算」するが、短期予測においては直近のボラティリティを重視しつつ、リターンの期待値は長期平均で平滑化する方が妥当な場合がある。
本研究ノートでは、
μ: 半年間の平均リターン
σ: 直近1か月のボラティリティ
を組み合わせる「ハイブリッド推定」を導入し、これを基にモンテカルロ法を用いて価格分布を生成する。
2. 理論モデル
2.1 幾何ブラウン運動 (GBM)
株価
𝑆𝑡は次の確率微分方程式に従うと仮定する。
dS_t=μS_tdt+σS_tdW_t
離散化すると:
S_t+Δt=S_t exp((μ−\frac{1}{2}σ^2)Δt+σΔtZ)
ここで
Z∼N(0,1)
2.2 ハイブリッド推定
リターンの期待値推定:上の例ではN=3month
\bar{μ}=\frac{1}{N}\sum_{i=1}^{N} r_i....(N=6months)
ボラティリティ推定:上の例ではM=1month
\bar{σ}=\frac{1}{M−1}\sum_{j=1}^{M}(r_j−\bar{r}_{1M})^2....(M=1month)
つまり、μは長期の滑らかな傾向、σは短期の急激な変動を反映する。
3. 実装(Python)
import numpy as np
import yfinance as yf
def hybrid_mu_sigma(prices):
returns = np.log(prices / prices.shift(1)).dropna()
mu = returns[-126:].mean() * 252 # 半年の期待リターン(営業日換算)
sigma = returns[-21:].std() * np.sqrt(252) # 1か月のボラティリティ
return mu, sigma
def monte_carlo(prices, mu, sigma, horizon, n_sims=10000):
last_price = prices.iloc[-1]
dt = horizon
rand = np.random.randn(n_sims)
sims = last_price * np.exp((mu - 0.5*sigma**2)*dt + sigma*np.sqrt(dt)*rand)
return sims
4. 実験
上記の通り
シミュレーション結果は分布ヒストグラムとして可視化し、現在価格を黒線で表示。
5. 結果(例)
μ(半年間平均): 年率 +7.2%
σ(1か月): 年率 19.8%
→ 直近のボラティリティを反映するため、急変動局面では広い分布が得られる一方で、期待値は平滑化され、外れ値に引きずられにくい。
6. 考察
短期予測においては、過去半年のトレンドが持続する仮定を反映しつつ、直近のリスクを強調できる。
配当落ちなどによる価格ギャップは、ボラティリティ推定に影響を与えるため、調整が必要。
今後は**確率分布の歪み(スキュー・クラッシュリスク)**を加味する必要あり。
7. まとめ
ハイブリッド推定は、従来手法よりも直感的に投資家の意思決定に近いリスク・リターン評価を可能にする。
特に「不安定な相場」で有効。
実運用への応用に際しては、配当落ち調整・金利環境の反映が課題。