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

Метод Монте-Карло позволяет смоделировать 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 предоставляет сигналы; метод Монте-Карло моделирует результаты.

Модель риска сегодня →