🐍 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.
Функция для импорта библиотек:
import pandas as pd
import numpy as np
import pybit
from pybit.unified_trading import HTTP
import uuid
Трейдинг с Python: автоматизация, анализ и прибыльные стратегии
Если вы хотите использовать Python для трейдинга, подписывайтесь на наш телеграм-канал Trade2Good.
О чем рассказываем на канале:
▪️ Создание алгоритмических стратегий на Python
▪️ Анализ рыночных данных с помощью pandas, NumPy и matplotlib
▪️ Построение и тестирование торговых ботов
▪️ Обработка данных в реальном времени и визуализация трендов
▪️ Инструменты для автоматизации торговли и оптимизации решений
Научитесь применять программирование для анализа рынков и создавайте стратегии, которые работают
Шаг 2. Выбираем стратегию исполнения ордеров
На платформе Bybit есть три способа исполнения ордеров «по времени действия» (time in force):
- GTC (Good ‘Til Canceled) — ордер будет активным и открытым вплоть до его исполнения или отмены трейдером вручную. Подойдет тем, кто может дождаться завершения всех сделок по указанной цене и гибко отменять незаключенные контракты независимо от времени.
- OK (Fill or Kill) — ордер исполняется полностью по стоимости заказа или выше или отменяется. Стратегия используют скальпирующие или дневные трейдеры, которые находятся в поиске краткосрочной выгоды на рынке.
- IOC (Immediate or Cancel) — ордер исполняется мгновенно, частично или полностью. Ордера, которые не проданы по указанной стоимости, аннулируются. Стратегию используют, чтобы избежать исполнения крупных ордеров по цене, отличающейся от идеальной.
Выбор подходящей стратегии зависит от торговых целей и условий рынка. GTC — самая распространенная стратегия, которая позволяет сохранять ордер открытым до его выполнения. FOK и IOC подойдут в ситуациях, когда нужно получить мгновенное исполнение ордера или контролировать частичное исполнение.
Шаг 3. Определяем правила торговли для лимитного ордера
Лимитный ордер размещается с конкретной ценой, по которой мы планируем купить или продать актив. Перед размещение лимитного ордера важно выставить его параметры. Это поможет нам контролировать цену и тайминг ордера.
Функция для определения параметров лимитного ордера:
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-сессии:
session = HTTP
testnet=False
api_key=»api_key»,
api_secret=»api_secret»
Пояснение параметров:
- testnet — это альтернативная, «пробная» версия блокчейна, некий «черновик» проекта. Валюта Testnet не имеет реальной стоимости и позволяет проводить эксперименты и тестировать разные идеи.
- api_key — уникальный идентификатор, который вы получаете при создании API-ключа на платформе Bybit. Ключ нужен для идентификации приложения или скрипта в Bybit.
Размещаем одиночный лимитный ордер
Функция для размещения нового лимитного ордера:
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. Определяем правила торговли для рыночного ордера
Теперь создаем функцию для рыночного ордера, который предназначен для мгновенного исполнения по текущей рыночной цене.
Функция для определения параметров рыночного ордера:
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. Размещаем одиночный рыночный ордер
Функция для размещения нового рыночного ордера:
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 для открытия и закрытия ордеров.
Функция для открытия нескольких ордеров одновременно:
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. Это помогает торговать сразу несколькими активами или стратегиями, улучшая торговлю.