ByBit API + Python. Торговый бот на python, гайд по автоматизации сделок

С помощью Python можно создавать программы и скрипты, которые будут выполнять ваши торговые правила, а значит — упростят и облегчат работу и усилят торговую стратегию. Разбираем на примере с кодом, как сделать торгового бота на питоне, и как открывать и закрывать лимитные ордера в ByBit с Python.
Когда вы установите правила торговли в Bybit с помощью Python , ваш скрипт будет автоматически открывать и закрывать сделки согласно этим правилам. Также через скрипты можно настроить выставление стоп-лоссов, прибыльные уровни и другие параметры. В этой статье поговорим именно об ордерах.
Алгоритм действий для создания биржевого робота на питоне такой: сначала устанавливаем нужные библиотеки, затем выбираем способ исполнения ордеров и прописываем функции для размещения ордеров.
Шаг 1. Трейдинг бот на python: импортируем библиотеки
Библиотеки нам нужны для работы с API Bybit. Мы будем использовать pybit A — облегченный универсальный модуль для API Bybit HTTP и WebSocket. Pybit использует requests и websocket-client для своих методов наряду с другими встроенными модулями. Модуль может быть установлен вручную или через PyPI с pip: pip install pybit.
Функция для импорта библиотек:
1 2 3 4 5 6 7 8 9 | import pandas as pd import numpy as np import pybit from pybit.unified_trading import HTTP import uuid |
Шаг 2. Выбираем стратегию исполнения ордеров
На платформе Bybit есть три способа исполнения ордеров «по времени действия» (time in force):
- GTC (Good ‘Til Canceled) — ордер будет активным и открытым вплоть до его исполнения или отмены трейдером вручную. Подойдет тем, кто может дождаться завершения всех сделок по указанной цене и гибко отменять незаключенные контракты независимо от времени.
- OK (Fill or Kill) — ордер исполняется полностью по стоимости заказа или выше или отменяется. Стратегия используют скальпирующие или дневные трейдеры, которые находятся в поиске краткосрочной выгоды на рынке.
- IOC (Immediate or Cancel) — ордер исполняется мгновенно, частично или полностью. Ордера, которые не проданы по указанной стоимости, аннулируются. Стратегию используют, чтобы избежать исполнения крупных ордеров по цене, отличающейся от идеальной.
Выбор стратегии зависит от торговых целей и условий рынка. GTC — самая распространенная стратегия, она позволяет сохранять ордер открытым до его выполнения. FOK и IOC подойдут, когда нужно получить мгновенное или частичное исполнение ордера.
Шаг 3. Определяем правила торговли для лимитного ордера
Лимитный ордер размещается с конкретной ценой, по которой мы планируем купить или продать актив. Перед размещение лимитного ордера важно выставить его параметры. Это поможет нам контролировать цену и тайминг ордера.
Функция для определения параметров лимитного ордера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CATEGORY = "spot" SYMBOL = "BTCUSDT" SIDE = "Buy" ORDER_TYPE = "Limit" QTY = "0.001" PRICE = "1700" TIME_IN_FORCE = "GTC" ORDER_LINK_ID = str (uuid.uuid4()) REDUCE_ONLY = False |
Пояснение параметров:
- CATEGORY — форма сделки;
- SYMBOL — название актива/торговой пары;
- SIDE — покупка или продажа;
- ORDER_TYPE — тип ордера;
- QTY — количество заказа;
- PRICE — цена;
- TIME_IN_FORCE — определяет, как долго ордер будет оставаться действительным, прежде чем автоматически отменится;
- REDUCE_ONLY — идентификатор ссылки на ордер, показывает отсутствие take profit и stop loss.
Шаг 4. Создаем HTTP-сессию
Чтобы разместить один ордер, нам нужно написать функцию создания HTTP-сессии, в которой мы подключаемся к нашему аккаунту Bybit. HTTP-сеанс позволяет установить постоянное соединение между приложением на Python и Bybit через API. Сессия служит для отправки запросов к API и получения ответов от него.
Функция для создания HTTP-сессии:
1 2 3 4 5 6 7 | session = HTTP testnet = False api_key = "api_key" , api_secret = "api_secret" |
Пояснение параметров:
- testnet — альтернативная, «пробная» версия блокчейна, некий черновик проекта. Валюта Testnet не имеет реальной стоимости и позволяет проводить эксперименты и тестировать разные идеи.
- api_key — уникальный идентификатор, который вы получаете при создании API-ключа на платформе Bybit. Ключ нужен для идентификации приложения или скрипта в Bybit.
Размещаем одиночный лимитный ордер
Функция для размещения нового лимитного ордера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | def place_new_limit_order(category, symbol, side, orderType, qty, price, timeInForce, orderLinkId, reduceOnly): new_limit_order = session.place_order( category = category, symbol = symbol, side = side, orderType = orderType, qty = qty, price = price, timeInForce = timeInForce, orderLinkId = orderLinkId, reduceOnly = reduceOnly, ) return (new_limit_order) |
Шаг 5. Определяем правила торговли для рыночного ордера
Теперь создаем функцию для рыночного ордера, который предназначен для мгновенного исполнения по текущей рыночной цене.
Функция для определения параметров рыночного ордера:
1 2 3 4 5 6 7 8 9 10 11 12 13 | SYMBOL_1 = "ETHUSDT" , SIDE_1 = "Buy" , ORDER_TYPE_1 = "Market" , QTY_1 = "0.01" , TIME_IN_FORCE_1 = "FOK" , CLOSE_ON_TRIGGER_1 = False , POSITION_IDX_1 = 1 # hedge-mode Buy side |
Пояснение параметров:
- SYMBOL_1 — название актива/торговой пары для ордера;
- SIDE_1 — покупка или продажа;
- ORDER_TYPE_1 — тип ордера;
- QTY_1 — # количество заказа;
- TIME_IN_FORCE_1 — определяет, как долго ордер будет оставаться действительным, прежде чем он автоматически отменится;
- CLOSE_ON_TRIGGER_1 — команда «закрыть по триггеру» гарантированно закрывает ордер независимо от маржинальных требований.
Шаг 6. Размещаем одиночный рыночный ордер
Функция для размещения нового рыночного ордера:
1 2 3 4 5 6 7 8 9 10 11 12 | def place_new_market_order(category, symbol, side, orderType, qty, timeInForce, closeOnTrigger, positionIdx): new_market_order = session.place_order( category = category, symbol = symbol, side = side, orderType = orderType, qty = qty, timeInForce = timeInForce, closeOnTrigger = closeOnTrigger, positionIdx = positionIdx, ) return (new_market_order) |
Шаг 7. Размещаем несколько ордеров
На Bybit можно разместить несколько ордеров с помощью Python, используя данные из библиотеки JSON. Здесь указан пример обработки JSON и использования библиотеки requests для открытия и закрытия ордеров.
Функция для открытия нескольких ордеров одновременно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | def create_order(category, symbol, side, orderType, price, qty, timeInForce, orderLinkId): new_order = session.place_order( category = category, symbol = symbol, side = side, orderType = orderType, qty = qty, timeInForce = timeInForce, orderLinkId = orderLinkId, ) print (new_order) orders = [ { "category" : "Spot" , "symbol" : "BTCUSD" , "side" : "Buy" , "orderTtype" : "Limit" , "price" : 50000 , "qty" : 0.001 , "timeInForce" : "GTC" , "orderLinkId" : str (uuid.uuid4())}, { "category" : "Spot" , "symbol" : "ETHUSD" , "side" : "Buy" , "orderType" : "Market" , "price" : None , "qty" : 0.005 , "timeInForce" : "FOK" , "orderLinkId" : str (uuid.uuid4())}, ] for order in orders: print (create_order(order[ "symbol" ], order[ "side" ], order[ "order_type" ], order[ "price" ], order[ "qty" ], order[ "timeInForce" ], order[ "orderLinkId" ] )) |
Заключение: торговый робот на python
Использование Python для автоматической торговли на Bybit с помощью библиотеки pybit позволяет автоматически открывать и закрывать сделки. Вы подключаетесь к API Bybit и пишете скрипты для выполнения торговых стратегий.
Для этого нужно заранее определить правила торговли и параметры ордеров (тип, цена, количество). С помощью функций place_new_limit_order и place_new_market_order можно размещать ордера на рынке.
Еще можно создать скрипт, который будет размещать несколько ордеров одновременно с помощью данных из JSON и функции create_order. Это помогает торговать сразу несколькими активами или стратегиями, улучшая торговлю.