Вот пример закрытия позиции на счете с изолированной маржой, но он не работает. Пожалуйста, помогите ЗАКРЫТЬ открытые маржинальные позиции и погасить маржинальный кредит. Не удалось найти правильный пример позиции закрытия маржи (без фьючерсов) в официальной документации binance-api. Вот полный код ниже. Постарайтесь привести примеры.
from binance.client import Client
from binance.enums import *
from colorama import Fore, init
from decimal import Decimal
import time
# Инициализация Colorama
init(autoreset=True)
# Ваши API-ключи
api_key = "Ваш_API_KEY"
api_secret = "Ваш_API_SECRET"
# Создание клиента Binance
client = Client(api_key, api_secret)
def get_symbol_filters(symbol):
"""Получает фильтры торговой пары."""
try:
symbol_info = client.get_symbol_info(symbol)
filters = {f['filterType']: f for f in symbol_info['filters']}
return filters
except Exception as e:
print(Fore.RED + f"❌ Ошибка получения фильтров для {symbol}: {e}")
return {}
def round_quantity(quantity, step_size):
"""Округляет количество до допустимого значения (LOT_SIZE)."""
step_size = Decimal(step_size)
return (Decimal(quantity) // step_size) * step_size
def get_open_position(symbol):
"""Получает данные о текущей позиции."""
try:
margin_account = client.get_isolated_margin_account()
for asset in margin_account['assets']:
if asset['symbol'] == symbol:
base_asset = asset['baseAsset']
quote_asset = asset['quoteAsset']
return {
"base_free": Decimal(base_asset['free']),
"base_borrowed": Decimal(base_asset['borrowed']),
"quote_free": Decimal(quote_asset['free']),
"quote_borrowed": Decimal(quote_asset['borrowed']),
"base_asset": base_asset['asset'],
"quote_asset": quote_asset['asset']
}
print(Fore.YELLOW + f"⚠️ Позиция для {symbol} не найдена.")
return None
except Exception as e:
print(Fore.RED + f"❌ Ошибка получения позиций: {e}")
return None
def close_margin_position(symbol, side, quantity):
"""Закрывает маржинальную позицию (LONG/SHORT)."""
try:
side_type = SIDE_SELL if side == "LONG" else SIDE_BUY
filters = get_symbol_filters(symbol)
lot_size_filter = filters.get('LOT_SIZE', {})
min_qty = Decimal(lot_size_filter.get('minQty', '0'))
step_size = Decimal(lot_size_filter.get('stepSize', '1'))
quantity = round_quantity(quantity, step_size)
if quantity < min_qty:
print(Fore.YELLOW + f"ℹ️ Количество {quantity} меньше минимального LOT_SIZE ({min_qty}). Пропуск.")
return False
print(Fore.YELLOW + f"Попытка закрыть {side} позицию ({quantity} {symbol})...")
client.create_margin_order(
symbol=symbol,
side=side_type,
type=ORDER_TYPE_MARKET,
quantity=float(quantity),
isIsolated='TRUE'
)
print(Fore.GREEN + f"✅ Успешно закрыта {side} позиция для {symbol}.")
return True
except Exception as e:
print(Fore.RED + f"❌ Ошибка при закрытии {side} позиции: {e}")
return False
def repay_margin_loan(symbol, asset, amount):
"""Возвращает заемные средства."""
try:
repay_amount = Decimal(amount)
available_balance = Decimal(client.get_asset_balance(asset)['free'])
if repay_amount > available_balance:
print(Fore.YELLOW + f"⚠️ Недостаточно средств для возврата {amount} {asset}. Доступно: {available_balance}.")
repay_amount = available_balance
if repay_amount == 0:
print(Fore.YELLOW + f"⚠️ Невозможно вернуть {asset}, баланс равен нулю.")
return False
print(Fore.YELLOW + f"Возврат {repay_amount} {asset} для {symbol}...")
client.repay_margin_loan(
asset=asset,
amount=str(repay_amount),
symbol=symbol,
isIsolated='TRUE'
)
print(Fore.GREEN + f"✅ Успешно возвращено {repay_amount} {asset}.")
return True
except Exception as e:
print(Fore.RED + f"❌ Ошибка при возврате {asset}: {e}")
return False
def close_and_repay(symbol):
"""Закрывает позицию и возвращает заемные средства."""
try:
position = get_open_position(symbol)
if not position:
return
base_free = position['base_free']
base_borrowed = position['base_borrowed']
quote_free = position['quote_free']
quote_borrowed = position['quote_borrowed']
# Закрытие LONG
if base_free > 0:
while base_free > 0:
if close_margin_position(symbol, "LONG", base_free):
time.sleep(3)
base_free = get_open_position(symbol)['base_free']
# Закрытие SHORT
if quote_borrowed > 0:
while quote_borrowed > 0:
if close_margin_position(symbol, "SHORT", quote_borrowed):
time.sleep(3)
quote_borrowed = get_open_position(symbol)['quote_borrowed']
# Возврат долгов
if base_borrowed > 0:
while base_borrowed > 0:
repay_margin_loan(symbol, position['base_asset'], base_borrowed)
time.sleep(3)
base_borrowed = get_open_position(symbol)['base_borrowed']
if quote_borrowed > 0:
while quote_borrowed > 0:
repay_margin_loan(symbol, position['quote_asset'], quote_borrowed)
time.sleep(3)
quote_borrowed = get_open_position(symbol)['quote_borrowed']
print(Fore.GREEN + f"✅ Все операции по {symbol} завершены.")
except Exception as e:
print(Fore.RED + f"❌ Ошибка при обработке {symbol}: {e}")
if __name__ == "__main__":
try:
print(Fore.YELLOW + "Инициализация Binance API...")
client.ping()
print(Fore.GREEN + "✅ Успешное подключение!")
close_and_repay("XRPUSDT")
except Exception as e:
print(Fore.RED + f"❌ Ошибка подключения к Binance API: {e}")
Вот пример закрытия позиции на счете с изолированной маржой, но он не работает. Пожалуйста, помогите ЗАКРЫТЬ открытые маржинальные позиции и погасить маржинальный кредит. Не удалось найти правильный пример позиции закрытия маржи (без фьючерсов) в официальной документации binance-api. Вот полный код ниже. Постарайтесь привести примеры.
Вот пример закрытия позиции на счете с изолированной маржой, но он не работает. Пожалуйста, помогите ЗАКРЫТЬ открытые маржинальные позиции и погасить маржинальный кредит. Не удалось найти правильный пример позиции закрытия маржи (без фьючерсов) в официальной документации binance-api. Вот полный код ниже. Постарайтесь привести примеры. [code]from binance.client import Client from binance.enums import * from colorama import Fore, init from decimal import Decimal import time
# Создание клиента Binance client = Client(api_key, api_secret)
def get_symbol_filters(symbol): """Получает фильтры торговой пары.""" try: symbol_info = client.get_symbol_info(symbol) filters = {f['filterType']: f for f in symbol_info['filters']} return filters except Exception as e: print(Fore.RED + f"❌ Ошибка получения фильтров для {symbol}: {e}") return {}
def round_quantity(quantity, step_size): """Округляет количество до допустимого значения (LOT_SIZE).""" step_size = Decimal(step_size) return (Decimal(quantity) // step_size) * step_size
def get_open_position(symbol): """Получает данные о текущей позиции.""" try: margin_account = client.get_isolated_margin_account() for asset in margin_account['assets']: if asset['symbol'] == symbol: base_asset = asset['baseAsset'] quote_asset = asset['quoteAsset'] return { "base_free": Decimal(base_asset['free']), "base_borrowed": Decimal(base_asset['borrowed']), "quote_free": Decimal(quote_asset['free']), "quote_borrowed": Decimal(quote_asset['borrowed']), "base_asset": base_asset['asset'], "quote_asset": quote_asset['asset'] } print(Fore.YELLOW + f"⚠️ Позиция для {symbol} не найдена.") return None except Exception as e: print(Fore.RED + f"❌ Ошибка получения позиций: {e}") return None
# Закрытие LONG if base_free > 0: while base_free > 0: if close_margin_position(symbol, "LONG", base_free): time.sleep(3) base_free = get_open_position(symbol)['base_free']
# Закрытие SHORT if quote_borrowed > 0: while quote_borrowed > 0: if close_margin_position(symbol, "SHORT", quote_borrowed): time.sleep(3) quote_borrowed = get_open_position(symbol)['quote_borrowed']
# Возврат долгов if base_borrowed > 0: while base_borrowed > 0: repay_margin_loan(symbol, position['base_asset'], base_borrowed) time.sleep(3) base_borrowed = get_open_position(symbol)['base_borrowed']
if quote_borrowed > 0: while quote_borrowed > 0: repay_margin_loan(symbol, position['quote_asset'], quote_borrowed) time.sleep(3) quote_borrowed = get_open_position(symbol)['quote_borrowed']
print(Fore.GREEN + f"✅ Все операции по {symbol} завершены.") except Exception as e: print(Fore.RED + f"❌ Ошибка при обработке {symbol}: {e}")
if __name__ == "__main__": try: print(Fore.YELLOW + "Инициализация Binance API...") client.ping() print(Fore.GREEN + "✅ Успешное подключение!") close_and_repay("XRPUSDT") except Exception as e: print(Fore.RED + f"❌ Ошибка подключения к Binance API: {e}") [/code] Вот пример закрытия позиции на счете с изолированной маржой, но он не работает. Пожалуйста, помогите ЗАКРЫТЬ открытые маржинальные позиции и погасить маржинальный кредит. Не удалось найти правильный пример позиции закрытия маржи (без фьючерсов) в официальной документации binance-api. Вот полный код ниже. Постарайтесь привести примеры.
Я хотел бы знать, как извлечь данные (позиция, имя трейдера, символ и т. д.) из таблицы лидеров Binance с помощью Python и Binance API.
Спасибо за ваши ответы !
Это мой код, который не работает:
from binance.client import Client, AsyncClient...
Я использую библиотеку binance-python для получения последних данных, однако я не могу получить доступ к API binance (конечные точки общедоступны, поэтому учетные данные не требуются)
Ошибка Сообщение:
Traceback (most recent call last):
File...
Я использую Binance TR API для моего торгового бота;
В некоторые дни мой бот работает отлично, и я получаю все данные через WebSocket.
Некоторые дни (или иногда) бот не может получать данные.
Я использую Nodejs в окне 11.
const wsgonder={ method...
Я пишу код Python для выполнения сделок через API DxTrade посредством запросов. На данный момент я могу сделать 90% того, что мне нужно: получить цены, составить список открытых ордеров и позиций, открыть ордера (со стоп-лоссом). Чего я не могу...