Связка транзакций по алгоритму

Мой рабочий проект - это создание трейдингового бота, с помощью которого происходит увеличение денег. С точки зрения физического мира - это некая машинка/станок/программно-аппаратный комплекс, который в процессе своей работы увеличивает количество денег.

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

Будем рассматривать следующий алгоритм: пространственный арбитраж между двумя криптобиржами в BTC/USDT, соответственно, далее по тексту мы рассматриваем именно трейдинг с использованием пространственного арбитража в паре BTC/USDT, если не оговорено иное. Жирным будут выделены системы со специфическими для предметной области терминами

Итак, процесс трейдинга выполняющий наш алгоритм включает в себя следующие системы

  • инвентарь: капитал в двух разных валютах BTC, USDT.
  • биржа 1
  • биржа 2
  • бот, находящий арбитражную связку и запускающий торги в случае, если курс на одной бирже сильно отличается от другой. Арбитражная связка - это ситуация, когда курс на одной бирже отличается от другой, в процессе торгов на одной бирже закупается один инвентарь, а на второй он же продается, таким образом общее количество инвентаря увеличивается

Будем отличать две системы

  • арбитражная связка - состояние стаканов бирж, когда курс на одной бирже отличается от другой (методы: выявление, запуск торгов)
  • связка транзакций по алгоритму арбитража - совокупность транзакций после запуска торгов для арбитражной связки (методы: инициализация, исполнение)

Нашей целевой системой будет связка транзакций по алгоритму арбитража. В эту целевую систему входит две ноги связки транзакций.

Пример

  • первая нога связки транзакций: покупка BTC за USDT на бирже 1: +0.1 BTC, -11000 USDT
  • вторая нога связки транзакции: продажа BTC за USDT на бирже 2: -0.099 BTC, + 11200 USDT

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

  • два участника
  • биржа как посредник между участниками
  • два разных типа денег

Со связкой транзакций разобрались, теперь рассмотрим что входит в арбитражную связку точки зрения 4D-экстенсионализма. Напомню, связка транзакций получается из арбитражной связки после начала торгов.

Итак, арбитражная связка включает в себя

  • стакан, а если быть точнее часть стакана USDT/BTC биржи 1
  • часть стакана USDT/BTC биржи 2

Стакан - это сложный физический объект - совокупность всех ордеров на бирже для конкретной пары (методы: создание, изменение)

Ордер - это договорка между будущим участником транзакции и биржей о готовности исполнить транзакцию с другим участником на определенных условиях (методы: создание, изменение, удовлетворение/match, отмена). В ордер входят

  • участник, готовый к инициализации и исполнению транзакции
  • инвентарь, предоставляемый участником (его при создании ордера забирает себе биржа как обеспечение)
  • биржа предоставляющая подобную возможность

В ордер не входят второй участник!!!

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

  • LIMIT ордер - участник готов инициализировать и исполнить транзакцию по определенному прайсу. Например купить 10 USD за 700 RUB. Если курс доллара снизится до 70 рублей, ордер удовлетворится - транзакция инициализируется и исполнится
  • MARKET ордер - участник готов инициализировать и исполнить транзакцию по текущему прайсу, который есть на рынке. Например, купить 10 USD за RUB. В таком случае, будет немедленно создана и исполнена транзакция по текущему прайсу, на момент написания текста это 84.38, результатом удовлетворения ордера будет транзакция 10 USD на 843.8 RUB.

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

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

Если мы рассмотрим другой алгоритм (стат. арбитраж, HFT и т.п.), все будет то же самое - целевой системой будет связка транзакций по конкретному алгоритму. Для традиционных финансов все усложняется, за счет того, что есть еще много посредников в виде брокеров, клиринговых домов и регуляторов, но в нашем рассмотрении это не важно, целевой системой все также будет связка транзакций.

Существенный шаг вперёд. Можно, конечно, много комментировать (скажем, берём целевую систему — “связка транзакций”, отмечаем краем глаза, что это “по алгоритму арбитража”, а не по “отношению, выявленному алгоритмом арбитража”, а рядом видим “арбитражная связка” — и всё, путаница объектов “связки по алгоритму арбитража” и “арбитражной связки” чисто лексически гарантирована. “Пара” в тексте используется (например, при определении стакана), но введена как объект неявно (надо искать в тексте специально, что это пара валют). Есть подозрительные кольца в определениях: “нога/leg: это подсистема связки транзакций, реализуется транзакцией” (есть связка транзакций, у неё есть наверняка какая-то транзакция в связке, реализуется транзакцией – очень странно написано, если сказать, что есть связка ног, в которой есть транзакции – тоже странно, ибо “транзакция реализуется транзакцией”, может быть там два или даже больше разных объектов “транзакция” как процесс, как набор объектов, как физический объект, как состояние чего-то?)…

Это мета-модель предметной области, типы мета-мета-модели поставлены только как комментарии (они существенно зависят от проекта), скажем, целевая система как связка транзакций по алгоритму арбитража (а какие ещё связки транзакций бывают, если не по алгоритму арбитража)? Опять же: через границы фирмы вы передаёте как результат связики транзакций? Или таки это какой-то “внутренний продукт”, “наша система”? Мне кажется, что это не целевая, а одна из изготавливаемых в проекте систем (весьма важная, согласен).

Проход с явным выявлением важных типов объектов из мета-мета-модели и далее отнесения разных объектов этой предметной области к типам объектов из мета-модели был бы полезен.

В любом случае, после такого рассмотрения к вам будут подходить на работе за консультациями о том, как оно там всё устроено )))

2 лайка

Очень интересный разбор. Я делаю почти то же самое, только у меня алгоритм - одноногий маркет-мейкинг. Соответственно, биржа одна, но сущности те же.

Пока читал пост, возникали сомнения по поводу физичности подсистем на уровне ощущений в теле, то есть, дребезжало прям по определению. Буду отдельно разбираться с этими ощущениями и пока не буду озвучивать свои сомнения.

Разбор своего станочка выложу здесь в клубе. Наверное, после того, как этот разбор совершу, смогу более детально прокомментировать Ваш )

1 лайк

Если вы про подсистемы имеете ввиду подсистемы “связки транзакций”, все эти ноги, то там точно требуется доработка, Анатолий тоже об этом написал, там путаница, также буду разбираться

1 лайк

Вам не стоит использовать тип “система” при анализе в тех границах, в которых вы пока остаётесь. Вы замучаетесь проводить декомпозицию этих “систем” на подсистемы и (самое главное!) отвечать на вопрос об эмерджентных свойствах. То, что вы пока что выделяете и называете “системы” - это определённые “ситуации в мире”::“4D объекты”.

Вот когда вы начнёте рассматривать собственно программно-аппаратную систему (бота), программно-аппаратные системы бирж, финансовую надсистему (трейдеров, маркет-мейкеров, клиентов) - их уже надо видеть именно как системы, создающие перечисленные объекты (“ситуации в мире”) или их меняющие. На этом уровне тип “система” будет уместен.

2 лайка