# Крипто-бот для трейдинга с ИИ: от testnet до VPS

URL: https://agentvera.dev/ru/blog/build-crypto-trading-bot-with-ai/ · Опубликовано: 2026-10-11

Как создать крипто-бота с ИИ: Python и ccxt, testnet, бэктест, ключи только для торговли, логи, VPS и оповещения в Telegram, с честными оговорками о рисках.

**Коротко:**

- Статья не является финансовой рекомендацией и честно предупреждает, что большинство ботов теряют деньги; бот строится на Python и ccxt, а стратегия, риск и ордера разнесены по отдельным модулям.
- Правила риска: не больше 2% баланса на ордер, остановка при дневном убытке 5% и API-ключ только для чтения и торговли, с отключённым выводом средств и белым списком IP.
- Тестируйте бэктестом с комиссией 0,1% и проскальзыванием 0,05% против buy-and-hold, затем минимум несколько дней на testnet и только потом реальный счёт с минимальной суммой.

Создать крипто-бота для трейдинга с ИИ сегодня действительно просто: кодинг-агент вроде Claude Code или Codex напишет бота на Python, который через ccxt подключается к бирже, запускает простую стратегию и ставит ордера. Настоящая работа — всё вокруг кода: тесты на testnet и в бэктестах, ограничение API-ключа только торговлей и переход на реальные деньги с крошечными суммами.

Руководство идёт шаг за шагом от пустой папки до бота, который круглосуточно работает на сервере и присылает вам оповещения в Telegram. Но сначала о том, о чём я обязан сказать прямо.

## Сначала риск: это не финансовая рекомендация

Это руководство по программированию, а не инвестиционный совет. Несколько фактов заранее:

- **Большинство торговых ботов теряют деньги.** Особенно простые стратегии из интернета, если учесть комиссии, проскальзывание и резкие движения.
- **Стратегия, отлично выглядящая в бэктесте, часто проваливается вживую.** Стратегии, подогнанные под прошлые данные (переобучение), быстро рассыпаются.
- **В коде, написанном ИИ, бывают дорогие ошибки.** Неверная единица количества, перевёрнутое условие покупки и продажи или цикл повторов, который продолжает ставить ордера, могут опустошить счёт за минуты.
- **Давайте боту только те деньги, которые не жалко потерять.** Начните с testnet, а потом выходите на реальный счёт с минимальной суммой, которую допускает биржа.

Стратегия в этой статье — пример кода. Я не выдаю её за способ заработка.

## Какой стек выбрать

Когда вы делаете бота через [vibe coding](/ru/glossary/vibe-coding/), выбирайте стек, который агент знает лучше всего. Мой выбор:

- **Python 3.11+**: самая зрелая экосистема для данных (pandas), бэктестинга и библиотек для бирж, и язык, на примерах которого агенты видели больше всего кода.
- **ccxt**: библиотека с открытым кодом, которая общается со многими биржами через один интерфейс. Код для одной биржи обычно переносится на другую с изменением нескольких строк, а режим testnet и sandbox многих бирж поддерживается.
- **pandas**: чтобы работать со свечами (OHLCV) как с таблицей.
- **python-dotenv**: чтобы держать API-ключи в файле `.env`, а не в коде.
- **SQLite**: чтобы записывать открытые позиции и ордера без запуска сервера баз данных.

Настройка:

```bash
mkdir crypto-bot && cd crypto-bot
git init
python3 -m venv .venv && source .venv/bin/activate
pip install ccxt pandas python-dotenv requests
echo ".env" >> .gitignore
echo ".venv/" >> .gitignore
```

Добавьте эти строки в `.gitignore` в первую же минуту. Случайно отправленный на GitHub API-ключ — самая частая и самая дорогая ошибка во всей этой области.

## Шаг 1: аккаунт testnet и ключ API с правильными правами

Многие крупные биржи предлагают тестовую среду (testnet или sandbox), где реальные деньги не двигаются. Найдите в документации разработчика биржи слова «testnet» или «sandbox» и создайте там отдельный тестовый аккаунт и тестовый API-ключ. Если testnet нет или вашей пары на нём нет, мы попросим агента сделать режим бумажной торговли, который читает реальные цены, но ордера записывает только локально.

Когда вы наконец создадите ключ на реальном аккаунте:

- **Включите только чтение и торговлю. Никогда не включайте вывод средств.** Если ключ утечёт, никто не сможет отправить ваши средства в другое место.
- **Используйте белый список IP.** Если биржа поддерживает, привяжите ключ к статическому IP вашего VPS.
- **Держите фьючерсы и маржу выключенными.** Начинайте со спота.
- **Создавайте по одному ключу на бота,** чтобы при проблемах отозвать только его.

Файл `.env` выглядит так:

```bash
EXCHANGE=binance
API_KEY=your-test-key
API_SECRET=your-test-secret
USE_TESTNET=true
TELEGRAM_TOKEN=
TELEGRAM_CHAT_ID=
```

Не вставляйте эти значения в чат с агентом. Агенту нужно знать, что `.env` существует, а не что в нём.

## Шаг 2: первый промпт

Откройте агента в папке проекта (`claude` или `codex`) и просите бота слоями, а не всё сразу. Первый промпт, который можно скопировать:

```text
Set up a skeleton for a simple spot trading bot in Python 3.11 with ccxt.
Rules:
- Read settings from .env with python-dotenv. Never open or print .env.
- If USE_TESTNET=true, enable ccxt sandbox mode; otherwise print a
  "LIVE MODE" warning on start and wait 10 seconds.
- Modules: config.py, exchange.py (connection, balance, candles, orders),
  strategy.py (returns a signal, never places orders), risk.py (position
  size, daily loss limit), bot.py (main loop), storage.py (SQLite log).
- Every order must pass risk.py first. Max 2% of balance per order;
  stop the bot if the daily loss exceeds 5%.
- With DRY_RUN=true, never place orders, only log them.
- Use Python logging to logs/bot.log and the console.
- No strategy yet: strategy.py should always return "hold".
When done, summarize the file layout and how to run it.
```

Почему сначала каркас? Когда стратегия, выставление ордеров и правила риска лежат в разных файлах, код легче проверять, а ошибки ловить. Если стратегия не может ставить ордера, ошибка в ней в худшем случае даст неверный сигнал, а слой риска ограничит ущерб.

## Шаг 3: пример стратегии (пересечение скользящих средних)

Повторю: это пример, а не совет. Пересечение скользящих средних — одна из самых наглядных стратегий для демонстрации структуры. Когда быстрая средняя пересекает медленную сверху вверх, это сигнал «покупать»; когда снизу вниз, «продавать».

```python
# strategy.py — example only, not financial advice
import pandas as pd

def signal(ohlcv: list, fast: int = 20, slow: int = 50) -> str:
    df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
    if len(df) < slow + 2:
        return "hold"
    df["fast"] = df["close"].rolling(fast).mean()
    df["slow"] = df["close"].rolling(slow).mean()
    prev, last = df.iloc[-3], df.iloc[-2]  # the last candle is still open, skip it
    if prev.fast <= prev.slow and last.fast > last.slow:
        return "buy"
    if prev.fast >= prev.slow and last.fast < last.slow:
        return "sell"
    return "hold"
```

Одна деталь, на которую стоит обратить внимание: сигнал считается по последней закрытой свече, потому что самая новая ещё движется. Агенты часто упускают это, и бот начинает метаться туда-обратно внутри одной свечи.

Промпт, чтобы добавить её:

```text
Add a 20/50 moving average crossover to strategy.py. Compute signals from
closed candles only. Write pytest tests for the signal function: cross up,
cross down, not enough data and a flat market. Run the tests and show me
the output.
```

## Шаг 4: бэктест

Перед выходом в рабочий режим прогоните стратегию на исторических данных. Можно попросить агента получить свечи через ccxt и написать простой цикл бэктеста. Для более серьёзных задач посмотрите backtesting.py, vectorbt или Freqtrade; Freqtrade — зрелый фреймворк для ботов с открытым кодом, где уже есть бэктест, dry-run и управление через Telegram.

Промпт:

```text
Write backtest.py. Fetch the last year of BTC/USDT 1h candles with ccxt,
paginating, and save them as CSV under data/. Apply strategy.signal candle
by candle without looking ahead. Deduct 0.1% fee and 0.05% slippage per
trade. Report total return, number of trades, win rate, max drawdown and
buy-and-hold return over the same period.
```

Читая результаты:

- **Всегда учитывайте комиссии и проскальзывание.** Без них почти любая стратегия выглядит хорошо.
- **Сравнивайте с buy-and-hold.** Если бот работает хуже, чем простое удержание, затея не стоит усилий.
- **Сами проверьте заглядывание в будущее.** Прочитайте цикл и убедитесь, что он не использует данные, которых ещё не было.
- **Не подкручивайте параметры, пока кривая не станет красивой.** Если 17/43 лучше 20/50, скорее всего, это случайность.

## Шаг 5: testnet и бумажная торговля

После бэктеста запустите бота на testnet минимум на несколько дней:

```bash
DRY_RUN=false USE_TESTNET=true python bot.py
```

На этом этапе вы проверяете поведение, а не прибыль. Уходят ли ордера с правильным количеством? Помнит ли бот открытую позицию после перезапуска? Когда биржа возвращает ошибку, бот падает или делает паузу и повторяет? Срабатывает ли дневной лимит убытка?

Намеренно вызовите сбой, например, ордер больше вашего баланса, и посмотрите, как бот чисто запишет его в лог и остановится.

## Шаг 6: лимиты запросов, обработка ошибок и логи

Биржи ограничивают число запросов к API. Бот, который их превышает, сначала получает ошибки, а если продолжает, может быть временно заблокирован. Параметр ccxt `enableRateLimit` автоматически разносит запросы по времени; пусть агент подтвердит, что он включён.

```text
Review exchange.py:
- Make sure ccxt enableRateLimit is on.
- On NetworkError and RateLimitExceeded, retry up to 5 times with
  increasing backoff. On InsufficientFunds and InvalidOrder, do not retry;
  log it and send a Telegram alert.
- Log the request, exchange response and order id for every order.
- Prevent a second order for the same signal (idempotency).
```

Хорошая строка лога позже отвечает на вопрос «почему бот так поступил?»: время, сигнал, цена, рассчитанное количество, результат проверки риска, идентификатор ордера. Никогда не логируйте API-ключи и секреты.

## Шаг 7: оповещения в Telegram

Бот должен сообщать вам, что делает. Проще всего обычный HTTP-вызов Telegram Bot API:

```python
# notify.py
import os, requests

def send(text: str) -> None:
    token, chat = os.getenv("TELEGRAM_TOKEN"), os.getenv("TELEGRAM_CHAT_ID")
    if not token or not chat:
        return
    try:
        requests.post(f"https://api.telegram.org/bot{token}/sendMessage",
                      json={"chat_id": chat, "text": text}, timeout=10)
    except requests.RequestException:
        pass  # a failed alert must not stop the bot
```

Токен вы получаете через официальный механизм Telegram для создания ботов. Оповещения стоит слать о запуске и остановке бота, об отправленном ордере, об ошибке и о достижении дневного лимита убытка. В моём руководстве по [созданию Telegram-бота с ИИ](/ru/blog/build-telegram-bot-with-ai/) рассказано, как добавлять команды, например, удалённую остановку бота.

## Шаг 8: круглосуточная работа на VPS

Когда ноутбук засыпает, засыпает и бот. Хватит небольшого Linux VPS; статический IP важен для белого списка IP.

### Через systemd

```ini
# /etc/systemd/system/crypto-bot.service
[Unit]
Description=Crypto bot
After=network-online.target

[Service]
User=bot
WorkingDirectory=/home/bot/crypto-bot
EnvironmentFile=/home/bot/crypto-bot/.env
ExecStart=/home/bot/crypto-bot/.venv/bin/python bot.py
Restart=on-failure
RestartSec=30

[Install]
WantedBy=multi-user.target
```

```bash
sudo systemctl daemon-reload
sudo systemctl enable --now crypto-bot
journalctl -u crypto-bot -f
```

Запускайте бота от отдельного пользователя, а не от root, и закройте файл окружения командой `chmod 600 .env`.

### Через Docker

Если вы предпочитаете Docker, пусть агент напишет `Dockerfile` и `docker-compose.yml` с `restart: unless-stopped`, `env_file` для `.env` и томами для `logs/` и файла SQLite, чтобы бот и его записи пережили перезагрузку сервера.

## Частые ошибки: в чём ИИ обычно ошибается

- **Количества и точность.** Биржи требуют минимальное количество и число знаков после запятой для каждой пары. Агенты пропускают это и получают отклонённые ордера или округляют не туда. Пусть использует `amount_to_precision` из ccxt и ограничения рынка.
- **Использование открытой свечи.** Сигналы по свече, которая ещё движется, — шум.
- **Флаг testnet остался включённым в рабочем режиме или выключенным при тестах.** Громко пишите режим в лог при запуске.
- **Потеря состояния при перезапуске.** Если бот забудет открытую позицию, он может купить снова. Храните состояние в SQLite и сверяйте его с биржей при запуске.
- **Ордера в цикле повторов.** Если логика повторов оборачивает выставление ордера, один и тот же ордер может уйти много раз.
- **Проглоченные ошибки.** `except: pass` повсюду делает бота, который выглядит живым и ничего не делает.
- **Вера в «тесты прошли».** Посмотрите на вывод сами.

## Чек-лист безопасности

- API-ключи лежат только в `.env`, а `.env` внесён в `.gitignore`.
- Никогда не вставляйте ключи в агента, чат или скриншот.
- Вывод средств выключен, белый список IP включён, маржа выключена.
- Читайте команды, которые агент хочет выполнить, прежде чем одобрять, особенно те, что читают `.env`, загружают файлы или делают сетевые вызовы.
- Если подозреваете утечку ключа, сразу отзовите его на бирже и создайте новый.
- Включите двухфакторную аутентификацию на аккаунте биржи.
- Устанавливайте знакомые зависимости; проверяйте любое имя пакета, которое предложил агент и которое вы никогда не слышали.

## Как это делается в AgentVera

В таких проектах я запускаю несколько агентов бок о бок. В сетке [AgentVera](/ru/features/workspace/) Claude Code может работать над стратегией и бэктестом в одном worktree, пока Codex делает оповещения Telegram и файлы Docker в другом, не трогая файлы друг друга. После каждого хода [автоматическое ревью кода](/ru/features/code-review/) заставляет вторую модель прочитать написанное агентом, и это полезный второй взгляд на арифметику количеств и условия покупки и продажи. Diff вы просматриваете в [панели Git](/ru/features/git-and-github/) перед слиянием и видите [расход токенов](/ru/features/token-savings/) по каждому агенту. Когда бот готов, [SSH и SFTP](/ru/features/ssh-and-sftp/) переносит файлы на VPS, а [менеджер Docker](/ru/features/docker/) показывает контейнер локально.

Ничего из этого не обязательно; два терминала и git тоже подойдут. Если вам интересна параллельная схема, смотрите [параллельные кодинг-агенты](/ru/blog/parallel-coding-agents/).

## Подводим итоги

Программная часть создания крипто-бота для трейдинга с ИИ занимает несколько часов: Python, ccxt, чётко разделённые модули, слой риска и хорошие логи. То, что занимает время и действительно важно, — тестирование: бэктест, testnet, бумажная торговля и только потом крошечная сумма на реальном счёте. Ограничьте API-ключ торговлей, выключите вывод средств и читайте каждую строку с ордерами, которую пишет агент. И помните: большинство ботов теряют деньги; делайте этого, чтобы учиться, а не чтобы разбогатеть.

## Частые вопросы

**Может ли ИИ создать крипто-бота для трейдинга?** Да. Кодинг-агент за вечер напишет бота на Python с ccxt, который подключается к бирже, запускает стратегию и ставит ордера. Сложность не в коде, а в том, приносит ли стратегия деньги и нет ли в коде дорогой ошибки.

**Какие права должен иметь API-ключ торгового бота?** Только чтение и торговля; никогда не включайте вывод средств. Если биржа поддерживает, ограничьте ключ IP-адресом сервера, на котором работает бот.

**Как проверить торгового бота без реальных денег?** Сначала проведите бэктест на исторических данных, затем несколько дней гоняйте бота на testnet биржи или в режиме бумажной торговли, где ордера только записываются. К реальным деньгам переходите после этого и с суммой, которую не жалко потерять.

**Зарабатывают ли крипто-боты?** В большинстве случаев нет. Простые стратегии обычно уходят в минус после комиссий и проскальзывания, а красивый бэктест мало говорит о будущем. Статья не является финансовой рекомендацией.

**Где запускать крипто-бота круглосуточно?** Хватит небольшого Linux VPS. Если запускать бота как сервис systemd или контейнер Docker, он перезапустится после сбоя, а его логи будут в одном месте.

---

**Об AgentVera.** AgentVera — настольное приложение для macOS, Windows и Linux от Solviera Teknoloji. Оно запускает 18 ИИ-агентов для программирования (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) рядом, по проектам, в настоящих терминалах с собственными установками CLI и входами пользователя. В бесплатном тарифе количество агентов не ограничено. Скачать: https://agentvera.dev/ru/download/ · Цены: https://agentvera.dev/ru/pricing/
