Сайт находится в процессе разработки
Войти
Главная / Data science в трейдинге / Открываем и закрываем сделки в Bybit автоматически с помощью Python: пошаговый гайд

Открываем и закрываем сделки в Bybit автоматически с помощью Python: пошаговый гайд

С помощью Python можно создавать программы и скрипты, которые будут выполнять ваши торговые правила, а значит — упростят и облегчат вашу работу, усилят торговую стратегию. Разбираем на примере с кодом, как открывать и закрывать лимитные ордера в ByBit с Python. 

Когда вы установите правила торговли в Bybit с помощью 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


Выбираем стратегию исполнения ордеров

На платформе Bybit есть три способа исполнения ордеров «по времени действия» (time in force): 


  • GTC (Good ‘Til Canceled) — ордер будет активным и открытым вплоть до его исполнения или отмены трейдером вручную. Подойдет тем, кто может дождаться завершения всех сделок по указанной цене и гибко отменять незаключенные контракты независимо от времени. 


  • OK (Fill or Kill) — ордер исполняется полностью по стоимости заказа или выше  или отменяется. Стратегия используют скальпирующие или дневные трейдеры, которые находятся в поиске краткосрочной выгоды на рынке. 


  • IOC (Immediate or Cancel) — ордер исполняется мгновенно, частично или полностью. Ордера, которые не проданы по указанной стоимости, аннулируются. Стратегию используют, чтобы избежать исполнения крупных ордеров по цене, отличающейся от идеальной. 


Выбор подходящей стратегии зависит от торговых целей и условий рынка. GTC — самая распространенная стратегия, которая позволяет сохранять ордер открытым до его выполнения. FOK и IOC подойдут в ситуациях, когда нужно получить мгновенное исполнение ордера или контролировать частичное исполнение.


Определяем правила торговли для лимитного ордера

Лимитный ордер размещается с конкретной ценой, по которой мы планируем купить или продать актив. Перед размещение лимитного ордера важно выставить его параметры. Это поможет нам контролировать цену и тайминг ордера.


Функция для определения параметров лимитного ордера:

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.


    Больше о типах ордеров мы рассказывали в этой статье

Создаем 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)


Определяем правила торговли для рыночного ордера

Теперь создаем функцию для рыночного ордера, который предназначен для мгновенного исполнения по текущей рыночной цене. 

Функция для определения параметров рыночного ордера: 

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 — команда «закрыть по триггеру» гарантированно закрывает ордер независимо от маржинальных требований.


Размещаем одиночный рыночный ордер

Функция для размещения нового рыночного ордера:

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)

Здесь мы рассказывали, как написать индикатор Bollinger Bands на Python

Размещаем несколько ордеров

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

Роботы на бирже: как устроена высокочастотная торговля
Высокочастотный трейдинг привлекает сегодня как частных трейдеров, так и крупные инвестиционные компании и хедж-фонды. Биржевые роботы дают возможность за считанные...
Читать далее
Обзор инструментов для тестирования стратегий
  В наших материалах мы уже рассказывали, как составлять бизнес-план, тестировать уровни, оценивать свои силы и способности как трейдера. Теперь...
Читать далее
Психологические ловушки для трейдера (и как их избежать)
Трейдинг — не только анализ графиков и чисел, но и интенсивная психологическая борьба. Психологические ловушки подстерегают трейдеров на каждом шагу:...
Читать далее