ByBit API + Python. Полный гайд по автоматизации сделок и ускорению торговли
С помощью Python можно создавать программы и скрипты, которые будут выполнять ваши торговые правила, а значит — упростят и облегчат вашу работу, усилят торговую стратегию. Разбираем на примере с кодом, как открывать и закрывать лимитные ордера в ByBit с Python.
Когда вы установите правила торговли в Bybit с помощью Python , ваш скрипт будет автоматически открывать и закрывать сделки согласно этим правилам. Также через скрипты можно настроить выставление стоп-лоссов, прибыльные уровни и другие параметры. В этой статье поговорим именно об ордерах.
Алгоритм действий такой: сначала устанавливаем нужные библиотеки, затем выбираем способ исполнения ордеров и прописываем функции для размещения ордеров.
Шаг 1. Импортируем библиотеки
Библиотеки нам нужны для работы с 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
Шаг 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»] ))
Как написать торгового робота в MetaTrader: пошаговая инструкция
Заключение
Использование Python для автоматического открытия и закрытия сделок в Bybit может значительно упростить и ускорить вашу торговлю. С помощью библиотеки pybit можно подключиться к API Bybit и писать программы и скрипты, которые будут автоматически выполнять ваши торговые стратегии.
При разработке скриптов нужно заранее определить правила торговли и параметры ордеров, такие как тип ордера, цена, количество и стратегия исполнения. Затем с помощью функций place_new_limit_order и place_new_market_order ордера можно разместить на рынке.
Также можно написать скрипт, который будет размещать на рынке несколько ордеров одновременно. Для этого используйте данные из библиотеки JSON и функцию create_order. Это позволит вам торговать сразу несколькими активами или разными стратегиями. В целом, использование Python для авто-торговли на Финише может помочь вам принимать лучшие решения на основе заранее определенных правил и стратегий.