Продолжаем разбираться с BotTabSimple, источником, предоставляющим функционал для торговли одним инструментом.
В данной статье обсудим методы закрытия позиций условными заявками (Стоп / Профит / ТрейлингСтоп), которые существуют в OsEngine.
В OsEngine есть пример, который использует все нижеперечисленные способы закрытия позиций. Вместо торговой логики у данного робота в окне параметров кнопки, нажимая которые можно попасть в обработчики, где выставляются определённого рода заявки.
Обязательно откройте этого робота и посмотрите, как это выглядит в исходном коде!
Его исходный код на ГитХаб находится здесь: https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/BotsFromStartLessons/Lesson9Bot4.cs
Робот-пример находится здесь:
Методы, обсуждаемые ниже, в источнике BotTabSimple находятся здесь:
1. Закрыть позицию условной заявкой Stop.
public void CloseAtStop(Position position, decimal priceActivation, decimal priceOrder)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен лимитный ордер на закрытие позиции.
- decimal priceOrder – цена ордера.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Stop.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Limit ордер с ценой priceOrder. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
2. Закрыть позицию условной заявкой Stop с указанием сигнала на закрытие.
public void CloseAtStop(Position position, decimal priceActivation, decimal priceOrder,string signalType)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен лимитный ордер на закрытие позиции.
- decimal priceOrder – цена ордера.
- string signalType – тип закрытия для позиции, который будет записан в поле позиции SignalTypeClose.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Stop.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Limit ордер с ценой priceOrder. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
- Данная модификация метода запишет в поле позиции SignalTypeClose переменную signalType.
3. Закрыть позицию условной заявкой Stop, используя маркет ордер.
public void CloseAtStopMarket(Position position, decimal priceActivation)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен маркет ордер на закрытие позиции.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Stop.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Market ордер. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
4. Закрыть позицию условной заявкой Stop, используя маркет ордер, с указанием сигнала на закрытие.
public void CloseAtStopMarket(Position position, decimal priceActivation, string signalType)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен маркет ордер на закрытие позиции.
- string signalType – тип закрытия для позиции, который будет записан в поле позиции SignalTypeClose.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Stop.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Market ордер. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
- Данная модификация метода запишет в поле позиции SignalTypeClose переменную signalType.
5. Закрыть позицию условной заявкой Trailing Stop.
public void CloseAtTrailingStop(Position position, decimal priceActivation, decimal priceOrder)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен лимитный ордер на закрытие позиции.
- decimal priceOrder – цена ордера.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Stop.
- Если ранее по позиции уже была назначена цена priceActivation, то:
- Если позиция LONG, новая цена priceActivation должна быть выше, чем предыдущая, иначе вызов метода будет полностью проигнорирован.
- Если позиция SHORT, новая цена priceActivation должна быть ниже, чем предыдущая, иначе вызов метода будет полностью проигнорирован.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Limit ордер с ценой priceOrder. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
6. Закрыть позицию условной заявкой Trailing Stop с указанием сигнала на закрытие.
public void CloseAtTrailingStop(Position position, decimal priceActivation, decimal priceOrder, string signalType)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен лимитный ордер на закрытие позиции.
- decimal priceOrder – цена ордера.
- string signalType – тип закрытия для позиции, который будет записан в поле позиции SignalTypeClose.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Stop.
- Если ранее по позиции уже была назначена цена priceActivation, то:
- Если позиция LONG, новая цена priceActivation должна быть выше, чем предыдущая, иначе вызов метода будет полностью проигнорирован.
- Если позиция SHORT, новая цена priceActivation должна быть ниже, чем предыдущая, иначе вызов метода будет полностью проигнорирован.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Limit ордер с ценой priceOrder. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
- Данная модификация метода запишет в поле позиции SignalTypeClose переменную signalType.
7. Закрыть позицию условной заявкой Trailing Stop, используя маркет ордер.
public void CloseAtTrailingStopMarket(Position position,decimal priceActivation)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен маркет ордер на закрытие позиции.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Stop.
- Если ранее по позиции уже была назначена цена priceActivation, то:
- Если позиция LONG, новая цена priceActivation должна быть выше, чем предыдущая, иначе вызов метода будет полностью проигнорирован.
- Если позиция SHORT, новая цена priceActivation должна быть ниже, чем предыдущая, иначе вызов метода будет полностью проигнорирован.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Market ордер. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
8. Закрыть позицию условной заявкой Trailing Stop, используя маркет ордер, с указанием сигнала на закрытие.
public void CloseAtTrailingStopMarket(Position position, decimal priceActivation, string signalType)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен маркет ордер на закрытие позиции.
- string signalType – тип закрытия для позиции, который будет записан в поле позиции SignalTypeClose.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Stop.
- Если ранее по позиции уже была назначена цена priceActivation, то:
- Если позиция LONG, новая цена priceActivation должна быть выше, чем предыдущая, иначе вызов метода будет полностью проигнорирован.
- Если позиция SHORT, новая цена priceActivation должна быть ниже, чем предыдущая, иначе вызов метода будет полностью проигнорирован.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Market ордер. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
- Данная модификация метода запишет в поле позиции SignalTypeClose переменную signalType.
9. Закрыть позицию условной заявкой Profit.
public void CloseAtProfit(Position position, decimal priceActivation, decimal priceOrder)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен лимитный ордер на закрытие позиции.
- decimal priceOrder – цена ордера.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Profit.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Limit ордер с ценой priceOrder. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена опустится вниз до цены priceActivation.
10. Закрыть позицию условной заявкой Profit с указанием сигнала на закрытие.
public void CloseAtProfit(Position position, decimal priceActivation, decimal priceOrder, string signalType)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен лимитный ордер на закрытие позиции.
- decimal priceOrder – цена ордера.
- string signalType – тип закрытия для позиции, который будет записан в поле позиции SignalTypeClose.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Profit.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Limit ордер с ценой priceOrder. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Данная модификация метода запишет в поле позиции SignalTypeClose переменную signalType.
11. Закрыть позицию условной заявкой Profit, используя маркет ордер.
public void CloseAtProfitMarket(Position position, decimal priceActivation)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен лимитный ордер на закрытие позиции.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Profit.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Market ордер. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена поднимется вверх до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена опустится вниз до цены priceActivation.
12. Закрыть позицию условной заявкой Profit, используя маркет ордер, с указанием сигнала на закрытие.
public void CloseAtProfitMarket(Position position, decimal priceActivation, string signalType)
Параметры:
- Position position – позиция, которая будет закрыта.
- decimal priceActivation – цена, при достижении которой на рынок будет выставлен маркет ордер на закрытие позиции.
- string signalType – тип закрытия для позиции, который будет записан в поле позиции SignalTypeClose.
Механика:
- Для позиции, переданной в метод, создаётся условный ордер на закрытие типа Profit.
- Когда цена на бирже достигнет цены priceActivation, для позиции будет создан Market ордер. Объём вновь созданного ордера – весь открытый объём по позиции.
- Когда цена на бирже достигнет цены priceActivation, все другие ордера по позиции в статусе Active будут отозваны.
- Если позиция LONG, будет ожидаться, когда цена поднимется ввер, до цены priceActivation.
- Если позиция SHORT, будет ожидаться, когда цена опустится вниз до цены priceActivation.
- Данная модификация метода запишет в поле позиции SignalTypeClose переменную signalType.
Удачных алгоритмов!
Комментарии открыты для друзей!
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