← Назад к блогу

OpenClaw + Pionex: как собрать крон-агента для автоматической торговли через MCP

Большинство «торговых ботов» — это либо слепой grid на одной паре, либо скрипт, который не умеет остановиться. Более интересный вариант выглядит иначе: агент по расписанию сканирует рынок, проверяет уже запущенные боты, и только потом принимает решение. Не каждую минуту. Не в панике. По жёстким правилам.

Ниже — рабочая схема на стеке OpenClaw + MCP Pionex + cron + Telegram. Это не инвестиционный совет, а технический разбор того, как собрать автономный цикл принятия решений.

Что делает система

Раз в заданный интервал агент:

  1. Запускает сканер фьючерсных PERP-пар
  2. Получает сигналы LONG/SHORT с conviction и score
  3. Проверяет, есть ли уже работающий бот на Pionex
  4. Если бот есть — не создаёт новый, только шлёт отчёт
  5. Если ботов нет — выбирает лучший сигнал и создаёт futures grid
  6. Отправляет структурированный отчёт в Telegram

Ключевая идея простая: система должна уметь не торговать. Именно это отделяет автоматизацию от хаоса.

Архитектура

cron
  └─ OpenClaw agent
       ├─ multi_coin_scanner_v5.py
       ├─ MCP Pionex
       │    ├─ pionex_bot_order_list
       │    └─ pionex_bot_futures_grid_create
       └─ Telegram report

OpenClaw здесь — среда, в которой живёт агент, его инструкции и инструменты.

MCP Pionex — слой доступа к бирже: список ботов, создание grid, баланс.

Cron — триггер, а не мозг. Мозг — правила агента.

Что нужно до запуска

  1. Рабочий OpenClaw workspace
  2. Установленный MCP-набор для Pionex
  3. API-доступ к Pionex с правами на futures bot
  4. Скрипт сканера — multi_coin_scanner_v5.py на GitHub Gist
  5. Telegram-канал или чат для отчётов
  6. Cron или аналог (systemd timer / внешний scheduler)

Крон-задача вызывает скрипт, скрипт вызывает модель. Модель дополнительно анализирует выбранный актив и только потом создаёт бота — это финальная проверка перед входом в позицию.

Без MCP-kit агент не сможет безопасно и одинаково вызывать биржевые методы. Именно MCP делает сценарий повторяемым: не «надеюсь, скрипт отработает», а «есть инструмент с понятным входом и выходом».

Логика крон-задачи

Шаг 1. Сканер

Агент запускает:

python3 /home/matros/.openclaw/workspace/multi_coin_scanner_v5.py

Сканер разбирает futures PERP-пары и возвращает сигналы:

  • направление: LONG / SHORT
  • conviction: VERY HIGH / HIGH / MEDIUM / LOW
  • score
  • volume ratio
  • risk/reward
  • RSI и связанные фильтры

Это сырьё для решения, а не приказ покупать.

Шаг 2. Проверка существующих ботов

Критический шаг:

pionex_bot_order_list(status='running')

Если есть хотя бы один running-бот:

  • нового бота не создавать
  • не пытаться «добавить ещё один»
  • только отчёт в Telegram
  • в отчёте явно писать: «Есть работающий бот, новый не создан»

Это главное safety-правило всей системы.

Шаг 3. Отбор кандидата

Только если running-ботов нет.

Приоритет:

  1. VERY HIGH
  2. HIGH
  3. MEDIUM
  4. LOW

При равном conviction — выше Score. Дополнительно:

  • Volume Ratio > 1.0x
  • Risk/Reward > 1.0
  • RSI не в экстремуме

Брать монету нужно из финального решения сканера, а не «что-то примерно похожее». Если всё слабо — пропуск до следующего часа.

Шаг 4. Создание futures grid

Только если ботов нет и кандидат прошёл фильтры.

Параметры:

  • тип: PERP futures grid
  • направление: как у сигнала
  • сумма: весь доступный USDT-баланс с запасом на комиссии
  • плечо: 9x
  • уровней: 20
  • тип сетки: geometric
  • диапазон: bottom = entry × 0.92, top = entry × 1.08
  • take-profit: +3% PnL (profitStopType: profit_ratio, profitStop: 0.03)
  • stop-loss по цене: LONG — entry × 0.90, SHORT — entry × 1.10
  • минимальный баланс: 8 USDT, иначе пропуск

Пример вызова MCP:

pionex_bot_futures_grid_create
  base: ETH
  quote: USDT
  buOrderData:
    top: entry * 1.08
    bottom: entry * 0.92
    row: 20
    grid_type: geometric
    trend: long | short
    leverage: 9
    quoteInvestment: [весь доступный USDT]
    profitStopType: profit_ratio
    profitStop: 0.03
    lossStopType: price
    lossStop: entry * 0.90  # для LONG

Для SHORT lossStop считается как entry * 1.10.

Шаг 5. Отчёт в Telegram

Отчёт должен быть одинаковым каждый раз. Тогда его можно читать за 10 секунд.

В отчёте:

  • топ-3 LONG
  • топ-3 SHORT
  • выбранный кандидат
  • статус ботов
  • баланс: total / in bot / free
  • действие: создан бот / не создан / ошибка API

Если бот уже был — это не «тишина». Это тоже результат, и он обязан попасть в Telegram.

Почему так, а не «всегда в рынке»

Сетка на весь баланс и плечо 9x — агрессивный режим. Именно поэтому система не должна плодить ботов. Один работающий grid уже занимает капитал и задаёт риск. Второй бот в таком режиме — не диверсификация, а способ ускорить ошибку.

Хороший крон-агент отличается не тем, что он постоянно что-то открывает. А тем, что у него есть право на действие «ничего не делать».

Минимальный чеклист перед боем

  • MCP Pionex отвечает на pionex_bot_order_list
  • сканер стабильно возвращает JSON/структурированный вывод
  • Telegram-отправка работает
  • в промпте агента правило «не создавать бота при running» написано жёстко
  • есть нижний порог баланса
  • есть стоп по цене, а не только надежда на grid

OpenClaw здесь не «магический трейдер». Это оркестратор: сканер даёт картину рынка, MCP даёт руки для биржи, cron даёт ритм, а правила не дают системе потерять дисциплину.

Вывод

Если убрать хотя бы один слой — получается либо ручная торговля, либо бесконтрольный скрипт. В связке они уже похожи на автономного агента: не потому что он умный всегда, а потому что он действует по одному и тому же жёсткому процессу каждый час.

Полный промпт крон-задачи

Скопируйте этот промпт и вставьте его в крон-задачу как есть — со всеми эмодзи и форматированием. Это точная логика, по которой агент работает каждый час.

Выполни крон-задачу автоматической торговли:
═══════════════════════════════════════
🔄 КРОН-ЗАДАЧА | [время] МСК ([дата])
═══════════════════════════════════════

Шаг 1: Запуск сканера

Выполни: python3 /home/matros/.openclaw/workspace/multi_coin_scanner_v5.py
Анализирует фьючерсные PERP пары
Выдаёт сигналы LONG/SHORT с conviction
Шаг 2: ПРОВЕРКА СУЩЕСТВУЮЩИХ БОТОВ (КРИТИЧЕСКИ ВАЖНО!)

Проверь список работающих ботов через pionex_bot_order_list(status='running')
ЕСЛИ ЕСТЬ ХОТЬ ОДИН РАБОТАЮЩИЙ БОТ:
✅ НЕ СОЗДАВАТЬ НОВОГО БОТА!
✅ НЕ ПЫТАТЬСЯ СОЗДАТЬ БОТА!
✅ ТОЛЬКО отправить отчет в Telegram с текущим статусом
✅ В отчете указать: "Есть работающий бот, новый не создан"
ЕСЛИ БОТОВ НЕТ:
Продолжить к Шагу 3
Шаг 3: Отбор кандидата №1 (ТОЛЬКО ЕСЛИ НЕТ РАБОТАЮЩИХ БОТОВ)

Приоритет: VERY HIGH > HIGH > MEDIUM > LOW
Если conviction одинаковый — брать с самым высоким Score
Если сигнал SHORT — брать SHORT, если LONG — брать LONG
Проверить: Volume Ratio > 1.0x, Risk/Reward > 1.0, RSI не экстремальный
Если всё плохо — пропустить, ждать следующий час
Создовай на весь доступный баланс !
БРАТЬ В КОНЕЧНОМ ИТОГЕ МОНЕТУ ДЛЯ GRID BOT ИЗ 🎯 ФИНАЛЬНОГО РЕШЕНИЯ !
Шаг 4: Создание Grid бота (ТОЛЬКО ЕСЛИ НЕТ РАБОТАЮЩИХ БОТОВ)

Тип: PERP фьючерсный Grid бот
Монета: выбранная (например, ETH_USDT_PERP)
Направление: LONG или SHORT (как у сигнала)
Сумма: ВЕСЬ доступный баланс USDT (с запасом на комиссии)
Плечо: 9x
Уровней: 20 (geometric)
Диапазон: entry * 0.92 (bottom) до entry * 1.08 (top)
Тейк-профит: PNL +3% (profitStopType: profit_ratio, profitStop: 0.03)
Стоп-лосс: ПО ЦЕНЕ -10% для LONG, +10% для SHORT (lossStopType: price)
Минимальный баланс: 8 USDT (если меньше — пропуск)
Параметры для MCP pionex_bot_futures_grid_create:

base: [монета без _PERP, например ETH]
quote: USDT
buOrderData:
top: [entry * 1.08]
bottom: [entry * 0.92]
row: 20
grid_type: geometric
trend: long или short
leverage: 9
quoteInvestment: [весь баланс USDT]
profitStopType: profit_ratio // TP по PNL +3%
profitStop: 0.03
lossStopType: price // ⚠️ SL по ЦЕНЕ -10% для LONG, +10% для SHORT
lossStop: [entry * 0.90 для LONG] или [entry * 1.10 для SHORT]
Шаг 5: Отправить красивый отчёт в Telegram
Формат отчёта (ИСПОЛЬЗОВАТЬ ТОЧНО ТАК):

═══════════════════════════════════════
📊 CRYPTO TRADING BOT REPORT — [HH:MM] (Europe/Minsk)
═══════════════════════════════════════

🔥 ТОП-3 LONG СИГНАЛЫ
┌─────────────────────────────────────┐
│ #1 [MONETA] Score: [score] 🟢 │
│ Conviction: [conviction] │
│ Vol: [ratio]x | R/R: [ratio] │
├─────────────────────────────────────┤
│ #2 [MONETA] Score: [score] 🟢 │
│ Conviction: [conviction] │
│ Vol: [ratio]x | R/R: [ratio] │
├─────────────────────────────────────┤
│ #3 [MONETA] Score: [score] 🟢 │
│ Conviction: [conviction] │
│ Vol: [ratio]x | R/R: [ratio] │
└─────────────────────────────────────┘

📉 ТОП-3 SHORT СИГНАЛЫ
┌─────────────────────────────────────┐
│ #1 [MONETA] Score: [score] 🔴 │
│ Conviction: [conviction] │
│ Vol: [ratio]x | R/R: [ratio] │
├─────────────────────────────────────┤
│ #2 [MONETA] Score: [score] 🔴 │
│ Conviction: [conviction] │
│ Vol: [ratio]x | R/R: [ratio] │
├─────────────────────────────────────┤
│ #3 [MONETA] Score: [score] 🔴 │
│ Conviction: [conviction] │
│ Vol: [ratio]x | R/R: [ratio] │
└─────────────────────────────────────┘

✅ ВЫБРАННЫЙ КАНДИДАТ
┌─────────────────────────────────────┐
│ [🟢/🔴] [MONETA] │
│ Сигнал: [LONG/SHORT] │
│ Score: [score] │
│ Conviction: [conviction] │
│ Entry: $[price] │
│ Target: $[price] │
│ Stop: $[price] │
│ R/R: 1:[ratio] │
└─────────────────────────────────────┘

📈 СТАТУС БОТОВ
┌─────────────────────────────────────┐
│ Активных ботов: [количество] │
│ ├─ [BOT_NAME] ([LONG/SHORT]) │
│ │ Прибыль: [pnl]% │
│ │ Время работы: ~[время] │
│ │ Статус: 🟢 Активен │
└─────────────────────────────────────┘

💰 БАЛАНС
┌─────────────────────────────────────┐
│ Баланс: [balance] USDT │
│ В боте: [in_bot] USDT │
│ Свободно: [free] USDT │
└─────────────────────────────────────┘

🚀 ДЕЙСТВИЕ
[создан новый бот / есть работающий бот, новый не создан / ошибка API]

═══════════════════════════════════════
🤖 Crypto Snapshot Pro Bot

⚠️ КРИТИЧЕСКОЕ ПРАВИЛО:
НЕ ПЫТАТЬСЯ СОЗДАТЬ ГРИД БОТА ЕСЛИ ЕСТЬ РАБОТАЮЩИЙ БОТ !!!!
ПРОСТО В ТАКОМ СЛУЧАЕ ПРИСЫЛАТЬ ОТЧЕТ В ТЕЛЕГРАМ !!!!

Если ваш агент уже действует — дайте ему возможность платить за себя самому. Создать платного агента