モンテカルロ・リスクシミュレーション — ポートフォリオ結果のモデリング

モンテカルロシミュレーションでは、ポートフォリオの10万以上の将来の可能性のあるパスをモデル化し、バリュー・アット・リスク(VaR)や期待ショートフォールなどのリスク指標を定量化できます。単一の結果を仮定する代わりに、可能性の分布を確認できます。

例: 取引戦略の10万回シミュレーションを実行します。結果は次のようになります: 68%の結果で10〜50ドルの利益、25%で10〜30ドルの損失、5%で50〜200ドルの損失、2%で100ドル以上の利益。これでリスクプロファイルが理解できます。

基本的な幾何ブラウン運動(GBM)

将来価格をドリフトとボラティリティを伴うランダムウォークとしてモデル化:

Python — モンテカルロ価格パス
import numpy as np
def simulate_price_paths(S0, mu, sigma, T, dt, n_sims=10000):
# S0: 現在価格, mu: ドリフト, sigma: ボラティリティ
# T: 期間(日), dt: 時間ステップ, n_sims: シミュレーション数
steps = int(T / dt)
paths = np.zeros((n_sims, steps))
paths[:, 0] = S0
for i in range(1, steps):
# dS = mu*S*dt + sigma*S*sqrt(dt)*Z
Z = np.random.normal(0, 1, n_sims)
dS = mu * paths[:, i-1] * dt + sigma * paths[:, i-1] * np.sqrt(dt) * Z
paths[:, i] = paths[:, i-1] + dS
return paths

ポートフォリオリスク指標

バリュー・アット・リスク(VaR)

シナリオの5%でのみ超える損失(95%信頼区間):

Python — VaR計算
def calculate_var(simulations, confidence=0.95):
pnl = simulations[:, -1] - simulations[:, 0]
var = np.percentile(pnl, (1 - confidence) * 100)
return var # 例: -$2,340

期待ショートフォール(CVaR)

最悪5%のケースにおける平均損失:

Python — CVaR計算
def calculate_cvar(simulations, confidence=0.95):
pnl = simulations[:, -1] - simulations[:, 0]
var_threshold = np.percentile(pnl, (1 - confidence) * 100)
worst_5_pct = pnl[pnl <= var_threshold]
cvar = np.mean(worst_5_pct)
return cvar # 例: -$3,800(VaRより悪い)

戦略固有のシミュレーション

価格パスだけでなく、実際の取引ルールをシミュレート:

Python — 戦略モンテカルロ
def simulate_strategy(capital, win_rate, avg_win, avg_loss, trades_per_day=10, days=30, n_sims=10000):
results = np.zeros(n_sims)
for sim in range(n_sims):
equity = capital
n_trades = trades_per_day * days
for _ in range(n_trades):
if np.random.rand() < win_rate:
pnl = np.random.normal(avg_win, avg_win * 0.2)
else:
pnl = -np.random.normal(avg_loss, avg_loss * 0.2)
equity += pnl
if equity < capital * 0.5:
break # Stop-out at 50% loss
results[sim] = equity
return results

Smart Moneyシグナルを用いたストレステスト

Smart Moneyの信頼度が低下した場合の最悪のシナリオをモデル化:

Python — ストレステストシナリオ
def stress_test_scenarios(base_win_rate):
# シナリオ1: 通常の状況(HIGH信頼度)
scenario_normal = simulate_strategy(10000, win_rate=base_win_rate)
# シナリオ2: シグナルの悪化(MEDIUM信頼度)
scenario_medium = simulate_strategy(10000, win_rate=base_win_rate * 0.95)
# シナリオ3: 崩壊(VETO条件)
scenario_veto = simulate_strategy(10000, win_rate=0.45) # ネガティブエッジ
return {
'normal': {'var': np.percentile(scenario_normal, 5), 'mean': np.mean(scenario_normal)},
'medium': {'var': np.percentile(scenario_medium, 5), 'mean': np.mean(scenario_medium)},
'veto': {'var': np.percentile(scenario_veto, 5), 'mean': np.mean(scenario_veto)}
}

解釈

10,000回のシミュレーションから学べること:

Smart Moneyシグナルを用いたストレステスト戦略

通常、悪化、およびVETO Smart Money条件下でのポートフォリオリスクを理解します。当社のAPIがシグナルを提供し、モンテカルロシミュレーションが結果をモデル化します。

今日のリスクモデル →