Задача: реалізація максимально швидкого розрахунку та відкриття ордера на біржі 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
Задача не проста, вимагає повного залучення, тому якщо у вас пару годин часу в день - не підходить. Потрібен людина з повним зануренням у питання.