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

Одни слишком простые, другие заточенные на одну стратегию, не нашел чего-то такого, что было бы как минимальной базой для начала

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

Поэтому в статье мы с нуля соберём торгового бота, который умеет получать рыночные данные, принимать решение, выставлять заявку, проверять состояние позиции и фиксировать результат сделки

И да - всё это попробуем сделать примерно за 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 мы хотим получить

Его задача максимально простая:

попросили данные → сходил на биржу → вернул данные

Функции

Что делает

Что получает / возвращает

init()

Создаёт авторизованную сессию с ByBit

Получает: API key и secret. Возвращает: ничего, сохраняет соединение в session

get_wallet()

Получает доступный баланс единого счёта

Возвращает: доступный баланс в USDT (float)

get_coins_spr()

Получает справочник активных монет

Возвращает: список пар с тикером, минимальным размером ордера, шагом количества и шагом цены

get_orderbook(symbol)

Запрашивает текущий стакан конкретной пары

Получает: тикер, например BTCUSDT. Возвращает: bids и asks с ценами и объёмами

get_position(symbol)

Получает открытые позиции

Получает: тикер (необязательно). Возвращает: символ, направление, размер, среднюю цену входа и нереализованный PnL

get_openorder()

Получает все ещё не исполненные заявки

Возвращает: список открытых ордеров с символом, направлением, ценой и количеством

get_closed_pnl()

Получает историю недавно закрытых позиций

Возвращает: список сделок с символом и фактическим реализованным PnL

post_order(symbol, side, qty, tp, sl)

Отправляет рыночный ордер с 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 - это уже мозг нашей системы.

Он не должен знать, как биржа устроена внутри. Вместо этого он использует функции, которые мы подготовили:

Функция

Что делает

Что получает / возвращает

snap(value, step)

Округляет количество или цену под требования конкретной торговой пары

Получает: число и шаг округления. Возвращает: аккуратную строку с нужным шагом

open_excel()

Открывает журнал сделок или создаёт его при первом запуске

Возвращает: Excel-книгу trades.xlsx

write_trade(...)

Записывает открытую сделку в Excel

Получает: монету, направление, цену входа, объём, TP и SL

reconcile_closed(...)

Сверяет локальный журнал с фактически закрытыми на бирже позициями

Получает: историю закрытых сделок и список открытых позиций

trade_one(...)

Главная функция стратегии: анализирует одну монету и при наличии сигнала открывает позицию

Получает: параметры монеты и список уже открытых позиций

main()

Запускает весь процесс: подключение → баланс → позиции → монеты → торговый цикл

Возвращает: ничего, управляет работой бота

Чтобы закрепилось: первый файл функции работы с биржей, второй наша логика и доп. функции для удобства

Давайте теперь это всё соберём вместе, как 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-файлов мы получили замкнутый цикл:

И всё

Мы не написали тысячу строк кода, не создавали десятки классов и не строили сложную инфраструктуру.

Но при этом у нас уже есть все основные элементы торгового бота:

получить данные → обработать → принять решение → отправить ордер → сохранить результат

Для закрепления:

  1. Ставим python

  2. Регистрируемся и получаем ключи API бирж

  3. Скачиваем проект с гитхаба

  4. Запускаем через консоль
    (иногда мб потребоваться, увидите по ошибка, обновить/установить библиотеки, следуйте инструкции в консоли)

Результат работы бота

На старте было $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