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
+254
View File
@@ -0,0 +1,254 @@
# 🚀 Локальный стенд — 3 варианта от простого к полному
Все команды выполняются из `/tmp/stand/grid-bot/` (или твоей копии пакета).
---
## A) Только дашборд (30 сек)
**Что увидишь:** UI с графиками и блоком 🧠 Kronos. Совет подгрузится из `kronos_advice.json` (статичный). Торговый цикл и Kronos-advisor **не запущены**.
```bash
cd /tmp/stand/grid-bot
# Минимальный .env для UI (без реальных ключей)
cat > .env <<'EOF'
# === Web auth ===
WEB_USERNAME=admin
WEB_PASSWORD=admin
# === Kronos — выключен, совет подгрузится из файла ===
KRONOS_ENABLED=false
KRONOS_LIVE_ENABLED=false
KRONOS_MIN_CONFIDENCE=0.4
# === Grid — DEMO режим ===
DEMO_MODE=true
GRID_LEVELS=10
GRID_STEP_PERCENT=0.005
# === API ключи пустые (DEMO) ===
TRADERNET_PUBLIC_KEY=
TRADERNET_SECRET_KEY=
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=
EOF
# Используем существующий venv
export PYTHONPATH=/tmp/stand/Kronos-src:$PYTHONPATH
# Запуск
python3 main.py
```
Открой: **http://127.0.0.1:5555/**
Логин: `admin` / `admin`
**Что работает:**
- ✅ Дашборд с графиками (статичные)
- ✅ Блок 🧠 Kronos показывает последний совет из `kronos_advice.json`
- ✅ Trade log (пустой)
- ✅ Настройки
- ❌ Торговый цикл **НЕ запущен** (Kronos отключён)
- ❌ Нет автообновления советов
---
## B) Дашборд + живой Kronos advisor (5 мин)
**Что увидишь:** то же + Kronos генерирует советы в фоне, можно жать «⟳ Обновить совет» в дашборде.
```bash
cd /tmp/stand/grid-bot
# В .env (см. выше) поменяй:
# KRONOS_ENABLED=true
# KRONOS_LIVE_ENABLED=false # ← бот НЕ применяет советы, только показывает
# Запусти advisor в отдельном терминале:
export PYTHONPATH=/tmp/stand/Kronos-src:$PYTHONPATH
kronos-venv/bin/python kronos_advisor_main.py --source binance --symbol BTC-USDT.IMEX --tf 60 --lookback 400 --pred-len 24 --model kronos-mini
# В другом терминале — дашборд:
export PYTHONPATH=/tmp/stand/Kronos-src:$PYTHONPATH
python3 main.py
```
Или жми кнопку **⟳ Обновить совет** в дашборде — она сама запустит advisor.
**Что работает:**
- ✅ Всё из (A)
- ✅ Совет обновляется по кнопке или вручную
- ✅ Можно видеть, как Kronos реагирует на текущий рынок
- ❌ Торговый цикл **НЕ запущен**
---
## C) Полный стенд — grid-bot в DEMO + Kronos (10 мин)
**Что увидишь:** grid-bot в DEMO-режиме (виртуальные ордера) + Kronos-советник + всё обновляется автоматически каждые 15 мин (через timer) или по кнопке.
```bash
cd /tmp/stand/grid-bot
# В .env:
cat > .env <<'EOF'
# === Web auth ===
WEB_USERNAME=admin
WEB_PASSWORD=admin
# === Kronos — включён, но НЕ применяет в LIVE ===
KRONOS_ENABLED=true
KRONOS_LIVE_ENABLED=true
KRONOS_MODEL=kronos-mini
KRONOS_TF_MIN=60
KRONOS_LOOKBACK=400
KRONOS_PRED_LEN=24
KRONOS_MIN_CONFIDENCE=0.4
KRONOS_ADVICE_FILE=/tmp/stand/grid-bot/kronos_advice.json
# === Grid — DEMO ===
DEMO_MODE=true
GRID_LEVELS=10
GRID_STEP_PERCENT=0.005
GRID_TAKE_PROFIT_PERCENT=0.5
# === API ключи пустые (DEMO) ===
TRADERNET_PUBLIC_KEY=
TRADERNET_SECRET_KEY=
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=
EOF
# Запустить grid-bot (он сам поднимет Flask + trading loop + cron advisor)
export PYTHONPATH=/tmp/stand/Kronos-src:$PYTHONPATH
python3 main.py
```
**Что работает:**
- ✅ Всё из (B)
- ✅ Торговый цикл крутится в DEMO (виртуальные ордера, BTC-USDT.IMEX по симулированной цене)
- ✅ Kronos реально влияет на шаг/центр/паузу grid-а
- ✅ Telegram-уведомления о смене совета (если `TELEGRAM_BOT_TOKEN` задан)
- ✅ Автообновление совета каждые ~10 мин (через Flask-внутренний cron в `trading_loop`)
---
## D) С systemd timer (15 мин, «как в проде»)
**Что увидишь:** полный прод-сценарий. Timer запускает `kronos_advisor_main.py` каждые 15 мин, бот сам читает свежий совет.
```bash
cd /tmp/stand/grid-bot
# 1) Подправить пути в unit (по умолчанию они /root/grid-bot)
sed -i 's|/root/grid-bot|/tmp/stand/grid-bot|g; s|User=root|User=andr|g; s|/root/.openclaw/kronos_advice.json|/tmp/stand/grid-bot/kronos_advice.json|g' kronos-advisor.service
# 2) Установить (без sudo — пользовательский systemd)
mkdir -p ~/.config/systemd/user
cp kronos-advisor.{service,timer} ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now kronos-advisor.timer
systemctl --user list-timers kronos-advisor.timer
# 3) Запустить grid-bot
export PYTHONPATH=/tmp/stand/Kronos-src:$PYTHONPATH
python3 main.py
```
**Что работает:**
- ✅ Полный прод-сценарий локально
- ✅ Timer запускает advisor как отдельный процесс
- ✅ Можно смотреть `journalctl --user -u kronos-advisor`
---
## 🔍 Что смотреть в браузере
Открой **http://127.0.0.1:5555/**, логин `admin`/`admin`.
| Раздел | Что там |
|---|---|
| Графики | Цена + Grid (buy/sell уровни) |
| Настройки | GRID_LEVELS, GRID_STEP_PERCENT, GRID_TAKE_PROFIT_PERCENT |
| **🧠 Kronos Advisor** | **Совет от Kronos: step/center/range/pause, источник, время генерации, кнопка ⟳ Обновить совет** |
| Trade log | Последние сделки (виртуальные в DEMO) |
| Status bar | Текущая цена, время, режим |
---
## 🛑 Остановка
```bash
# В терминале, где крутится бот: Ctrl+C
# Если запускал timer:
systemctl --user disable --now kronos-advisor.timer
# Если остались процессы:
pkill -f "python3 main.py"
pkill -f "kronos_advisor_main"
```
---
## 🐛 Если что-то не работает
### "Address already in use" (порт 5555 занят)
```bash
lsof -i:5555
# Убей старый процесс или поменяй порт в main.py
```
### "ModuleNotFoundError: No module named 'kronos'"
```bash
# Запусти из корня проекта, не из подпапки:
cd /tmp/stand/grid-bot
python3 main.py
```
### "No module named 'model'" (Kronos не найден)
```bash
export PYTHONPATH=/tmp/stand/Kronos-src:$PYTHONPATH
```
### Kronos падает с OOM
```bash
# Модель не влезла в RAM. Закрой Chrome, IDE и попробуй снова.
free -h # должно быть >2GB free
```
### Бот не видит Kronos
```bash
# Проверь .env:
grep -E "KRONOS_(ENABLED|LIVE_ENABLED|MIN_CONFIDENCE)" .env
# И лог:
python3 main.py 2>&1 | grep -i kronos
```
---
## 📊 Какие API можно дёргать руками
```bash
# Текущий совет
curl -u admin:admin http://127.0.0.1:5555/api/kronos
# Запустить advisor
curl -u admin:admin -X POST http://127.0.0.1:5555/api/kronos/refresh
# Статус advisor
curl -u admin:admin http://127.0.0.1:5555/api/kronos/refresh/status
# Состояние grid
curl -u admin:admin http://127.0.0.1:5555/api/state
```
---
## 🎯 Что я рекомендую для первого раза
1. Начни с **(A)** — посмотри UI, заглушку Kronos
2. Потом **(B)** — нажми «⟳ Обновить совет» несколько раз, посмотри как меняется
3. Потом **(C)** — увидь, как Kronos влияет на grid в DEMO
4. Если всё ОК → деплой на сервер по `DEPLOY.md`