SellAtStop в OsEngine.

SellAtStop в OsEngine.

Перегрузки метода SellAtStop предназначены для отложенного открытия коротких позиций при помощи условных заявок. После вызова метода во вкладке создается объект класса PositionOpenerToStopLimit, который содержит данные по условной заявке. Будем называть этот объект условной позицией, потому что настоящая позиция создастся только при выполнении условий.

Рассмотрим принцип действия условных заявок. По сути, это обычный ордер, но на биржу он отправляется только при выполнении определенных условий. Возьмем условный инструмент, текущая цена которого равна 100 у.е. Мы хотим продать один лот, когда цена достигнет значения в 80 у.е. При текущем раскладе этого сделать невозможно, но можно программе задать условие, что, когда цена достигнет отметки 80, высылать на биржу заявку на продажу одного лота. 

public void SellAtStop(decimal volume, decimal priceLimit, decimal priceRedLine, StopActivateType activateType, int expiresBars, string signalType, PositionOpenerToStopLifeTimeType lifeTimeType)

Метод ничего не возвращает, принимает следующие параметры:

  1. volume – объем для открывающего ордера;
  2. priceLimit – цена для ордера;
  3. priceRedLine – цена, при достижении которой, на биржу будет отправлен ордер;
  4. activateType – тип активации, необходимо использовать значение ниже или равно;
  5. expiresBars – время жизни заявки, измеряемое количеством свечей (баров);
  6. signalType – строка, содержащая имя сигнала на открытие позиции;
  7. lifeTimeType – включает/выключает расчет времени жизни для заявки;

Изменим пример. Робот открывает шорт после отклонения цены вниз на определенный процент от текущего значения SMA. Расчет алгоритма срабатывает после закрытия очередной свечи, но пока мы будем ждать ее закрытия, цена может уйти гораздо ниже от необходимой границы. Для решения этой проблемы воспользуемся методом SellAtStop. Если цена отклонится на нужную величину, программа автоматически откроет короткую позицию.

  1. Изменим метод CrossDown. Он будет сообщать нам, находится ли цена ниже скользящей.
  2. Добавим метод GetBorderDownPrice, котрый будет расчитывать и возвращать цену с учетом отклонения.

И далее изменим обработчик события завершения свечи:

  1. Определяем сигнал для открытия.
  2. В качестве условия используем цену, по достижению которой, вкладка откроет короткую позицию.
  3. Рассчитываем цену, по которой будет выслан ордер в момент срабатывания условия с учетом проскальзывания.
  4. Даем вкладке команду на открытие короткой позиции при достижении граничного значения.

В качестве параметра expiresBars устанавливаем значение 1. Это означает, что условная позиция будет существовать на протяжении одной свечи, после чего отменится. Наш алгоритм будет повторно создавать условную позицию после завершения очередной свечи, пока цена инструмента будет находиться ниже скользящей средней.

При необходимости можно использовать другой подход. Создадим условную позицию с неограниченным сроком жизни.

  1. Добавляем две дополнительных проверки: во вкладке не должно быть активных условных позиций и активных обычных позиций.
  2. В качестве последнего параметра методу SellAtStop передаем значение NoLifeTime.

Таким образом условная позиция не отменится, пока не будет создана реальная позиция.

Метод 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 для расчета времени жизни для условной позиции соответственно.

15:23
85
FAQ

Комментарии

Нет комментариев. Ваш будет первым!