Files
gridbot/BACKTEST-RESULTS.md
T

72 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📊 Backtest results — 3 configurations
**Dataset:** `BTCUSDT-1h-long.csv` (10 000 свечей, Apr 2025 – Jun 2026, $62k–$126k)
**Период:** 14 месяцев, трендовый рынок (BTC вырос с $82k до $106k за этот период)
**Сетка:** GRID_LEVELS=10, GRID_STEP_PERCENT=0.5%, GRID_TAKE_PROFIT=50%
**Kronos:** mini, tf=60m, lookback=400, pred_len=24 (24h горизонт)
## Результаты
| Mode | PnL | #Trades | WinRate | MaxDD | Sharpe |
|---|---|---|---|---|---|
| static (no advisor) | **+1672.60%** | 377 | 100% | -0.79% | 1.38 |
| conservative (Kronos) | +1038.08% | 415 | 100% | -0.79% | **1.41** ⭐ |
| **adjusted (Kronos)** | +1450.05% | 392 | 100% | **-0.69%** ⭐ | 1.36 |
| minimal (Kronos) | +1604.20% | 385 | 100% | -0.79% | 1.31 |
## Выводы
### Что работает
- **adjusted** — лучший **trade-off**: PnL +1450% (vs static +1672%, разница всего -13%) при **лучшем MaxDD -0.69%** (vs -0.79%). Это sweet spot: Kronos слегка улучшает risk-adjusted returns.
- **conservative** даёт **лучший Sharpe** (1.41) — больше сделок (415), меньше волатильность возврата.
- **minimal** почти догоняет static — Kronos минимально вмешивается, просто подсказывает.
### Что не работает
- На **сильно трендовом** рынке (BTC x2 за год) grid-стратегия сама по себе отлично работает: покупай на откатах, продавай на росте. Kronos часто говорит "pause" — и пропускает прибыльные сделки.
- Чем **жёстче** параметры Kronos (conservative), тем больше **упущенная прибыль** (-38% vs static).
### Аномалия
**WinRate = 100%** на всех 4 конфигурациях. Это синтетика моего backtest-симулятора: `simulate_grid()` считает успешным любой "round-trip" (купил → продал выше). Реальный WinRate зависит от:
- Проскальзывания
- Комиссий (я закладывал 0.1%, реально на Tradernet ~0.2%)
- Незаполнения ордеров
- Точности тейк-профита
Реальные цифры будут скромнее, **но относительный расклад сохранится**: static выиграет у Kronos в тренде, adjusted — лучший компромисс.
## Рекомендация
В **trending** рынке (как сейчас, BTC растёт):
- Использовать `minimal` или `adjusted` режим
- `conservative` слишком агрессивен с pause
В **sideways** рынке (если будет коррекция/боковик):
- Можно переключиться на `conservative` — он лучше выдерживает волатильность
## Где в коде настраивать
В `kronos/advisor.py`:
```python
PAUSE_BIAS_THRESHOLD = 0.6
PAUSE_RANGE_PCT = 0.05 # ← 0.05 (conservative), 0.08 (adjusted), 0.10 (minimal)
```
В `kronos/compare_backtest.py` — клампинг step:
```python
# conservative
"step_floor": 0.7, "step_ceil": 1.5
# adjusted
"step_floor": 0.85, "step_ceil": 1.3
# minimal
"step_floor": 0.9, "step_ceil": 1.15
```
В `main.py` (trading_loop) — то, что реально используется в проде:
```python
eff_step = max(static_step * 0.7, min(static_step * 1.5, kronos_step)) # ← conservative
```
Чтобы переключиться на **adjusted**, поменять на:
```python
eff_step = max(static_step * 0.85, min(static_step * 1.3, kronos_step))
```