Задача: реализация максимально быстрого расчета и открытие ордера на бирже ByBit
Подготовка данных
Парсим все токены на бирже байбит (spot / futures, раздельно), список обновляется раз в 5 минут по крону.
Подключаемся по сокету к каждой монете и собираем в реалтайме тики (изменение ордер бука) и сделки.
Отправляем это все в викторию метрикс, данные до 5 мин – храним в оперативной памяти
Отдельно для спота, отдельно для фючерсов собираем актуальный ордер бук самостотельно по тикам
Рвсчет данных для сделки
Считаем динамику изменения цены по VOLUME.
Для этого бебрем среднюю цену для асков (для открытия лонга) в эквиваленте обьемов:
1 000$, 5 000$ (шаг в виде массива задаваться в настройках)
Сравниваем со средним значением по сделкам за последние 60 и 300 сек
Сравниваем со средним значением асков (на тот же обьем) по истории ордербуков.
На выходе получаем массив [price_difference_60s]
1000$ - 5.86%
5000$ - 6.12%
Делаем проверку, если на обьеме 1000$ delta в цене меньше 10% (PRICE_CHANGE_DELTA_60S = 10), тогда продолжаем логику\покупку.
Расчет данных слипажа для определения сайза.
Используя заданную константу (MAX_SLIPPAGE_PERCENT = 5) добавлялем построчно аски, пока не достигнем нужного предела в >5%
Умножаем волум на цену в стакане, чтобы расчитать доступный volume в стакане с учетом предельного слипажа.
Используем переменную из конфига (MAX_POSITION_SIZE_IN_USD = 10000) для окончательно расчета сайза. Например в ордербуке в аска доступный волум 8500$ со слипажем <5%, значит это наш размер позиции 8500$, если обьем доступный >10000$, тогда наш размер позиции будет 10 000$ (взят из MAX_POSITION_SIZE_IN_USD)
Открытие сделки
Отправляем на вебсокете и через rest api лимитные ордера и ценой асков +5% к цене (взято из MAX_SLIPPAGE_PERCENT) и параметр IOC (immediantly or cancel).
Вместе с ордером устанавливается stop loss/take profit по 33% сайза на рост +10%, +20%, +30%
Стоп лосс устанавливается на -10% от первого аска в стакане.
Передавать в ордер orderLinkId и "smpType": "CancelTaker" для корректной работы скрипта при параллельном запуске на нескольких серверах.
Важно продумать систему реконнектов, ретраев, логов и алертов
Warm_up_mode, раз в 30 секунд отправлять “фейк” ордер на биржу для поддержания активности.
Система генерации ja3 finger prints
Задача не простая, требует полного вовлечения, поэтому если у вас пару часов времени в день - не подходит. Нужен человек с полным погружением в вопрос.