Руководство по интеграции
Для устранения просадок и дрейфа торговой логики необходимо строго разграничить понятия формирующегося бара и подтвержденного закрытого бара.
### Решение 1: Фильтрация незакрытого бара (Bar Confirmation)
При анализе данных через библиотеки `pandas` сигналы должны рассчитываться исключительно на основе закрытых баров.
- **Неправильно**: `last_bar = df.iloc[-1]` (берет текущий формирующийся бар, данные которого изменчивы).
- **Правильно**: `last_bar = df.iloc[-2]` (берет последний завершенный и зафиксированный бар).
### Решение 2: Устранение пропусков данных (Historical Window Scan)
Если бот работает по тайм-интервалу (например, каждые 5 минут), он должен проверять историю свечей за весь период, прошедший с последнего успешного сканирования, а не только последнюю строчку.
- При сканировании вычисляется разница во времени: `missed_bars = (current_time - last_scan_time) / timeframe_duration`.
- Бот итерируется по всем `missed_bars` барам и проверяет наличие подтвержденных сигналов на закрытии каждого из них.
### Решение 3: Динамический волатильный трейлинг-стоп (ATR-based Stop)
Жестко фиксированный трейлинг-стоп (например, 0.3%) не учитывает текущее состояние рынка. В периоды высокой волатильности его выбивает шумом. Трейлинг-стоп должен привязываться к индикатору ATR (Average True Range):
- Дистанция трейлинга: `trail_distance = ATR(14) * 1.5`.
- Это позволяет стопу расширяться при росте волатильности и сужаться при затишье, защищая прибыль от случайных колебаний.
### Решение 1: Фильтрация незакрытого бара (Bar Confirmation)
При анализе данных через библиотеки `pandas` сигналы должны рассчитываться исключительно на основе закрытых баров.
- **Неправильно**: `last_bar = df.iloc[-1]` (берет текущий формирующийся бар, данные которого изменчивы).
- **Правильно**: `last_bar = df.iloc[-2]` (берет последний завершенный и зафиксированный бар).
### Решение 2: Устранение пропусков данных (Historical Window Scan)
Если бот работает по тайм-интервалу (например, каждые 5 минут), он должен проверять историю свечей за весь период, прошедший с последнего успешного сканирования, а не только последнюю строчку.
- При сканировании вычисляется разница во времени: `missed_bars = (current_time - last_scan_time) / timeframe_duration`.
- Бот итерируется по всем `missed_bars` барам и проверяет наличие подтвержденных сигналов на закрытии каждого из них.
### Решение 3: Динамический волатильный трейлинг-стоп (ATR-based Stop)
Жестко фиксированный трейлинг-стоп (например, 0.3%) не учитывает текущее состояние рынка. В периоды высокой волатильности его выбивает шумом. Трейлинг-стоп должен привязываться к индикатору ATR (Average True Range):
- Дистанция трейлинга: `trail_distance = ATR(14) * 1.5`.
- Это позволяет стопу расширяться при росте волатильности и сужаться при затишье, защищая прибыль от случайных колебаний.