Монте-Карло симуляція ризику — Моделювання результатів портфеля

Монте-Карло симуляції дозволяють моделювати понад 100 000 потенційних майбутніх шляхів вашого портфеля, кількісно оцінюючи метрики ризику, такі як Value at Risk (VaR) та очікуваний дефіцит. Замість припущення одного результату ви бачите розподіл можливостей.

Приклад: Проведіть 100 тис. симуляцій вашої торгової стратегії. Ви побачите: 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

Метрики ризику портфеля

Value at Risk (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

Expected Shortfall (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 # Зупинка при втраті 50%
results[sim] = equity
return results

Стрес-тестування з сигналами Smart Money

Моделюйте найгірші сценарії, коли довіра Smart Money падає:

Python — Сценарії стрес-тесту
def stress_test_scenarios(base_win_rate):
# Сценарій 1: Нормальні умови (ВИСОКА довіра)
scenario_normal = simulate_strategy(10000, win_rate=base_win_rate)
# Сценарій 2: Погіршення сигналів (СЕРЕДНЯ довіра)
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 тис. симуляцій ви дізнаєтеся:

Стрес-тестуйте стратегії з сигналами Smart Money

Розумійте ризики портфеля в умовах нормальної, погіршеної та VETO довіри Smart Money. Наш API надає вам сигнали; Монте-Карло моделює результати.

Модель ризику сьогодні →