В одной из прошлых статей мы говорили о сделках, но сама по себе сделка не может существовать без такого понятия как заявка.
Ордер (биржевая заявка, приказ) – это поручение, направляемое на биржу, которое выражает намерение трейдера совершить торговую операцию купли или продажи финансового инструмента. Существует несколько разновидностей ордеров, отличающихся типом заказа, особенностью исполнения и дополнительными ограничениями. По типу исполнения выделяют рыночные, лимитные и условные заявки.
Рыночный ордер исполняется сразу после поступления на биржу при наличии контрагентов в виде лимитных заявок. Такой ордер не требует установки цены. Итоговая цена исполнения будет рассчитана на основании средней цены сделок, которые появятся в результате удовлетворения заявки. Рыночные приказы имеют два существенных недостатка. Первый и самый существенный заключается в проскальзывании. Ядро биржи будет исполнять такой ордер о заявки контрагентов до тех пор, пока не удовлетворит весь запрашиваемый объем. Если для ликвидных активов это не является проблемой, то на всяких шиткоинах издержки могут вырасти существенно. Второй недостаток – в том, что вы забираете ликвидность с рынка. Такую сторону сделок называют тейкерами и как правило на большинстве бирж с них берут повышенную комиссию.
Лимитный ордер – это заявка на совершение сделки при достижении ценой определенного значения. Данный тип приказа требует указание желаемой цены. Инициаторов данного типа приказов называют мейкерами. В отличии от рыночных заявок, лимитки лишены проскальзывания как такового и имеют пониженную комиссию. Более того, некоторые биржи платят мейкерам часть комиссии контрагентов за использование лимитных заявок, что в свою очередь положительно сказывается на издержках.
Условная заявка подразумевает активацию заказа при возникновении заранее определенных условий. Например, к таким заявкам относится стоп ордер – приказ, высылаемый в ядро торговой системы после достижения ценой определенного значения. Так же к условным заявкам относятся связанные ордера, например, случай со стоп-лоссом и тейк-профитом, когда один из них исполняется, второй немедленно отменяется.
За моделирование заявок в OsEngine отвечает класс Order, путь к файлу: OsEngine\project\OsEngine\Entity\Order.cs
Рис. 1. Класс Order в структуре проекта.
Рассмотрим подробно все члены класса Order.cs.
NumberUser – публичное поле типа Int. Задается программой, хранит уникальный в рамках терминала идентификатор объекта.
NumberMarket – публичное строковое поле. Хранит уникальный идентификатор заявки, предоставляемый биржей.
SecurityNameCode – общедоступное строковое поле. Содержит наименование инструмента, по которому бала совершена транзакция.
SecurityClassCode – общедоступное строковое поле. Определяет код класса инструмента, по которому бала совершена транзакция.
PortfolioNumber – публичное строковое поле. Хранит номер счета, к которому принадлежит заявка.
Side – публичное поле типа Side. Указывает направление заявки. Значения перечисления Side:
Price – публичное поле типа decimal. Содержит значение цены, задаваемое в момент создания заявки.
PriceReal – публичное свойство типа decimal. Возвращает фактическую цену исполнения заявки.
Volume – публичное поле типа decimal. Хранит значение объема, который изначально предполагалось получить ордером.
VolumeExecute – публичное свойство типа decimal. Возвращает объем, который уже был исполнен. Рассчитывается на основании сделок, принадлежащих этой заявке.
MyTrades – публичное свойство типа MyTrade. Хранит все сделки, принадлежащие этому ордеру.
State – публичное свойство типа OrderStateType. Определяет текущее состояние объекта. Может иметь следующие значения:
TypeOrder - публичное поле типа OrderPriceType. Определяет тип ордера:
PositionConditionType – публичное поле типа OrderPositionConditionType. Определяет предназначение ордера:
Comment – общедоступное строковое поле. Может содержать вспомогательную информацию.
TimeCallBack – публичное поле типа DateTime. Хранит время первого ответа биржи на запрос.
TimeCancel – публичное поле типа DateTime. Хранит время отмены заказа.
TimeDone – публичное поле типа DateTime. Хранит время исполнения ордера.
TimeCreate – публичное поле типа DateTime. Время создания ордера в программе.
TimeRoundTrip – общедоступное свойство типа TimeSpan. Содержит отрезок, который понадобился для выставления заявки.
TimeExecuteFirstTrade – общедоступное свойство типа DateTime. Возвращает время первой сделки по ордеру. В случае отсутствия сделок, возвращает время создания заявки.
LifeTime – общедоступное поле типа TimeSpan. Временной отрезок, по прошествии которого ордер будет отозван программой если к тому моменту не исполнится.
IsStopOrProfit – публичное поле типа bool. Флаг, указывающий является ли данный ордер связанной заявкой стоп-лосс или тейк-профит.
ServerType – публичное поле типа ServerType. Указывает на тип биржи, для которой предназначен этот ордер.
SetTrade – принимает сделку и проверяет ее принадлежность текущему ордеру. В случае положительного результата, добавляет в список и при необходимости изменяет состояние заявки.
GetMidlePrice – рассчитывает среднюю цену исполнения ордера на основании имеющихся сделок.
GetLastTradeTime – возвращает время последней сделки.
TradesIsComing – общедоступное свойство типа bool. Указывает на то, были ли сделки по ордеру.
GetStringForSave – общедоступный метод, не принимающий параметров, возвращает строку, в которую записаны все поля объекта для дальнейшего сохранения в хранилище.
SetOrderFromString – общедоступный метод, принимает строку, содержащую данные по всем полям, парсит ее и инициализирует состояние объекта.
Комментарии