Перегрузки метода SellAtStop предназначены для отложенного открытия коротких позиций при помощи условных заявок. После вызова метода во вкладке создается объект класса PositionOpenerToStopLimit, который содержит данные по условной заявке. Будем называть этот объект условной позицией, потому что настоящая позиция создастся только при выполнении условий.
Рассмотрим принцип действия условных заявок. По сути, это обычный ордер, но на биржу он отправляется только при выполнении определенных условий. Возьмем условный инструмент, текущая цена которого равна 100 у.е. Мы хотим продать один лот, когда цена достигнет значения в 80 у.е. При текущем раскладе этого сделать невозможно, но можно программе задать условие, что, когда цена достигнет отметки 80, высылать на биржу заявку на продажу одного лота.
public void SellAtStop(decimal volume, decimal priceLimit, decimal priceRedLine, StopActivateType activateType, int expiresBars, string signalType, PositionOpenerToStopLifeTimeType lifeTimeType)
Метод ничего не возвращает, принимает следующие параметры:
Изменим пример. Робот открывает шорт после отклонения цены вниз на определенный процент от текущего значения SMA. Расчет алгоритма срабатывает после закрытия очередной свечи, но пока мы будем ждать ее закрытия, цена может уйти гораздо ниже от необходимой границы. Для решения этой проблемы воспользуемся методом SellAtStop. Если цена отклонится на нужную величину, программа автоматически откроет короткую позицию.
И далее изменим обработчик события завершения свечи:
В качестве параметра expiresBars устанавливаем значение 1. Это означает, что условная позиция будет существовать на протяжении одной свечи, после чего отменится. Наш алгоритм будет повторно создавать условную позицию после завершения очередной свечи, пока цена инструмента будет находиться ниже скользящей средней.
При необходимости можно использовать другой подход. Создадим условную позицию с неограниченным сроком жизни.
Таким образом условная позиция не отменится, пока не будет создана реальная позиция.
Метод SellAtStop имеет несколько перегрузок. Все они отличаются только набором принимаемых параметров. Весь функционал несет версия с наибольшим количеством параметров, остальные же вызывают ее, передавая литералы в качестве некоторых параметров метода.
public void SellAtStop(decimal volume, decimal priceLimit, decimal priceRedLine, StopActivateType activateType, int expiresBars, string signalType)
Перегрузка метода, которая не требует параметра lifeTimeType. По умолчанию использует значение CandlesCount для расчета времени жизни для условной позиции.
public void SellAtStop(decimal volume, decimal priceLimit, decimal priceRedLine, StopActivateType activateType, int expiresBars)
Версия метода, которая не требует параметров signalType и lifeTimeType. По умолчанию используется пустая строка для сигнала и значение CandlesCount для расчета времени жизни для условной позиции.
public void SellAtStop(decimal volume, decimal priceLimit, decimal priceRedLine, StopActivateType activateType, string signalType)
Не требует параметров expiresBars и signalType. По умолчанию используется единица и значение CandlesCount для расчета времени жизни для условной позиции.
public void SellAtStop(decimal volume, decimal priceLimit, decimal priceRedLine, StopActivateType activateType)
Не требует параметров expiresBars, signalType и lifeTimeType. По умолчанию используется единица, пустая строка для сигнала и значение CandlesCount для расчета времени жизни для условной позиции соответственно.
Комментарии