11 KiB
11 KiB
Деплой 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
🔒 Безопасность — обязательно
- Сменить оба комплекта ключей Tradernet (9adf.../97b0... и a8e6.../7313...) — они утекли в архив, который я видел.
https://tradernet.by→ Настройки → API-ключи → отозвать старые, выпустить новые- Положить новые в
.env(не вconfig.py!) - В
config.pyстарые ключи уже удалены (толькоos.getenv)
WEB_PASSWORDпоставить сложный (16+ символов, не как в.env.example)- Telegram-токен — тоже отозвать (
@BotFather→/revoke→ новый)
🚦 Стратегия включения в проде
Этап 1 — безопасно (текущий шаг)
KRONOS_ENABLED=trueKRONOS_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 падает — пришли мне вывод ошибки, разберёмся.