Пн. Апр 22nd, 2024

Скачать библиотеку можно с Github по ссылке — https://github.com/binance/binance-futures-connector-python/archive/refs/heads/main.zip

Это библиотека небольшого размера, выполняющая функцию связующего звена с общедоступным API Binance Futures.

Поддерживаемые API:

  • USDT-M Futures /fapi/*
  • COIN-M Delivery /dapi/*
  • Futures/Delivery Websocket Market Stream
  • Futures/Delivery User Data Stream Библиотека включает примеры, предлагает возможность настройки базового URL и таймаута запроса, и дает возможность отображения метаданных ответа.

Установка:

pip install binance-futures-connector

Примеры использования RESTful API:

from binance.cm_futures import CMFutures

cm_futures_client = CMFutures()

# получить серверное время
print(cm_futures_client.time())

cm_futures_client = CMFutures(key='<api_key>', secret='<api_secret>')

# Получить информацию об аккаунте
print(cm_futures_client.account())

# Создать новый заказ
params = {
    'symbol': 'BTCUSDT',
    'side': 'SELL',
    'type': 'LIMIT',
    'timeInForce': 'GTC',
    'quantity': 0.002,
    'price': 59808
}

response = cm_futures_client.new_order(**params)
print(response)

Больше примеров можно найти в папке examples.

Аутентификация: Binance поддерживает аутентификацию HMAC и RSA.

# Аутентификация HMAC
client = Client(api_key, api_secret)
print(client.account())

# Аутентификация RSA
key = ""
with open("/Users/john/private_key.pem", "r") as f: # Расположение файла с приватным ключом
    private_key = f.read()
private_key_passphrase = "" # Опционально: используется только для зашифрованного RSA ключа

client = Client(key=key, private_key=private_key, private_key_passphrase=private_key_passphrase)
print(client.account())

Подробности смотрите в examples/um_futures/trade/get_account.py или examples/cm_futures/trade/get_account.py.

Базовый URL: Если base_url не указан, то для USDT-M Futures используется fapi.binance.com по умолчанию, для COIN-M Delivery — dapi.binance.com. Несмотря на это, рекомендуется указывать параметр base_url, так как Binance предлагает альтернативные URL.

Необязательные параметры: Несмотря на то что PEP8 предлагает использовать строчные буквы с словами, разделенными подчеркиваниями, для этой библиотеки необходимо следовать точному названию параметров, указанным в документации API.

# Распознанное название параметра
response = client.query_order('BTCUSDT', orderListId=1)

# Нераспознанное название параметра
response = client.query_order('BTCUSDT', order_list_id=1)

Параметр RecvWindow

Этот дополнительный параметр доступен для конечных точек, требующих подписи. По умолчанию он равен 5000 (миллисекунд) и может быть любым значением меньше 60000 (миллисекунд). Значение, превышающее этот лимит, вызовет ошибку со стороны сервера Binance.

from binance.cm_futures import CMFutures

cm_futures_client = CMFutures(key='<api_key>', secret='<api_secret>')
response = cm_futures_client.query_order('BTCUSDT', orderId=11, recvWindow=10000)

Таймаут

Параметр таймаут может быть задан в секундах, что соответствует ожидаемому времени ответа сервера. Обратите внимание, что его значение не отображается в сообщении об ошибке при превышении таймаута. По умолчанию таймаут не установлен, и запросы не истекают.

from binance.cm_futures import CMFutures

client= CMFutures(timeout=1)

Прокси

Поддерживается использование прокси.

from binance.cm_futures import CMFutures

proxies = { 'https': 'http://1.2.3.4:8080' }

client= CMFutures(proxies=proxies)

Метаданные ответа

Сервер API Binance предоставляет данные о использовании весов в заголовках каждого ответа. Вы можете отобразить их, инициализировав клиента с параметром show_limit_usage=True.

from binance.cm_futures import CMFutures

client = CMFutures(show_limit_usage=True)
print(client.time())

Результат:

{'limit_usage': {'x-mbx-used-weight-1m': '1'}, 'data': {'serverTime': 1653563092778}}

Вы также можете отобразить полные метаданные ответа для помощи в отладке:

client = Client(show_header=True)
print(client.time())

Результат:

{'data': {'serverTime': 1587990847650}, 'header': {'Context-Type': 'application/json;charset=utf-8', ...}}

Если получена ошибка ClientError, она будет отображать полную метаинформацию ответа.

Логи

Установка уровня логирования на DEBUG приведет к записи URL-адреса запроса, полезной нагрузки и текста ответа.

Ошибка

Библиотека может вернуть два типа ошибок:

  • binance.error.ClientError Выбрасывается, когда сервер возвращает 4XX, это проблема с клиентской стороны. Он имеет 4 свойства:
    • status_code — HTTP статус-код
    • error_code — Код ошибки сервера, например, -1102
    • error_message — Сообщение об ошибке сервера, например, Неизвестный заказ отправлен.
    • header — Полный заголовок ответа.
  • binance.error.ServerError Выбрасывается, когда сервер возвращает 5XX, это проблема со стороны сервера.

Websocket

Connector v4

WebSocket можно установить через следующие соединения:

# Клиент потока WebSocket
import time
from binance.websocket.um_futures.websocket_client import UMFuturesWebsocketClient

def message_handler(_, message):
    logging.info(message)

my_client = UMFuturesWebsocketClient(on_message=message_handler)

# Подписка на поток одного символа
my_client.agg_trade(symbol="bnbusdt")
time.sleep(5)
logging.info("закрываем соединение ws")
my_client.stop()

ID запроса

Клиент может назначить идентификатор запроса каждому запросу. ID запроса будет возвращен в ответном сообщении. Не является обязательным в библиотеке, генерируется строка в формате uuid, если не предоставлено.

# id, предоставленный клиентом
my_client.agg_trade(symbol="bnbusdt", id="my_request_id")

# библиотека сгенерирует случайную строку uuid
my_client.agg_trade(symbol="bnbusdt")

Совмещенные потоки

Если вы установите is_combined в True, «/stream/» будет добавлено к baseURL для объединения потоков. По умолчанию is_combined равно False и «/ws/» (сырые потоки) будет добавлено к baseURL. Больше примеров websocket доступно в папке с примерами.

Websocket < v4

import time
from binance.websocket.um_futures.websocket_client import UMFuturesWebsocketClient

def message_handler(message):
    print(message)

my_client = UMFuturesWebsocketClient(on_message=message_handler)

# Подписка на поток одного символа
my_client.agg_trade(symbol="bnbusdt")
time.sleep(5)
print("закрываем соединение ws")
my_client.stop()

Heartbeat

После подключения сервер websocket отправляет пинг-фрейм каждые 3 минуты и требует ответный понг-фрейм обратно в течение 10 минут. Этот пакет автоматически обрабатывает ответы pong.

От admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

PHP Code Snippets Powered By : XYZScripts.com