Разработка системы Walk-Forward оптимизации торговой стратегии

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка системы Walk-Forward оптимизации торговой стратегии
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Разработка системы Walk-Forward оптимизации торговой стратегии

Walk-Forward Optimization (WFO) — методология оценки робастности торговой стратегии. В отличие от традиционного backtesting, WFO имитирует реальное применение: параметры оптимизируются на одном периоде, тестируются на следующем, затем всё сдвигается вперёд. Это минимизирует overfit к историческим данным.

Почему обычный backtest недостаточен

Проблема curve fitting: Оптимизируя параметры стратегии (скользящие средние, RSI период, стоп-лосс) на всей истории, мы получаем параметры, идеально подходящие для прошлого. Но рынки меняются: оптимальные параметры 2015-2018 не обязательно хороши в 2021-2024.

Walk-Forward решает это:

| In-Sample (IS) | Out-of-Sample (OOS) |
|                |--IS--|   OOS   |
|                       |--IS--|   OOS  |
                                 |--IS--|  OOS  |

Каждый OOS-период — независимая оценка на данных, которых модель "не видела" при оптимизации.

Параметры Walk-Forward схемы

Anchored vs. Rolling:

  • Anchored (expanding window): IS всегда начинается с одной даты, расширяется
  • Rolling (sliding window): IS окно фиксированного размера сдвигается

Rolling предпочтителен: стратегия адаптируется к изменению рынка, старые данные не мешают.

Efficiency Ratio:

WFE (Walk-Forward Efficiency) = OOS_Return / IS_Return

Идеально: WFE > 0.7. WFE < 0.3 → сильный overfit, стратегия не работает.

Anchor periods:

  • IS: 2-4 года данных
  • OOS: 3-6 месяцев
  • Количество итераций: 8-20 (зависит от длины истории)

Процесс оптимизации

Пространство параметров:

param_space = {
    'fast_ma': range(5, 50, 5),
    'slow_ma': range(20, 200, 10),
    'rsi_period': range(7, 28, 1),
    'stop_loss_atr': [1.0, 1.5, 2.0, 2.5, 3.0],
    'position_size': [0.01, 0.02, 0.03]
}
# Общее число комбинаций: ~50,000+

Методы поиска:

  • Grid Search: полный перебор, вычислительно дорогой
  • Random Search: случайная выборка, эффективнее grid при большом пространстве
  • Bayesian Optimization (Optuna): учитывает историю оценок, в 10-50× эффективнее grid

Целевая функция: Не только Return. Предпочтительные метрики для оптимизации:

  • Sharpe Ratio: return / volatility
  • Calmar Ratio: annual return / max drawdown
  • Sortino Ratio: return / downside deviation
  • Profit Factor: gross profit / gross loss

Робастность и статистическая значимость

Monte Carlo Permutation Test:

def permutation_test(returns, n_permutations=1000):
    """Проверяем: результат лучше, чем случайный трейдинг?"""
    original_sharpe = compute_sharpe(returns)
    random_sharpes = []

    for _ in range(n_permutations):
        shuffled = np.random.permutation(returns)
        random_sharpes.append(compute_sharpe(shuffled))

    p_value = np.mean(np.array(random_sharpes) >= original_sharpe)
    return p_value  # p < 0.05 → статистически значимо

Combinatorial Purged Cross-Validation (CPCV): Из книги Marcos Lopez de Prado. Генерирует 2^(k-1) различных backtest путей — даёт distribution результатов, а не один backtesting path.

Distribution of OOS Results: Строим распределение Sharp ratio по всем WFO-итерациям. Если медиана > 0.5 и < 10% итераций убыточны — стратегия робастна.

Параметрическая стабильность

Устойчивая стратегия должна работать при небольшом изменении параметров:

def parameter_sensitivity(strategy, optimal_params, perturbation=0.1):
    """3D-тепловая карта результата при ±10% от оптимальных параметров"""
    results = {}
    for p_a in np.linspace(0.9, 1.1, 5):
        for p_b in np.linspace(0.9, 1.1, 5):
            perturbed_params = {
                'fast_ma': int(optimal_params['fast_ma'] * p_a),
                'slow_ma': int(optimal_params['slow_ma'] * p_b)
            }
            results[(p_a, p_b)] = backtest_sharpe(strategy, perturbed_params)
    return results

"Плоское плато" вокруг оптимума → стратегия устойчива. Острый пик → overfit.

Production Pipeline

Automated Re-optimization: Каждые 3 месяца:

  1. Получить новые данные
  2. Запустить WFO на расширенном IS окне
  3. Если OOS метрики в пределах нормы → использовать новые параметры
  4. Если деградация > 20% → сигнал на ручной review

Версионирование стратегий: MLflow или Git для хранения каждой версии: параметры, IS/OOS метрики, дата применения.

Сроки: реализация WFO framework для одной стратегии с Optuna — 3-4 недели. Полноценная система с CPCV, Monte Carlo тестами и auto re-optimization — 8-10 недель.