В эпоху криптовалют автоматизированная торговля стала мощным инструментом для трейдеров. Binance — одна из крупнейших бирж, предоставляющая API для интеграции. В этой статье мы разберём, как с нуля написать простого торгового бота на Python, используя официальный Binance API. Бот будет отслеживать цену Bitcoin (BTC/USDT) и совершать сделки по стратегии "покупай на спаде, продавай на пике".
Важно: Торговля криптовалютами несёт высокие риски. Это руководство — образовательное. Тестируйте на тестовом режиме (Testnet) и не используйте реальные деньги без глубокого понимания.
Заказать бота для крипто трейдинга https://bitcoin-private-keys.store/bot-trader/
Шаг 1: Подготовка окружения
1.1. Установите Python
Скачайте с python.org (рекомендуется 3.9+).
1.2. Создайте виртуальное окружение
bash
python -m venv binance_bot
source binance_bot/bin/activate # Linux/Mac
binance_bot\Scripts\activate # Windows
1.3. Установите библиотеки
bash
pip install python-binance pandas numpy python-dotenv
Шаг 2: Регистрация и настройка API на Binance
- Зарегистрируйтесь на binance.com
- Перейдите в Профиль → Управление API
- Создайте новый API-ключ
- Включите торговлю и чтение данных
- Сохраните API Key и Secret Key
Для тестов: Используйте Binance Testnet — там нет риска потерять деньги.
Шаг 3: Структура проекта
text
binance_bot/
├── .env
├── config.py
├── bot.py
└── strategy.py
Шаг 4: Настройка конфигурации (.env)
env
BINANCE_API_KEY=your_api_key_here
BINANCE_API_SECRET=your_secret_key_here
SYMBOL=BTCUSDT
QUANTITY=0.001
Шаг 5: config.py — загрузка ключей
python
import os
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv('BINANCE_API_KEY')
API_SECRET = os.getenv('BINANCE_API_SECRET')
SYMBOL = os.getenv('SYMBOL', 'BTCUSDT')
QUANTITY = float(os.getenv('QUANTITY', 0.001))
Шаг 6: strategy.py — простая стратегия
python
import pandas as pd
def moving_average_strategy(client, symbol, short_window=5, long_window=20):
"""Простая стратегия: пересечение скользящих средних"""
klines = client.get_historical_klines(
symbol, client.KLINE_INTERVAL_1MINUTE, "1 hour ago UTC"
)
df = pd.DataFrame(klines, columns=[
'timestamp', 'open', 'high', 'low', 'close', 'volume',
'close_time', 'quote_asset_volume', 'number_of_trades',
'taker_buy_base', 'taker_buy_quote', 'ignore'
])
df['close'] = pd.to_numeric(df['close'])
df['short_ma'] = df['close'].rolling(window=short_window).mean()
df['long_ma'] = df['close'].rolling(window=long_window).mean()
last_row = df.iloc[-1]
prev_row = df.iloc[-2]
# Сигнал на покупку: короткая MA пересекает длинную снизу вверх
if prev_row['short_ma'] < prev_row['long_ma'] and last_row['short_ma'] > last_row['long_ma']:
return 'BUY'
# Сигнал на продажу: короткая MA пересекает длинную сверху вниз
elif prev_row['short_ma'] > prev_row['long_ma'] and last_row['short_ma'] < last_row['long_ma']:
return 'SELL'
return 'HOLD'
Шаг 7: bot.py — основной бот
python
from binance.client import Client
from binance import ThreadedWebsocketManager
import time
from config import API_KEY, API_SECRET, SYMBOL, QUANTITY
from strategy import moving_average_strategy
# Подключение к Binance (для тестов — используйте testnet=True)
client = Client(API_KEY, API_SECRET, testnet=True) # testnet=True для тестов
def handle_socket_message(msg):
if msg['e'] == 'error':
print(f"Ошибка: {msg['m']}")
return
price = float(msg['k']['c']) # текущая цена закрытия свечи
print(f"Текущая цена {SYMBOL}: {price}")
# Проверяем стратегию каждую минуту
signal = moving_average_strategy(client, SYMBOL)
if signal == 'BUY':
try:
order = client.create_order(
symbol=SYMBOL,
side='BUY',
type='MARKET',
quantity=QUANTITY
)
print(f"Куплено {QUANTITY} {SYMBOL} по рынку")
except Exception as e:
print(f"Ошибка покупки: {e}")
elif signal == 'SELL':
try:
order = client.create_order(
symbol=SYMBOL,
side='SELL',
type='MARKET',
quantity=QUANTITY
)
print(f"Продано {QUANTITY} {SYMBOL} по рынку")
except Exception as e:
print(f"Ошибка продажи: {e}")
def main():
twm = ThreadedWebsocketManager(api_key=API_KEY, api_secret=API_SECRET, testnet=True)
twm.start()
twm.start_kline_socket(
callback=handle_socket_message,
symbol=SYMBOL,
interval=Client.KLINE_INTERVAL_1MINUTE
)
print(f"Бот запущен. Отслеживание {SYMBOL}...")
while True:
time.sleep(1) # держим поток живым
if __name__ == '__main__':
main()
Шаг 8: Запуск бота
bash
python bot.py
Вы увидите поток цен и сообщения о сделках (на Testnet).
Дополнительные улучшения
ФункцияКак добавитьЛогированиеimport logging + запись в файлУправление рискамиStop-loss, Take-profit, % от депозитаБэктестингbacktrader или vectorbtУведомленияTelegram, emailРазвёртываниеVPS (DigitalOcean, AWS), Docker
Безопасность
- Никогда не коммитьте API-ключи в Git
- Используйте .env + .gitignore
- Ограничьте IP в настройках API
- Отключите вывод средств
Полезные ссылки
Заключение
Вы только что создали полноценного торгового бота за 7 шагов! Это база — дальше вы можете:
- Добавить ИИ (ML-модели)
- Использовать арбитраж
- Торговать фьючерсами
- Создать веб-интерфейс
Помните: 90% ботов теряют деньги. Главное — тестирование, дисциплина и управление рисками.
Готов к запуску?
Склонируйте этот шаблон, настройте Testnet и начните экспериментировать!
bash
git clone https://github.com/yourname/binance-trading-bot
Удачи в трейдинге! 🚀