Initial import: grid-bot — grid trading bot for BTC-USDT on Cifra Markets
This commit is contained in:
@@ -0,0 +1,262 @@
|
||||
# Деплой Kronos advisor на боевой сервер
|
||||
|
||||
**Файл пакета:** `kolp-deploy-2026-06-05.tar.gz` (130 КБ, 18 файлов, без `__pycache__`)
|
||||
**SHA256:** см. `kolp-deploy-2026-06-05.tar.gz.sha256`
|
||||
**Сервер:** `46.29.164.31`, корень проекта `/root/grid-bot`
|
||||
|
||||
---
|
||||
|
||||
## ⏱ 5-минутный план (на сервере)
|
||||
|
||||
### 0. Бэкап (30 сек)
|
||||
```bash
|
||||
cd /root/grid-bot
|
||||
sudo systemctl stop grid-bot
|
||||
tar -czf ~/grid-bot-backup-$(date +%F).tar.gz \
|
||||
--exclude='kronos-venv' --exclude='__pycache__' \
|
||||
--exclude='.env' --exclude='.env.bak' \
|
||||
--exclude='*.log' --exclude='data' --exclude='models' .
|
||||
ls -la ~/grid-bot-backup-*.tar.gz
|
||||
```
|
||||
|
||||
### 1. Скопировать пакет (1 мин)
|
||||
```bash
|
||||
# На своём ноуте:
|
||||
scp kolp-deploy-2026-06-05.tar.gz root@46.29.164.31:/root/grid-bot/
|
||||
```
|
||||
|
||||
### 2. Распаковать поверх (30 сек)
|
||||
```bash
|
||||
cd /root/grid-bot
|
||||
tar -xzf kolp-deploy-2026-06-05.tar.gz
|
||||
# Проверить, что новые файлы на месте:
|
||||
ls -la kronos/ kronos_advisor_main.py kronos-advisor.* kronos_advice.json
|
||||
# Файлы main.py / config.py / .env.example / templates/dashboard.html — перезаписаны
|
||||
```
|
||||
|
||||
### 3. Поднять venv для advisor-а (1 мин)
|
||||
```bash
|
||||
cd /root/grid-bot
|
||||
python3 -m venv --without-pip --system-site-packages kronos-venv
|
||||
curl -sSL https://bootstrap.pypa.io/get-pip.py | kronos-venv/bin/python
|
||||
kronos-venv/bin/pip install --quiet --upgrade pip
|
||||
kronos-venv/bin/pip install --quiet \
|
||||
torch --index-url https://download.pytorch.org/whl/cpu
|
||||
kronos-venv/bin/pip install --quiet \
|
||||
numpy pandas einops==0.8.1 huggingface_hub==0.33.1 \
|
||||
matplotlib==3.9.3 tqdm==4.67.1 safetensors==0.6.2 \
|
||||
requests python-dotenv
|
||||
# Скачать модель (~30 МБ, ~10 сек):
|
||||
kronos-venv/bin/python -c "
|
||||
import os
|
||||
os.environ['HF_HOME'] = os.path.abspath('models/hf-cache')
|
||||
os.makedirs(os.environ['HF_HOME'], exist_ok=True)
|
||||
from huggingface_hub import snapshot_download
|
||||
snapshot_download('NeoQuasar/Kronos-Tokenizer-2k', local_dir='models/Kronos-Tokenizer-2k', allow_patterns=['*.json','*.safetensors','*.txt'])
|
||||
snapshot_download('NeoQuasar/Kronos-mini', local_dir='models/Kronos-mini', allow_patterns=['*.json','*.safetensors','*.txt'])
|
||||
print('OK')
|
||||
"
|
||||
```
|
||||
|
||||
### 4. Обновить .env (1 мин)
|
||||
```bash
|
||||
cd /root/grid-bot
|
||||
|
||||
# Добавить новые переменные, ЕСЛИ их ещё нет
|
||||
grep -q '^WEB_USERNAME=' .env || cat >> .env <<'EOF'
|
||||
|
||||
# === Web auth (ОБЯЗАТЕЛЬНО сменить) ===
|
||||
WEB_USERNAME=kolpakov
|
||||
WEB_PASSWORD=***ВАШ_СЛОЖНЫЙ_ПАРОЛЬ***
|
||||
|
||||
# === Kronos advisor ===
|
||||
KRONOS_ENABLED=true
|
||||
KRONOS_LIVE_ENABLED=false # ← сначала false, проверим в проде
|
||||
KRONOS_MODEL=kronos-mini
|
||||
KRONOS_TF_MIN=60
|
||||
KRONOS_LOOKBACK=400
|
||||
KRONOS_PRED_LEN=24
|
||||
KRONOS_MIN_CONFIDENCE=0.4
|
||||
KRONOS_ADVICE_FILE=/root/.openclaw/kronos_advice.json
|
||||
EOF
|
||||
|
||||
# Сменить права
|
||||
chmod 600 .env
|
||||
```
|
||||
|
||||
### 5. Запустить grid-bot (30 сек)
|
||||
```bash
|
||||
sudo systemctl start grid-bot
|
||||
sudo systemctl status grid-bot --no-pager
|
||||
# В логах должно появиться:
|
||||
# [INFO] Kronos kronos-mini loaded on cpu (max_context=2048)
|
||||
# или просто запуск без Kronos (если KRONOS_ENABLED=false)
|
||||
```
|
||||
|
||||
### 6. Установить systemd-timer для advisor-а (1 мин)
|
||||
```bash
|
||||
sudo cp /root/grid-bot/kronos-advisor.{service,timer} /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now kronos-advisor.timer
|
||||
systemctl list-timers kronos-advisor.timer
|
||||
# Должно показать "next" через <15 мин
|
||||
```
|
||||
|
||||
### 7. Проверить работу (1 мин)
|
||||
```bash
|
||||
# 1) Через 5-10 мин проверить, что kronos_advice.json обновляется
|
||||
ls -la /root/.openclaw/kronos_advice.json
|
||||
cat /root/.openclaw/kronos_advice.json
|
||||
|
||||
# 2) Дашборд
|
||||
curl -u "kolpakov:ВАШ_ПАРОЛЬ" https://gridbot.kolp.pro/api/kronos | python3 -m json.tool
|
||||
|
||||
# 3) Логи advisor-а
|
||||
journalctl -u kronos-advisor.service -n 20 --no-pager
|
||||
tail -50 /root/grid-bot/kronos-advisor.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Безопасность — обязательно
|
||||
|
||||
1. **Сменить оба комплекта ключей Tradernet** (9adf.../97b0... и a8e6.../7313...) — они утекли в архив, который я видел.
|
||||
- `https://tradernet.by` → Настройки → API-ключи → отозвать старые, выпустить новые
|
||||
- Положить новые в `.env` (не в `config.py`!)
|
||||
- В `config.py` старые ключи **уже удалены** (только `os.getenv`)
|
||||
2. **`WEB_PASSWORD`** поставить сложный (16+ символов, не как в `.env.example`)
|
||||
3. **Telegram-токен** — тоже отозвать (`@BotFather` → `/revoke` → новый)
|
||||
|
||||
---
|
||||
|
||||
## 🚦 Стратегия включения в проде
|
||||
|
||||
### Этап 1 — безопасно (текущий шаг)
|
||||
- `KRONOS_ENABLED=true`
|
||||
- `KRONOS_LIVE_ENABLED=false`
|
||||
- Советник пишет `kronos_advice.json`, видим в дашборде
|
||||
- **Бот работает как раньше**, Kronos **не влияет** на ордера
|
||||
|
||||
### Этап 2 — полу-включение (через 1-2 дня, если метрики ОК)
|
||||
- `KRONOS_LIVE_ENABLED=true`
|
||||
- Kronos начинает реально корректировать шаг/центр/паузу
|
||||
- Следить за логом `[KRONOS] applied: ...`
|
||||
- При проблемах → `KRONOS_LIVE_ENABLED=false` в `.env` + `sudo systemctl restart grid-bot`
|
||||
|
||||
### Этап 3 — прод-настройки (когда уверен)
|
||||
- То же, что этап 2
|
||||
- Включить Telegram-уведомления о смене совета (уже в коде — сработает само)
|
||||
- Опционально: сменить `KRONOS_TF_MIN` на 15/30/120
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Откат (если что-то пошло не так)
|
||||
|
||||
```bash
|
||||
cd /root/grid-bot
|
||||
sudo systemctl stop grid-bot
|
||||
# Восстановить из бэкапа
|
||||
tar -xzf ~/grid-bot-backup-2026-06-05.tar.gz
|
||||
# Если нужно полностью выключить Kronos:
|
||||
sed -i 's/^KRONOS_ENABLED=true/KRONOS_ENABLED=false/' .env
|
||||
sed -i 's/^KRONOS_LIVE_ENABLED=true/KRONOS_LIVE_ENABLED=false/' .env
|
||||
sudo systemctl start grid-bot
|
||||
```
|
||||
|
||||
Или ещё проще:
|
||||
```bash
|
||||
# В .env:
|
||||
KRONOS_ENABLED=false
|
||||
KRONOS_LIVE_ENABLED=false
|
||||
sudo systemctl restart grid-bot
|
||||
# Бот работает как ДО интеграции с Kronos
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Что внутри пакета
|
||||
|
||||
```
|
||||
grid-bot/
|
||||
├── main.py ← обновлён (Kronos-интеграция)
|
||||
├── config.py ← секреты → .env, KRONOS_* переменные
|
||||
├── .env.example ← шаблон .env
|
||||
├── .gitignore ← защита .env
|
||||
├── kronos/ ← NEW: пакет советника
|
||||
│ ├── __init__.py
|
||||
│ ├── advisor.py ← KronosAdvisor
|
||||
│ ├── data_source.py ← Tradernet + Binance источники
|
||||
│ ├── backtest.py ← backtest static vs adaptive
|
||||
│ └── compare_backtest.py ← сравнение conservative/adjusted/minimal
|
||||
├── kronos_advisor_main.py ← CLI (запускается из systemd)
|
||||
├── kronos_advice.json ← последний совет (пример)
|
||||
├── kronos-advisor.service ← systemd unit
|
||||
├── kronos-advisor.timer ← каждые 15 мин
|
||||
├── kronos-advisor.README.md ← подробная докуменация по unit
|
||||
├── templates/
|
||||
│ └── dashboard.html ← обновлён (🧠 Kronos-блок)
|
||||
└── static/
|
||||
├── chart.umd.min.js
|
||||
└── chartjs-plugin-annotation.min.js
|
||||
```
|
||||
|
||||
**НЕ включено в пакет (нужно отдельно):**
|
||||
- `kronos-venv/` (создаётся на шаге 3)
|
||||
- `models/Kronos-Tokenizer-2k/` + `models/Kronos-mini/` (скачивается на шаге 3)
|
||||
- `data/` (нет нужды — данные тянутся с биржи)
|
||||
- `.env` и `.env.bak` (ты добавишь сам)
|
||||
- `venv/` (твой существующий)
|
||||
|
||||
---
|
||||
|
||||
## 📊 Что мы знаем о качестве Kronos-прогноза
|
||||
|
||||
Результаты backtest-а на 14 мес BTCUSDT 1h (Apr 2025 → Jun 2026):
|
||||
|
||||
| Mode | PnL | WinRate | MaxDD | Sharpe |
|
||||
|---|---|---|---|---|
|
||||
| static (фикс 0.5%) | +1672% | 100% | -0.79% | 1.38 |
|
||||
| conservative (Kronos) | +515% | 100% | -0.69% | 1.16 |
|
||||
| adjusted (Kronos) | *в процессе* | | | |
|
||||
| minimal (Kronos) | *в процессе* | | | |
|
||||
|
||||
**Вывод честный:**
|
||||
- В **текущей** реализации Kronos для grid на трендовом рынке вредит (статичная сетка BTC-тренда выгоднее)
|
||||
- Однако **Telegram-уведомления** и **adaptive pause** — это ценная страховка от резких обвалов
|
||||
- Backtest на отрезке **с трендом вверх** искажает картину: grid зарабатывает на колебаниях, а Kronos их «фильтрует»
|
||||
- На **боковике** adaptive может выиграть — нужно тестировать в проде в разные фазы рынка
|
||||
|
||||
**Рекомендация:** запускай в режиме «Этап 1» (наблюдение), через 1-2 недели включай «Этап 2», следи за метриками. Не жди чудес — Kronos это **советник**, не замена стратегии.
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Что я НЕ делал
|
||||
|
||||
- Не отзывал ключи Tradernet (ты сам)
|
||||
- Не запускал ничего на твоём сервере
|
||||
- Не менял существующий `grid-bot.service` (только добавил `kronos-advisor.{service,timer}`)
|
||||
- Не трогал твой `.env` и `.env.bak`
|
||||
- Не интегрировал в существующий дашборд `b.html` (если он у тебя живёт — нужно руками перенести Kronos-блок)
|
||||
|
||||
---
|
||||
|
||||
## 📞 Если что-то не работает
|
||||
|
||||
```bash
|
||||
# Смотри логи в таком порядке:
|
||||
journalctl -u grid-bot -n 50 --no-pager
|
||||
journalctl -u kronos-advisor.service -n 50 --no-pager
|
||||
tail -100 /root/grid-bot/kronos-advisor.log
|
||||
tail -100 /root/grid-bot/margin-bot.log
|
||||
|
||||
# Проверь, что модель на месте
|
||||
ls -la /root/grid-bot/models/Kronos-Tokenizer-2k/
|
||||
ls -la /root/grid-bot/models/Kronos-mini/
|
||||
|
||||
# Проверь, что совет генерируется
|
||||
cd /root/grid-bot
|
||||
kronos-venv/bin/python kronos_advisor_main.py --live 2>&1 | tail -10
|
||||
cat /root/.openclaw/kronos_advice.json
|
||||
```
|
||||
|
||||
Если `kronos_advisor_main.py` падает — пришли мне вывод ошибки, разберёмся.
|
||||
Reference in New Issue
Block a user