Продолжаем разбираться с BotTabSimple, источником, предоставляющим функционал для торговли одним инструментом.
В данной статье обсудим методы модификации позиций, которые существуют в OsEngine. Это когда у Вас уже есть позиция, и Вы хотите в неё добавить ордер.
В OsEngine есть пример, который использует все нижеперечисленные способы модификации позиций. Вместо торговой логики у данного робота в окне параметров кнопки, нажимая которые можно попасть в обработчики, где выставляются определённого рода заявки.
Обязательно откройте этого робота и посмотрите, как это выглядит в исходном коде!
Его исходный код на ГитХаб находится здесь: https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/BotsFromStartLessons/Lesson9Bot2.cs
В проекте это тут:
Методы, обсуждаемы ниже, в источнике BotTabSimple находятся здесь:
И здесь:
1. Увеличить позицию с использованием лимит ордера.
public void BuyAtLimitToPosition(Position position, decimal priceLimit,decimal volume)
public void SellAtLimitToPosition(Position position, decimal priceLimit, decimal volume)
Параметры:
- Position position – позиция, в которой будет увеличиваться объём.
- decimal priceLimit – цена, по которой будет выставлен новый ордер.
- decimal volume – объём для открытия нового ордера.
Механика:
- После вызова метода происходит создание дополнительного ордера для позиции, указанной в первом параметре метода.
- Новый ордер создаётся с типом Limit по цене, указанной в priceLimit, с объёмом, указанным в volume.
- Если в этот момент на рынке уже есть другие активные открывающие ордера для позиции, они будут отозваны, останется только новый.
- Метод Buy может быть использован только для позиции типа LONG, т.е. покупок.
- Метод Sell может быть использован только для позиций типа SHORT, т.е. для продаж.
2. Увеличить позицию с использованием лимит ордера, не отзывая другие ордера с рынка.
Отличие от предыдущего метода: если по позиции уже есть ордера на бирже со статусом Active, они не будут отозваны.
public void BuyAtLimitToPositionUnsafe(Position position,decimal priceLimit, decimal volume)
public void SellAtLimitToPositionUnsafe(Position position, decimal priceLimit, decimal volume)
Параметры:
- Position position – позиция, в которой будет увеличиваться объём.
- decimal priceLimit – цена, по которой будет выставлен новый ордер.
- decimal volume – объём для открытия нового ордера.
Механика:
- После вызова метода происходит создание дополнительного ордера для позиции, указанной в первом параметре метода.
- Новый ордер создаётся с типом Limit по цене, указанной в priceLimit, с объёмом, указанным в volume.
- Данный метод называется Unsafe, т.к. не отзывает другие активные ордера на открытие по позиции, и можно держать в рынке неограниченное их количество.
- Метод Buy может быть использован только для позиции типа LONG, т.е. покупок.
- Метод Sell может быть использован только для позиций типа SHORT, т.е. для продаж.
3. Увеличить позицию с использованием маркет ордера.
public void BuyAtMarketToPosition(Position position,decimal volume)
public void SellAtMarketToPosition(Position position, decimal volume)
Параметры:
- Position position – позиция, в которой будет увеличиваться объём.
- decimal volume – объём для открытия нового ордера.
Механика:
- После вызова метода происходит создание дополнительного ордера для позиции, указанной в первом параметре метода.
- Новый ордер создаётся с типом Market, с объёмом, указанным в volume.
- Метод Buy может быть использован только для позиции типа LONG, т.е. покупок.
- Метод Sell может быть использован только для позиций типа SHORT, т.е. для продаж.
4. Увеличить позицию с использованием маркет ордера, с указанием названия сигнала.
public void BuyAtMarketToPosition(Position position, decimal volume, string signalType)
public void SellAtMarketToPosition(Position position, decimal volume, string signalType)
Параметры:
- Position position – позиция, в которой будет увеличиваться объём.
- decimal volume – объём для открытия нового ордера.
- string signalType – тип открытия для позиции, который будет записан в поле позиции SignalTypeOpen.
Механика:
- После вызова метода происходит создание дополнительного ордера для позиции, указанной в первом параметре метода.
- Новый ордер создаётся с типом Market, с объёмом, указанным в volume.
- Метод Buy может быть использован только для позиции типа LONG, т.е. покупок.
- Метод Sell может быть использован только для позиций типа SHORT, т.е. для продаж.
- Данная модификация метода запишет в поле позиции SignalTypeOpen переменную signalType.
5. Увеличить позицию с использованием айсберг ордера.
public void BuyAtIcebergToPosition(Position position, decimal price, decimal volume, int ordersCount)
public void SellAtIcebergToPosition(Position position, decimal price, decimal volume, int ordersCount)
Параметры:
- Position position – позиция, в которой будет увеличиваться объём.
- decimal price – цена, по которой будет выставлен новый ордер.
- decimal volume – объём для открытия нового ордера.
- int ordersCount — количество ордеров, которые будут выставлены последовательно.
Механика:
- После вызова метода происходит создание дополнительной серии ордеров (айсберг заявки) на открытие для позиции, указанной в первом параметре метода.
- Айсберг ордер создаётся по цене price с объёмом, указанным в volume, на каждый ордер.
- Количество ордеров в айсберге регулируется переменной ordersCount.
- Метод Buy может быть использован только для позиции типа LONG, т.е. покупок.
- Метод Sell может быть использован только для позиций типа SHORT, т.е. для продаж.
6. Увеличить позицию с использованием айсберг ордера, с типом ордеров Market.
public void BuyAtIcebergToPositionMarket(Position position, decimal volume, int ordersCount, int minMillisecondsDistance)
public void SellAtIcebergToPositionMarket(Position position, decimal volume,int ordersCount, int minMillisecondsDistance)
Параметры:
- Position position – позиция, в которой будет увеличиваться объём.
- decimal volume – объём для открытия нового ордера.
- int ordersCount — количество ордеров, которые будут выставлены последовательно.
- int minMillisecondsDistance – минимальный временной промежуток между выставляемыми ордерами, указанный в миллисекундах. В 1 секунде – 1000 миллисекунд.
Механика:
- После вызова метода происходит создание дополнительной серии ордеров (айсберг заявки) на открытие для позиции, указанной в первом параметре метода.
- Айсберг ордер создаётся с группой ордеров типа Market, с объёмом, указанным в volume, на каждый ордер.
- Количество ордеров в айсберге регулируется переменной ordersCount.
- Работать айсберг будет только в реальном подключении. В тестере заявка преобразуется в Market ордер.
- Поскольку ордера типа Market, и они будут исполняться довольно быстро, есть возможность установить между ордерами минимальное время, чтобы между ордерами была задержка.
- Метод Buy может быть использован только для позиции типа LONG, т.е. покупок.
- Метод Sell может быть использован только для позиций типа SHORT, т.е. для продаж.
Удачных алгоритмов!
Комментарии открыты для друзей!
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