Initial import: grid-bot — grid trading bot for BTC-USDT on Cifra Markets
This commit is contained in:
+254
@@ -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`
|
||||
Reference in New Issue
Block a user