Files
gridbot/BACKTEST-RESULTS.md
T

3.8 KiB
Raw Blame History

📊 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))