Вы провели backtest стратегии — 40% годовых при просадке 15%. Через месяц реального счёта — минус 30% капитала. Знакомо? Исторический backtest показывает только одну реализацию. Чтобы увидеть полный спектр возможных исходов, нужна Monte Carlo симуляция. Мы разрабатываем систему, которая отвечает на вопросы, недоступные обычному backtest: какова вероятность потерять 20% капитала за полгода, выдержит ли стратегия затяжной drawdown.
В отличие от одиночного исторического пути, Monte Carlo генерирует тысячи альтернативных сценариев из тех же трейдов, давая вероятностную оценку доходности и риска. Например, при 10 000 симуляций вы получаете распределение доходности: медианное значение 40%, но 5-й процентиль — минус 20%. Это меняет подход к управлению капиталом. Такой анализ незаменим для хедж-фондов, проп-трейдеров и частных инвесторов, желающих понять реальные риски.
Зачем Monte Carlo для торговли
Единственная backtest-кривая — случайность. Исторический backtest — один реализованный путь из бесконечного числа возможных. Трейды случались в конкретном порядке, при конкретной рыночной волатильности. Monte Carlo симуляция многократно перемешивает трейды или генерирует новые из статистической модели, создавая распределение возможных исходов.
Ключевые результаты, которые вы получаете:
- Доверительный интервал для ожидаемой доходности (5-й, 50-й, 95-й процентили)
- Вероятность конкретного уровня drawdown (например, 20%)
- Требуемый начальный капитал для выживания с вероятностью 95%
- Ожидаемое время до восстановления после просадки
Какие методы Monte Carlo мы используем?
Мы применяем два основных подхода: рандомизацию трейдов и параметрическое моделирование. Рандомизация проста и не требует предположений о распределении, но не учитывает временные зависимости. Параметрические модели, такие как GBM или Student-t, лучше экстраполируют, но требуют подбора распределения. Выбор метода зависит от ваших данных и целей. Иногда мы используем машинное обучение для оценки параметров распределения.
| Метод | Преимущества | Недостатки |
|---|---|---|
| Рандомизация трейдов | Не требует предп. о распределении | Не учитывает временные зависимости |
| Параметрическое моделирование | Учитывает fat tails, экстраполяция | Требует подбора распределения |
Randomization по трейдам — самый простой подход: перемешивание исторических трейдов с возвращением.
import numpy as np
import pandas as pd
def monte_carlo_randomize_trades(trade_returns, n_simulations=10000, n_periods=252):
"""
trade_returns: массив доходностей каждой сделки
Каждая симуляция — случайная выборка с возвращением
"""
results = np.zeros((n_simulations, n_periods))
for i in range(n_simulations):
sampled_trades = np.random.choice(trade_returns, size=n_periods, replace=True)
results[i] = np.cumprod(1 + sampled_trades) - 1
return results
equity_curves = monte_carlo_randomize_trades(historical_trades)
# Статистики
p5, p50, p95 = np.percentile(equity_curves[:, -1], [5, 50, 95])
print(f"5th percentile final equity: {p5:.1%}")
print(f"Median final equity: {p50:.1%}")
print(f"95th percentile final equity: {p95:.1%}")Maximum Adverse Excursion (MAE) симуляция оценивает распределение максимальной просадки.
def max_drawdown_distribution(equity_curves):
max_dd = np.zeros(len(equity_curves))
for i, curve in enumerate(equity_curves):
running_max = np.maximum.accumulate(1 + curve)
drawdown = (1 + curve) / running_max - 1
max_dd[i] = drawdown.min()
return max_dd
dd_dist = max_drawdown_distribution(equity_curves)
prob_20pct_drawdown = np.mean(dd_dist < -0.20)
print(f"Probability of 20%+ drawdown: {prob_20pct_drawdown:.1%}") Почему параметрическая симуляция точнее?
Параметрические модели генерируют новые доходности из статистического распределения, что позволяет моделировать сценарии, отсутствующие в истории. Мы используем:
Geometric Brownian Motion (GBM):
def gbm_simulation(mu, sigma, S0, T, n_steps, n_sims):
dt = T / n_steps
returns = np.random.normal((mu - 0.5*sigma**2)*dt, sigma*np.sqrt(dt), (n_sims, n_steps))
price_paths = S0 * np.exp(np.cumsum(returns, axis=1))
return price_pathsStudent-t distribution (лучше для финансов): Нормальное распределение underestimates fat tails. Student-t с 3-7 степенями свободы лучше описывает реальные return distributions.
from scipy import stats
def student_t_simulation(mu, sigma, df, n_steps, n_sims):
returns = stats.t.rvs(df=df, loc=mu, scale=sigma, size=(n_sims, n_steps))
return np.cumprod(1 + returns, axis=1)Bootstrap методы: Stationary Bootstrap (случайные блоки переменной длины) и Block Bootstrap (фиксированные блоки) сохраняют временные зависимости.
Оценка Risk of Ruin
def probability_of_ruin(equity_curves, ruin_threshold=0.5):
""" Вероятность потерять >50% капитала хотя бы один раз """
min_equity = equity_curves.min(axis=1)
return np.mean(min_equity < (1 - ruin_threshold))
prob_ruin = probability_of_ruin(equity_curves, ruin_threshold=0.5)
print(f"Probability of 50% drawdown (ruin): {prob_ruin:.1%}") Что входит в разработку системы Monte Carlo?
Мы предлагаем услугу под ключ: от анализа вашей стратегии до внедрения автоматического отчёта. Стоимость разработки рассчитывается индивидуально и зависит от объёма данных, требуемой точности и сложности моделей. Экономия за счёт предотвращения крупных просадок может быть значительной. В среднем проект занимает от 2 до 4 недель.
| Этап | Длительность | Результат |
|---|---|---|
| Анализ данных и стратегии | 1-2 дня | Отчёт о качестве данных, первичные распределения |
| Разработка базовой MC рандомизации | 3-5 дней | Прототип с визуализацией конуса вероятности |
| Параметрические модели и stress testing | 5-10 дней | Расширенная симуляция с GBM, Student-t, сценариями |
| Автоматизация и дашборд | 3-5 дней | Регулярный пересчёт MC, алерты при росте риска |
| Документация и обучение | 2-3 дня | Описание методологии, инструкция по обновлению данных |
Мы также включаем stress testing по сценариям: кризис (увеличение negative skew и fat tails на 2σ), серия из 10 убыточных трейдов подряд, высокая корреляция убытков. Это позволяет тестировать стратегию в экстремальных условиях.
Monte Carlo также позволяет подобрать размер позиции (например, по критерию Келли) для максимизации роста при заданном уровне риска. Мы реализуем симуляцию с различными долями капитала на сделку и оцениваем вероятность разорения для каждой.
Как интерпретировать результаты Monte Carlo?
Стандартные выводы для trader/investor:
- Конус вероятности (fan chart): p5/p25/p50/p75/p95 пути капитала
- Распределение итоговой доходности
- Распределение максимальной просадки
- Вероятность различных уровней drawdown
- Expected time to new equity high
Automated reporting: каждый раз при добавлении новых трейдов — автоматический перерасчёт MC и обновление отчёта. Если вероятность ruin выросла с 3% до 8% — алерт для управляющего.
Наш опыт — более 10 лет в разработке торговых систем и риск-моделей. Мы гарантируем прозрачную методологию и чёткую документацию. Свяжитесь с нами, чтобы оценить ваш проект — получите консультацию за 2-3 дня. Экономия от внедрения Monte Carlo может существенно снизить риски крупных потерь.
Согласно Monte Carlo method, данный подход широко применяется в финансах для оценки риска.







