Перед тем как писать эту статью, я сделал небольшой ресёч: посмотрел, что уже есть на Хабре по разработке торговых ботов и гайдам в формате «с чего начать»
Одни слишком простые, другие заточенные на одну стратегию, не нашел чего-то такого, что было бы как минимальной базой для начала
Не учить одной конкретной стратегии, а собрать минимальный рабочий фреймворк, который можно взять за основу и дальше развивать под себя
Поэтому в статье мы с нуля соберём торгового бота, который умеет получать рыночные данные, принимать решение, выставлять заявку, проверять состояние позиции и фиксировать результат сделки
И да - всё это попробуем сделать примерно за 60 минут Вся необходимая информация будет здесь, никуда переходить не нужно - статья полностью самостоятельная
Спойлер: Собранный бот заработал за 48 минут 22 цента, сделки приложил в конце статьи, можно их проверить
Итак, что нам понадобится:
Как и в любом хорошем рецепте, сначала соберём ингредиенты)
💻 Компьютер
⏱️ 60 минут свободного времени - если вы совсем с нуля
🏦 Любая криптобиржа с API - либо учебный/демо-аккаунт
🐍 Python
1. Установите Python
Скачайте Python с официального сайта: Официальная страница загрузки Python
После установки можно проверить, что всё работает:
python --version
На macOS/Linux команда может выглядеть так:
python3 --version
2. Зарегистрируйтесь на бирже
Подойдёт практически любая крупная криптобиржа с API. Например:
Bybit (использую в примерах, ниже)
OKX
Gate
KuCoin
Я намеренно не даю реферальных ссылок - эта статья не про рекламу бирж и не про реферальные программы
Если биржа предлагает демо или учебный аккаунт, для первого запуска я рекомендую использовать именно его.
3. Создайте API-ключ
После регистрации найдите в настройках аккаунта раздел вроде API / API Management / API Keys и создайте новый API-ключ.
API-ключ - это по сути пропуск, который позволяет нашей программе обращаться к бирже от имени вашего аккаунта
В зависимости от биржи вы получите обычно две части:
API Key API Secret
Иногда есть ещё третье значение - например, Passphrase
Для нашего бота понадобятся права на чтение данных и торговлю деривативами/фьючерсами.
⚠️ Очень важно: не включайте разрешение на вывод средств (Withdraw), если оно вообще доступно. Боту для торговли оно не нужно.
К чему мы хотим придти к концу статьи:
Наша схема будет выглядеть так:
Python → API → биржа → получение данных / отправка заявки
Перед кодом немного биржевой терминологии
Если вы никогда не торговали на бирже, код ниже может выглядеть страшнее, чем он есть. Поэтому буквально пять минут на базовую терминологию.
Термин | Что это значит |
|---|---|
Ордер (Order) | Заявка на покупку или продажу. Например: «Купить BTC на $20». |
Market Order | Ордер, который исполняется сразу по доступной цене рынка. |
Limit Order | Ордер с заданной ценой: «Купить BTC только по $100 000 или дешевле». |
Позиция (Position) | Уже открытая сделка. Например, вы купили BTC - у вас появилась LONG-позиция. |
LONG | Вы зарабатываете, если цена растёт. |
SHORT | Вы зарабатываете, если цена падает. |
TP (Take Profit) | Уровень, на котором позиция автоматически закрывается с прибылью. |
SL (Stop Loss) | Уровень, на котором позиция автоматически закрывается с убытком, чтобы ограничить потери. |
PnL (Profit and Loss) | Финансовый результат позиции или сделки. |
Баланс | Деньги на аккаунте, доступные для торговли. |
Размер позиции | Номинальный объём конкретной сделки. |
Стакан (Order Book) | Список текущих заявок покупателей и продавцов по разным ценам. |
Например, бот открывает LONG по BTC на $100 000.
Мы задаём:
TP = $100 500
SL = $99 500
Если цена поднимется до $100 500 - позиция закроется по Take Profit (TP)
Если цена пойдёт против нас и достигнет $99 500 - сработает Stop Loss (SL)
В нашем примере TP и SL выставляются сразу вместе с рыночным ордером
Структура проекта
Специально сделаю вещь, которую в production-коде, скорее всего, делать не стоит: весь наш бот будет состоять всего из двух Python-файлов (код на гитхабе)
https://github.com/Shldm/edu_bot
trading_bot/ │ ├── market_bb.py # работа с биржей, ничего не знает о нашей стратегии; └── run_bot.py # логика бота + запуск, ничего не знает о тонкостях API биржи;
Наша задача сейчас - не построить промышленную торговую систему, а понять сам принцип её работы
Разберем первый файл: market_bb.py(140 строк)
https://github.com/Shldm/edu_bot/blob/main/market_bb.py
Он не знает, что такое наша стратегия, когда покупать BTC, когда продавать и какой PnL мы хотим получить
Его задача максимально простая:
попросили данные → сходил на биржу → вернул данные
Функции | Что делает | Что получает / возвращает |
|---|---|---|
| Создаёт авторизованную сессию с ByBit | Получает: API key и secret. Возвращает: ничего, сохраняет соединение в |
| Получает доступный баланс единого счёта | Возвращает: доступный баланс в USDT ( |
| Получает справочник активных монет | Возвращает: список пар с тикером, минимальным размером ордера, шагом количества и шагом цены |
| Запрашивает текущий стакан конкретной пары | Получает: тикер, например |
| Получает открытые позиции | Получает: тикер (необязательно). Возвращает: символ, направление, размер, среднюю цену входа и нереализованный PnL |
| Получает все ещё не исполненные заявки | Возвращает: список открытых ордеров с символом, направлением, ценой и количеством |
| Получает историю недавно закрытых позиций | Возвращает: список сделок с символом и фактическим реализованным PnL |
| Отправляет рыночный ордер с TP и SL | Получает: тикер, направление, объём, TP и SL. Возвращает: ответ биржи с результатом операции |
Разберем второй файл: run_bot.py (217 строк)
https://github.com/Shldm/edu_bot/blob/main/run_bot.py
Если market_bb.py был переводчиком между Python и биржей, то run_bot.py - это уже мозг нашей системы.
Он не должен знать, как биржа устроена внутри. Вместо этого он использует функции, которые мы подготовили:
Функция | Что делает | Что получает / возвращает |
|---|---|---|
| Округляет количество или цену под требования конкретной торговой пары | Получает: число и шаг округления. Возвращает: аккуратную строку с нужным шагом |
| Открывает журнал сделок или создаёт его при первом запуске | Возвращает: Excel-книгу |
| Записывает открытую сделку в Excel | Получает: монету, направление, цену входа, объём, TP и SL |
| Сверяет локальный журнал с фактически закрытыми на бирже позициями | Получает: историю закрытых сделок и список открытых позиций |
| Главная функция стратегии: анализирует одну монету и при наличии сигнала открывает позицию | Получает: параметры монеты и список уже открытых позиций |
| Запускает весь процесс: подключение → баланс → позиции → монеты → торговый цикл | Возвращает: ничего, управляет работой бота |
Чтобы закрепилось: первый файл функции работы с биржей, второй наша логика и доп. функции для удобства
Давайте теперь это всё соберём вместе, как LEGO 🧱
До этого мы разбирали детали по отдельности. Теперь посмотрим, что происходит от момента запуска бота до первой сделки.
У нас есть два файла:
trading_bot/ │ ├── market_bb.py ← умеет разговаривать с ByBit └── run_bot.py ← принимает торговые решения
Запускаем (в консоли, находясь в папке с проектом, начинает работать логика заложенная во втором файле):
python run_bot.py
1. Бот подключается к бирже
(ключи не забываем вставить)
market_bb.init(API_KEY, API_SECRET)
2. Узнаём, сколько у нас денег
balance = market_bb.get_wallet()
3. Получаем список монет
coins = market_bb.get_coins_spr()
4. Проверяем, нет ли уже открытых позиций
positions = market_bb.get_position()
Это нужно, чтобы бот случайно не открыл ещё пять одинаковых LONG по BTC только потому, что несколько раз увидел один и тот же сигнал.
5. Начинаем проходить монеты одну за другой
Для каждой монеты вызывается:
trade_one(coin, open_symbols)
А внутри происходит самое интересное.
6. Забираем стакан
ob = market_bb.get_orderbook(symbol)
Получаем:
Bids Asks 100 000 2.1 BTC 100 001 0.4 BTC 99 999 3.5 BTC 100 002 0.7 BTC 99 998 1.8 BTC 100 003 0.5 BTC
7. Считаем объём покупателей и продавцов
bid_volume = sum(q for _, q in ob["bids"]) ask_volume = sum(q for _, q in ob["asks"])
И проверяем наш простой сигнал:
bid_volume / ask_volume >= 3.5
Если да - LONG.
Если продавцов в 3.5 раза больше - SHORT.
Если ничего интересного нет — просто переходим к следующей монете.
8. Если появился сигнал - рассчитываем сделку
9. Отправляем ордер
Вся эта логика заканчивается одной строкой:
market_bb.post_order(symbol, side, qty, tp, sl)
10. Записываем результат
После успешного открытия позиции бот сохраняет её в trades.xlsx:
Что мы только что построили?
Всего из двух Python-файлов мы получили замкнутый цикл:

И всё
Мы не написали тысячу строк кода, не создавали десятки классов и не строили сложную инфраструктуру.
Но при этом у нас уже есть все основные элементы торгового бота:
получить данные → обработать → принять решение → отправить ордер → сохранить результат
Для закрепления:
Ставим python
Регистрируемся и получаем ключи API бирж
Скачиваем проект с гитхаба
Запускаем через консоль
(иногда мб потребоваться, увидите по ошибка, обновить/установить библиотеки, следуйте инструкции в консоли)
Результат работы бота
На старте было $200. Размер одной позиции - около $20, то есть бот использовал примерно 10% депозита на одну сделку
# | Дата | Время | Монета | Направление | PnL, $ | Результат |
|---|---|---|---|---|---|---|
1 | 05.08.2026 | 12:00 | WLDUSDT | LONG | +0,0775 | ✅ |
2 | 05.08.2026 | 12:06 | ARBUSDT | SHORT | +0,0774 | ✅ |
3 | 05.08.2026 | 12:12 | OPUSDT | LONG | −0,1227 | ❌ |
4 | 05.08.2026 | 12:18 | SUIUSDT | SHORT | +0,0774 | ✅ |
5 | 05.08.2026 | 12:30 | SEIUSDT | LONG | +0,0786 | ✅ |
6 | 05.08.2026 | 12:36 | TIAUSDT | SHORT | +0,0787 | ✅ |
7 | 05.08.2026 | 12:42 | LDOUSDT | LONG | −0,1222 | ❌ |
8 | 05.08.2026 | 12:48 | 1000PEPEUSDT | SHORT | +0,0788 | ✅ |
Итого | 05.08.2026 | 12:00–12:48 | 8 сделок | +0,2235 | 6 / 8 |
Немного статистики
Стартовый депозит: $200
Сделок: 8
Прибыльных: 6 (75%)
Убыточных: 2 (25%)
Итоговый PnL: +$0,2235
Доходность на депозит: +0,112%
Средняя сделка: +$0,0279
Средняя прибыльная: +$0,0781
Средняя убыточная: −$0,12245
Profit Factor: 1,91
Максимальная прибыль: +$0,0788
Максимальный убыток: −$0,1227
И здесь есть важный момент.
8 сделок - это не статистически значимая выборка. Поэтому было бы абсолютно неправильно написать: «бот зарабатывает 0,112% за час» и тем более пересчитать это в годовые
Как запустить бота
git clone https://github.com/Shldm/edu_bot.gitcd edu_bot # качаем проект cd edu_bot # переходим в папку с проектом ## вставьте свои ключи в файл run_bot.py python run_bot.py # запускаем бота ## бот пройдет один цикл по монетам, откроет сделки и запишет результат в excel
Что дальше?
Да, конечно, это игрушечный бот. Если просто запустить его и оставить торговать на длинной дистанции, скорее всего, он уйдёт в минус
Мы не пытались за 120 минут создать прибыльную торговую систему. Мы сделали минимальный каркас, который можно постепенно развивать
Взяв этот проект за основу, можно добавить:
🗄️ Базу данных - хранить сделки, стаканы, позиции, сигналы и статистику не в Excel.
⚡ WebSocket - получать изменения стакана в реальном времени вместо постоянных REST-запросов
📊 Индикаторы - добавить технический анализ и собственные признаки рынка
🧠 Более сложную стратегию - вместо примитивного дисбаланса стакана использовать несколько условий одновременно
🧪 Backtest - проверить стратегию на исторических данных до запуска реальных денег
📈 Аналитику - win rate, profit factor, drawdown, Sharpe, комиссии, funding и другие метрики
🛡️ Risk management - лимиты на позиции, дневной убыток, максимальную просадку и общий риск.
🔄 Нормальную синхронизацию с биржей - обработку частичных исполнений, reconnect и рассинхронизации состояния.
🏦 Несколько бирж - вынести общий интерфейс и подключить ByBit, OKX, Binance и другие площадки.
🤖 ML/LLM - когда появится нормальный датасет, уже экспериментировать с моделями поверх собранных данных
И в этот момент несколько десятков строк превращаются уже совсем в другую систему.
Но начинать можно именно с них.
Потому что главный навык в алго-трейдинге - не умение написать тысячу строк кода.
Это умение взять идею:
«А что если попробовать торговать вот это?»
и превратить её в систему, которую можно запустить, измерить, протестировать и доказать или опровергнуть цифрами
А дальше - уже простор для экспериментов
Свои эксперименты и заметки веду тут: https://t.me/bylabdata

