Как можно эффективно сравнивать цены на криптовалюты с различных бирж?

Каким образом можно оптимизировать поиск спреда между ценами монет на разных биржах для арбитража? Стоит ли использовать параллельные потоки при сравнении цен на нескольких биржах для этой задачи?
  • 17 июня 2024 г. 12:41
Ответы на вопрос 2
Существует несколько способов эффективного сравнения цен на криптовалюты с различных бирж:

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

2. Использование API бирж - многие биржи предоставляют API, которое позволяет получать информацию о ценах на криптовалюты в реальном времени. Можно написать программу, которая будет автоматически запрашивать данные с нескольких бирж и сравнивать их.

3. Ручной сбор данных - при отсутствии доступа к агрегаторам цен и API бирж можно собирать данные вручную, но это более трудоемкий процесс.

Для оптимизации поиска спреда между ценами монет на различных биржах для арбитража можно использовать параллельные потоки. Это позволит ускорить процесс сравнения цен на разных биржах и выявить более быстро выгодные возможности для арбитражной торговли. Однако при использовании параллельных потоков стоит учитывать возможные ограничения и ограничения, установленные биржами для обращения к их API, чтобы избежать блокировки или ограничения доступа к данным.
Для пространственного арбитража (выравнивание цен между биржами) тебе нужны только ask и bids, т.е. для этого тебе нужны только depth запросы. 

Но ни одна крупная биржа не позволит тебе делать достаточно оперативно делать запросы depth стаканов по всем валютным парам (там их сотни даже на мелких биржах), ограничивая количество запросов в секунду.

Но есть потоковые api (в криптоэкономике его реализуют на основе websockets), когда бот подписывается на определенный класс событий (прописывая интересующий список валютных пар в т.ч.) и получает информацию сразу в тот момент, когда она появляется на бирже. К сожалению, в большинстве случаев depth при этом придется восстанавливать на основе периодических (не частых) запросов depth и вручную обновлять их у себя в памяти на основе информации о лимитных ордерах (а так же торговых событиях, потому что некоторые биржи не дублируют информацию об отмене лимитного ордера, если этот ордер был съеден торговой сделкой).

Т.е. только так можно оперативно получать информацию о стаканах, и уже на основе ее делать поиск пересечений bids/asks с разных бирж.

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

Чтобы ускорить процесс, нужно делить его на две части - поиск торговой пары, для которой появилась возможность совершить арбитражную сделку, и вычисление объема, в пределах которого эта сделка может быть исполнена (речь идет о сделках по маркету, когда она совершается на весь объем одномоментно). Первое - достаточно при вычислении depth дополнительно хранить две цены buy и sell, по которой здесь и сейчас можно совершить сделку на минимальный объем сделки, определяемый лимитами биржи, соответственно сравнение проводить только этих чисел. При обнаружении пересечений - вести подсчет предельного объема уже на основе стаканов (если анализ проводить на каждое событие, получаемое по websocket, то алгоритм можно сократить до сравнения одного нового лимитного ордера со стаканами других бирж).

p.s. оценка ликвидности это сложный алгоритм, который дает какую то вероятностную и временную оценку возможности валютной пары здесь и сейчас обработать определенный объем валюты по указанной цене, оперируя только лимитными сделками . В отличии от сделок по маркету, такие сделки могут никогда не быть исполненными.

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

p.p.s. Возможна комбинация подхода, после оценки динамики ликвидности валютной пары, на бирже удерживается пара лимитных buy/sell с такой ценой, чтобы ее исполнение могло бы позволить получить доход с арбитражной сделкой по маркету на другой бирже, с отслеживанием их частичного или полного исполнения с помощью websocket. в этом случае можно будет пытаться ловить резкие движения, когда рынок на столько резко меняется, что исполняет ордера по достаточно выгодным ценам...

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