Неотъемлемым атрибутом любой торговой площадки является такая сущность как книга заявок. Абсолютно все сделки после валидации попадают в ядро биржи, в котором специальный алгоритм сводит покупателей с продавцами. У книги заявок есть два сортированных списка, один хранит все лимитные заявки на покупку, второй на продажу. Для покупок лучшим в списке считается ордер с наивысшей ценой. Для продаж - с наименьшей. При наличии нескольких заявок с одинаковой ценой, лучшей из них считается та, которая была получена раньше остальных. На основании книги заявок строится агрегированный стакан котировок, который мы привыкли видеть во всех терминалах и интерфейсах бирж. К примеру, на бинансе он выглядит так:
Рис. 1. Стакан заявок на бирже binance.
Из-за своей формы он и получил название стакан. Его отличие от книги заявок в том, что все ордера с одинаковой ценой группируются в одну строку, а их объемы складываются.
В OsEngine моделированием этой сущности занимается класс MarketDepth. По сути своей это снимок стакана на определенный момент времени. Класс MarketDepthLevel описывает одну строку из стакана.
Код обоих типов находится в каталоге OsEngine\project\OsEngine\Entity\ в файле MarketDepth.cs.
Рис. 2. Класс MarketDepth в структуре проекта.
Рассмотрим строение этих классов подробнее.
Ask – публичное поле типа decimal. Содержит информацию о суммарном количество лотов на продажу по этому уровню.
Bid – публичное поле типа decimal. Содержит информацию о суммарном количество лотов на покупку по этому уровню.
Price – публичное поле типа decimal. Цена текущего уровня.
Id – публичное поле типа long. Уникальный идентификатор ценового уровня.
Time – публичное поле типа DateTime. Хранит время создания текущего снимка.
Asks – публичное поле перечислимого типа. Содержит список всех уровней на продажу.
Bids – публичное поле перечислимого типа. Содержит список всех уровней на покупку.
AskSummVolume – общедоступное свойство типа decimal. Предоставляет суммарный объем всех уровней на продажу.
BidSummVolume – общедоступное свойство типа decimal. Предоставляет суммарный объем всех уровней на покупку.
SecurityNameCode – общедоступное строковое поле. Содержит наименование инструмента, которому принадлежит данный стакан заявок.
SetMarketDepthFromString – общедоступный метод, принимает строку, содержащую данные по всем полям, парсит ее и инициализирует состояние объекта.
GetSaveStringToAllDepfh – общедоступный метод, в качестве параметра принимает необходимую глубину обработки уровней, возвращает строку, в которую записаны все поля объекта для дальнейшего сохранения в хранилище.
GetCopy – общедоступный метод, возвращает глубокую копию текущего объекта.
Комментарии