Initial import: grid-bot — grid trading bot for BTC-USDT on Cifra Markets

This commit is contained in:
Kolp
2026-09-24 13:22:23 +07:00
commit 642cc11a9f
18968 changed files with 5683248 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
# 📊 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))
```