# Деплой 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` падает — пришли мне вывод ошибки, разберёмся.