Продолжаем связывать данные из терминалов на бирже с тем, как это видят роботы.
Сегодня поговорим про стакан или книгу заявок, как ещё это иногда называют. Почти в любом вёб-терминале он имеет такой вид:
Неотъемлемым атрибутом любой торговой площадки является такая сущность, как книга заявок.
Абсолютно все сделки после валидации попадают в ядро биржи, в котором специальный алгоритм сводит покупателей с продавцами.
У книги заявок есть два сортированных списка. Первый называют бидами (Bids), хранит все лимитные заявки на покупку, лучшим в списке считается ордер с наивысшей ценой. Второй называют асками (Asks). Список хранит все заявки на продажу, в котором лучшей заявкой считается ордер с наименьшей ценой.
При наличии нескольких заявок с одинаковой ценой лучшей из них считается та, которая была получена раньше остальных. На основании книги заявок строится агрегированный стакан котировок, который мы привыкли видеть во всех терминалах и интерфейсах бирж. К примеру, в популярной бирже он выглядит так:
Из-за своей формы он и получил название стакан.
В OsEngine моделированием этой сущности занимается класс MarketDepth. По сути своей это снимок стакана на определенный момент времени. Класс MarketDepthLevel описывает одну строку из стакана.
На ГитХаб этот класс находится здесь: https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Entity/MarketDepth.cs
Внутри проекта это здесь:
Сам же класс, если Вы его откроете, выглядит следующим образом:
Рассмотрим строение этих классов подробнее.
Time – публичное поле типа DateTime. Хранит время создания текущего снимка.
Asks – публичное поле перечислимого типа. Содержит список всех уровней на продажу. Лучшая цена по индексу 0.
Bids – публичное поле перечислимого типа. Содержит список всех уровней на покупку. Лучшая цена по индексу 0.
AskSummVolume – общедоступное свойство типа decimal. Предоставляет суммарный объем всех уровней на продажу.
BidSummVolume – общедоступное свойство типа decimal. Предоставляет суммарный объем всех уровней на покупку.
SecurityNameCode – общедоступное строковое поле. Содержит наименование инструмента, которому принадлежит данный стакан заявок.
SetMarketDepthFromString – общедоступный метод. Принимает строку, содержащую данные по всем полям, парсит ее и инициализирует состояние объекта.
GetSaveStringToAllDepfh – общедоступный метод. В качестве параметра принимает необходимую глубину обработки уровней, возвращает строку, в которую записаны все поля объекта для дальнейшего сохранения в хранилище.
GetCopy – общедоступный метод возвращает глубокую копию текущего объекта.
Ask – публичное поле типа decimal. Содержит информацию о суммарном количество лотов на продажу по этому уровню.
Bid – публичное поле типа decimal. Содержит информацию о суммарном количестве лотов на покупку по этому уровню.
Price – публичное поле типа decimal. Цена текущего уровня.
Id – публичное поле типа long. Уникальный идентификатор ценового уровня.
В базовом источнике BotTabSimple, о котором мы будем много говорить в наших гайдах, есть возможность подписаться на обновление стакана и, анализируя его, принимать решения.
Например, в публичной сборке есть пример HighFrequencyTrader, в котором реализован спам ордерами по лучшей цене инструмента. Используйте его как пример:
Удачных алгоритмов!
Комментарии открыты для друзей!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php