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

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка системи Walk-Forward оптимізації торгової стратегії
Середній
~2-3 дні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Розробка системи Walk-Forward оптимізації торговельної стратегії

Walk-Forward Optimization (WFO) — методологія оцінки робастності торговельної стратегії. На відміну від традиційного backtesting, WFO імітує реальне застосування: параметри оптимізуються на одному періоді, тестуються на наступному, потім все зміщується вперед. Це мінімізує переобладання до історичних даних.

Чому звичайний backtest недостатньо

Проблема curve fitting: Оптимізуючи параметри стратегії (ковзаючі середні, період RSI, stop-loss) на всій історії, ми отримуємо параметри, ідеально підходящі для минулого. Але ринки змінюються: оптимальні параметри 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 кращий: стратегія адаптується до зміни ринку, старі дані не перешкоджають.

Ефективність Ratio:

WFE (Walk-Forward Efficiency) = OOS_Return / IS_Return

Ідеально: WFE > 0.7. WFE < 0.3 → сильне переобладання, стратегія не працює.

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: випадкова вибірка, більш ефективна з великим простором
  • 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 шляхів — дає розподіл результатів, а не один backtesting шлях.

Distribution of OOS Results: Будуємо розподіл Sharpe 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

"Плоский плато" навколо оптимуму → стратегія робастна. Гострий пік → переобладання.

Production Pipeline

Автоматична переоптимізація: Кожні 3 місяці:

  1. Отримуємо нові дані
  2. Запускаємо WFO на розширеному IS вікні
  3. Якщо OOS метрики в межах норми → використовуємо нові параметри
  4. Якщо деградація > 20% → сигнал на ручний огляд

Версіонування стратегій: MLflow або Git для збереження кожної версії: параметри, IS/OOS метрики, дата застосування.

Часовая шкала: реалізація WFO framework для однієї стратегії з Optuna — 3-4 тижні. Повна система з CPCV, Monte Carlo тестами та auto re-optimization — 8-10 тижнів.