Обезличенная сделка, трейд, тик – все эти термины описывают факт взаимодействия между покупателем и продавцом, результатом которого является атомарная операция передачи ценных бумаг из одних рук в другие. Конечно же, в современном мире электронной торговли, факт передачи прав на активы происходит по-разному, в зависимости от торговой площадки. К примеру, на московской бирже, в момент совершения сделки просто меняются цифры на вашем счете, а все расчеты по переходу прав проводятся во время клирингов. В свою очередь на других рынках, например, таких как криптовалютные биржи, права переходят практически сразу после совершения сделки. Для простоты понимания принято считать, что продавец расстается, а покупатель приобретает актив и все права на него в момент совершения сделки.
Информация о трейдах публикуется в ленте обезличенных сделок, например, в торговом интерфейсе биржи бинанс она выглядит так:
Рис. 1. Лента сделок на бирже binance.
На снимке каждая строка отображает данные по одной сделке.
Через API данные по сделкам в большинстве случаев можно получать двумя способами. Первый – запросить слепок ленты сделок. Как правило такой запрос необходимо конфигурировать временным отрезком, имеющим время начала и конца запрашиваемого интервала. В этом случае мы получаем массив сделок, совершенных в указанный промежуток времени. Второй способ - подписаться на поток рассылки сделок в реальном времени. Каждое сообщение из такого потока описывает одну сделку.
В OsEngine за описание данной сущности отвечает класс Trade, расположенный по пути OsEngine\project\OsEngine\Entity\Trade.cs
Рис. 1. Класс Trade в структуре проекта.
Рассмотрим подробно состояние и поведение объектов класса Trade.cs в порядке их определения.
SecurityNameCode – общедоступное свойство строкового типа, содержит наименование актива по которому прошла эта сделка.
Id – публичное поле строкового типа, уникальный идентификатор в рамках конкретного инструмента, устанавливаемый биржей.
Volume – публичное поле типа decimal. Хранит объем операции.
Price – публичное поле типа decimal. Содержит цену инструмента, по которой прошла сделка.
Time – публичное поле типа DateTime. Указывает дату и время совершения торговой сделки.
MicroSecond – публичное поле типа int. Хранит количество микросекунд, прошедших с момента времени указанного в поле Time. Важно помнить, что не все биржи предоставляют эту информацию. Поэтому в случае отсутствия такой информации на бирже, в поле будет храниться 0.
Side – публичное поле типа Side. Указывает направление сделки. Значения перечисления Side:
Следует заметить, что в момент взаимодействия покупателя с продавцом генерируются сразу две сделки, по одной для каждой из сторон. Но в ленту сделок попадет только одна из них, та, которая принадлежит инициатору сделки. Инициатор это тот, кто создает встречное предложение, кидает ордер «по рынку». Рассмотрим на примере: в книге заявок уже находится чей-то ордер на продажу по определенной цене, и вы выставляете ордер на покупку по цене продавца или выше, вы будете инициатором сделки, так как ваши действия приведут к совершению сделки. Соответственно в такой сделке значение поля Side будет равно Side.Buy.
Bid – публичное поле типа decimal. Хранит значение цены лучшего уровня на покупку из стакана заявок на момент создания объекта класса Trade.
Ask – публичное поле типа decimal. Хранит значение цены лучшего уровня на продажу из стакана заявок на момент создания объекта класса Trade.
BidsVolume – публичное поле типа decimal. Хранит значение суммарного объема всех уровней на покупку в стакане заявок на момент создания объекта класса Trade.
AsksVolume – публичное поле типа decimal. Хранит значение суммарного объема всех уровней на продажу в стакане заявок на момент создания объекта класса Trade.
GetSaveString – общедоступный метод, не принимающий параметров, возвращает строку, в которую записаны все поля объекта для дальнейшего сохранения в хранилище.
SetTradeFromString – общедоступный метод, принимает строку, содержащую данные по всем полям, парсит ее и инициализирует состояние объекта.
GetSideIqFeed – приватный метод, определяет сторону сделки для трейдов, полученных из IqFeed.
Комментарии