Files
gridbot/DEPLOY.md
T

11 KiB
Raw Blame History

Деплой 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 сек)

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 мин)

# На своём ноуте:
scp kolp-deploy-2026-06-05.tar.gz root@46.29.164.31:/root/grid-bot/

2. Распаковать поверх (30 сек)

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 мин)

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 мин)

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 сек)

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 мин)

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 мин)

# 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

🔄 Откат (если что-то пошло не так)

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

Или ещё проще:

# В .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-блок)

📞 Если что-то не работает

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