Руководство по интеграции
### Введение
При оптимизации торговых систем на исторических данных существует высокий риск **переподгонки** (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`). Стратегия перераспределяет веса между ними динамически на основе скоров, рассчитанных в текущей форвардной складке. Если спред стакана расширяется или падает наполняемость ордеров, штрафы за проскальзывание автоматически деактивируют агрессивные пробойные параметры в пользу контр-тренда.
При оптимизации торговых систем на исторических данных существует высокий риск **переподгонки** (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`). Стратегия перераспределяет веса между ними динамически на основе скоров, рассчитанных в текущей форвардной складке. Если спред стакана расширяется или падает наполняемость ордеров, штрафы за проскальзывание автоматически деактивируют агрессивные пробойные параметры в пользу контр-тренда.