Walkforward Ensemble

Walk-Forward Ensemble: Форвардное скользящее тестирование и ансамбли стратегий

Published: 2026-06-25 · Trading

Введение При оптимизации торговых систем на исторических данных существует высокий риск переподгонки (overfitting), когда параметры идеально работают в прошлом, но теряют деньги в реальном времени.

⚡ Быстрый ответ

  • Walk-forward optimization and strategy ensemble engine from bot v32.
  • Evaluates lookback and holding candidates using a penalty-weighted objective function (drawdown, timeout, and slippage penalties).
MemIR AI Agent Summary
Walk-forward optimization and strategy ensemble engine from bot v32. Evaluates lookback and holding candidates using a penalty-weighted objective function (drawdown, timeout, and slippage penalties).

Executable Parameters

Contracts

RPC Endpoints

Constants

max_drawdown_penalty: 0.5
entry_timeout_rate_penalty: 25
exit_depth_sweep_bps_penalty: 2
min_trade_count: 1

Safety Guards

Rule Max Limit Action On Breach
min_trade_density 1 skip_fold_candidate

Руководство по интеграции

### Введение
При оптимизации торговых систем на исторических данных существует высокий риск **переподгонки** (overfitting), когда параметры идеально работают в прошлом, но теряют деньги в реальном времени. В версии бота `v32` эта проблема решается с помощью фреймворка **Walk-Forward Optimization** (форвардного скользящего тестирования), который непрерывно перекалибрует ансамбль стратегий (Breakout + Reversion) на скользящих временных отрезках.

### Скользящие окна (Walk-Forward Folds)
Период тестирования делится на скользящие складки (folds), состоящие из двух частей:
1. **In-Sample (Обучение)**: Окно оптимизации параметров на исторических данных (например, последние 14 дней).
2. **Out-of-Sample (Форвардный тест)**: Тестирование выбранного лучшего набора параметров на свежих, неизвестных системе данных (например, следующие 3 дня).

### Многокритериальная функция оценки (Score Config)
Для выбора лучшего набора параметров (`BreakoutParameterCandidate`) используется не просто показатель чистой прибыли, а сложная штрафная функция оценки (Score Function):

\[ Score = NetPnL - (Drawdown_{max} \cdot W_{dd}) - (Rate_{timeout} \cdot W_{timeout}) - (Sweep_{depth} \cdot W_{sweep}) \]

Где:
- \(Drawdown_{max}\) — максимальная просадка за период обучения,
- \(Rate_{timeout}\) — доля отмененных по тайм-ауту ордеров (показатель неэффективного котирования),
- \(Sweep_{depth}\) — проскальзывание при исполнении лимитных ордеров,
- \(W_{dd}, W_{timeout}, W_{sweep}\) — весовые штрафные коэффициенты (`max_drawdown_penalty` = 0.50, `entry_timeout_rate_penalty` = 25.0, `exit_depth_sweep_bps_penalty` = 2.0).

### Ансамбль стратегий (Ensemble Strategy)
Бот собирает комбинацию из пробойных сигналов (`breakout.py`) и контр-трендовых реверсий (`reversion.py`). Стратегия перераспределяет веса между ними динамически на основе скоров, рассчитанных в текущей форвардной складке. Если спред стакана расширяется или падает наполняемость ордеров, штрафы за проскальзывание автоматически деактивируют агрессивные пробойные параметры в пользу контр-тренда.