Монте-Карло симуляція ризику — Моделювання результатів портфеля
Монте-Карло симуляції дозволяють моделювати понад 100 000 потенційних майбутніх шляхів вашого портфеля, кількісно оцінюючи метрики ризику, такі як Value at Risk (VaR) та очікуваний дефіцит. Замість припущення одного результату ви бачите розподіл можливостей.
Приклад: Проведіть 100 тис. симуляцій вашої торгової стратегії. Ви побачите: 68% результатів приносять прибуток $10-$50, 25% втрачають $10-$30, 5% втрачають $50-$200, і 2% приносять прибуток $100+. Тепер ви розумієте свій профіль ризику.
Базова геометрична броунівська динаміка (GBM)
Моделюйте майбутні ціни як випадкові блукання з дрейфом та волатильністю:
import numpy as np
def simulate_price_paths(S0, mu, sigma, T, dt, n_sims=10000):
steps = int(T / dt)
paths = np.zeros((n_sims, steps))
paths[:, 0] = S0
for i in range(1, steps):
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
Метрики ризику портфеля
Value at Risk (VaR)
Втрати, які ви перевищите лише у 5% сценаріїв (95% довіри):
def calculate_var(simulations, confidence=0.95):
pnl = simulations[:, -1] - simulations[:, 0]
var = np.percentile(pnl, (1 - confidence) * 100)
return var
Expected Shortfall (CVaR)
Середні втрати в найгірших 5% випадків:
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
Стратегія-специфічна симуляція
Симулюйте ваші фактичні торгові правила, а не лише шляхи цін:
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
results[sim] = equity
return results
Стрес-тестування з сигналами Smart Money
Моделюйте найгірші сценарії, коли довіра Smart Money падає:
def stress_test_scenarios(base_win_rate):
scenario_normal = simulate_strategy(10000, win_rate=base_win_rate)
scenario_medium = simulate_strategy(10000, win_rate=base_win_rate * 0.95)
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 тис. симуляцій ви дізнаєтеся:
- Медіанний результат (50-й процентиль)
- Найкращий випадок (95-й процентиль)
- Найгірший випадок (5-й процентиль)
- Ймовірність банкрутства (капітал < 0)
- Очікувана тривалість просадки
Стрес-тестуйте стратегії з сигналами Smart Money
Розумійте ризики портфеля в умовах нормальної, погіршеної та VETO довіри Smart Money. Наш API надає вам сигнали; Монте-Карло моделює результати.
Модель ризику сьогодні →