3.8 KiB
📊 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:
PAUSE_BIAS_THRESHOLD = 0.6
PAUSE_RANGE_PCT = 0.05 # ← 0.05 (conservative), 0.08 (adjusted), 0.10 (minimal)
В kronos/compare_backtest.py — клампинг step:
# 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) — то, что реально используется в проде:
eff_step = max(static_step * 0.7, min(static_step * 1.5, kronos_step)) # ← conservative
Чтобы переключиться на adjusted, поменять на:
eff_step = max(static_step * 0.85, min(static_step * 1.3, kronos_step))