September 23

Aster Delta Neutral Bot

Этот софт предназначен для открытия нейтральных позиций на множестве аккаунтов Aster. Например, когда 3 аккаунта открыты в лонг и 4 в шорт, общий баланс токенов остаётся нулевым, что создаёт нейтральную позицию. Количество лонг и шорт аккаунтов всегда одинаково или отличается максимум на один, однако объёмы токенов на каждом аккаунте могут различаться.

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

Настройка бота

  1. Качаем репозиторий: git clone https://github.com/Pastfin/Aster-delta-neutral-bot
  2. Открываем папку через VSC и устанавливаем зависимости через команду pip install -r requirements.txt
  3. Далее мы будем заполнять несколько нужных обязательных файлов:
  • data/api_keys.txt
  • data/config.json

Остальные файлы в data/ не трогаем.

data/api_keys.txt

  1. Генерируем API ключ: https://www.asterdex.com/en/api-management
  2. Записываем в api_keys.txt следующий формат, каждый аккаунт новая строка

{apikey}:{apisecret}:{ip}:{port}:{log}:{pwd}

Пример записи:

ab91f6e0d734b218c92fa11c4d9a52f9e8a17362e6e2c8f5c3f3a214bc89d72a:7f43d2a9bcf1d8e94520b33c67e9ad104e55d46d22a17f53e0d8a129cbb47119:178.45.210.88:5183:kuprezta:mqn65zd47ut1

data/config.json

order_value_usd

Средний объём позиции, открываемой одним аккаунтом. Например, если указаны значения min = 200 USD и max = 300 USD, то могут быть выбраны 2 аккаунта с лонг-позициями по 300 USD и 3 аккаунта с шорт-позициями по 200 USD. Важно учитывать, что софт использует случайные значения в этом диапазоне, поэтому суммы не обязательно будут круглыми и могут быть меньше минимального значения, указанного в конфиге.

accounts_per_trade

Количество аккаунтов, участвующих в одном торговом цикле. Например, если указано 5 аккаунтов, то может быть 3 лонг и 2 шорт. Если 6 аккаунтов — то 3 лонг и 3 шорт. Софт случайным образом выбирает количество аккаунтов в пределах заданного диапазона min и max.

order_duration_min

Продолжительность одной позиции в минутах.

delay_between_trading_cycles_min

Время (в минутах), которое должно пройти перед началом нового торгового цикла с нейтральными позициями.

delay_between_opening_orders_sec

Задержка (в секундах) между открытием отдельных ордеров в одном нейтральном цикле. Например, если используется 5 аккаунтов, то бот сначала открывает лонг на одном аккаунте, ждёт указанное время, затем открывает шорт и так далее.

ltv_checks_sec

Частота проверки LTV сделки (в секундах). Софт берёт актуальную цену токена с Aster и сравнивает её с ценой ликвидации для определения уровня риска. Примечание: цена ликвидации берётся один раз в начале, далее в цикле обновляется только маржинальная цена (mark price).

max_leverage

Ограничение на максимальное значение позиции в USD для подстраховки, если баланс USDC на аккаунте недостаточен. Например, при max_leverage = 2 и балансе на аккаунте 200 USD, максимальная позиция будет 400 USD. Реальный размер позиции определяется параметром order_value_usd, а этот параметр используется только для предотвращения превышения допустимого плеча.

max_position_ltv

Порог LTV, который софт мониторит на протяжении сделок. Проверка выполняется каждые ltv_checks_sec. Если хотя бы на одном аккаунте достигается критический уровень LTV, бот закрывает все нейтральные позиции и завершает работу, чтобы пользователь мог скорректировать маржу.

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

  • Если позиция в SELL, LTV вычисляется как current_price / liq_price * 100.
  • Если позиция в BUY, LTV вычисляется как liq_price / current_price * 100.

orders_distribution_noise

Показатель случайности распределения позиций. Чем выше значение, тем больше разница в размерах позиций.

  • Пример: Если orders_distribution_noise = 0, то распределение будет равномерным (1, 1, 1 для лонга и шорта).
  • Если orders_distribution_noise = 0.15, распределение будет более случайным (0.9, 0.8, 1.3).

Этот параметр можно не изменять, если тебя устраивает равномерное распределение.

retries

Максимальное количество попыток выполнения одного действия в случае неудачи. Например, если сделка не открылась или не закрылась с первого раза, софт предпримет дополнительные попытки в пределах указанного числа.

markets

Пары, которые будут торговаться. Выбираются случайным образом.

collateral_symbol

В чем держите свой коллатерал для фьючерсов. В софте используется для измерения размера ордера.

debug_level

Уровень логирования.

  • "INFO" — стандартный режим использования.
  • "DEBUG" — детализированный режим для отладки, когда возникают проблемы с кодом. Логи на уровне DEBUG записываются в потенциально проблемных участках кода для упрощения поиска ошибок.

Функционал бота при запуске

Start trading
Открывает позиции на указанных аккаунтах. Перед открытием проверяется, что на аккаунте нет активных позиций — если позиция уже открыта, софт завершает работу. На одном аккаунте может быть только одна активная позиция одновременно.

Accounts overview

Выводит фьючерсный баланс и открытые позиции.

Close all open positions
Закрывает все активные позиции на всех аккаунтах.

Step by step

  1. Скачиваем софт с гитхаба.
  2. Устанавливаем библиотеки.
  3. Заполняем все файлы, которые указаны в инструкции выше. Сначала тестируем с позициями по 50-100$.
  4. Запускаем софт и выбираем пункт 1: Start trading. запуск через команду python main.py
  5. Проверяем в логах и UI вручную, что нет никаких проблем. После запуска пункта "Start trading" выполняются базовые проверки ваших файлов и прокси.
  6. Чтобы остановить процесс, останавливаем софт, запускаем его заново и выбираем пункт: Close all currently open positions.

Хорошего использования!

TG канал: https://t.me/PastFinCoding