Стратегии и роботы > StopLoss и TakeProfit

Обсуждение, описание стратегий и роботов, идеи для стратегий
Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: StopLoss и TakeProfit

Непрочитанное сообщение evge » 17 июн 2020, 09:43

Приветствую!

Непонятно на какую цену включать трейлинг стоп, написал ниже по цене = trsto. Можете заменить тип сигнала и цену или дельту, если надо.

Код: Выделить всё

function Initialize()
{
//...
AddGlobalVariable("TS", Types.Boolean, false);
//...
}

function OnUpdate()
{
//...
if ( условие на лонг)
   {
      EnterLong();
      BreakingStop(sto, tak, SignalPriceType.DeltaFromAveragePrice);
      TS = false;
   }
   
   if (CurrentPL() > 1000 && !TS)
   {
      CancelStopLoss();
      TrailingStopLoss(trsto, SignalPriceType.Price)
      TS = true;   
   }
//...
}


Не все разбираются: что, зачем и почему. Понимаю. Поэтому буду приводить используемую информацию из справки по скриптам индикаторов и стратегий.

доп. информация:

CancelStopLoss() – отменить (снять) стоп-заявку, выставленную для защиты текущей позиции робота. Функция используется для отмены или редактирования положения текущего стопа. Повторный вызов функции выставления стопа не снимает старый и не выставляет новый стоп. Поэтому необходимо использовать данную функцию для отмены ранее выставленной заявки.

CancelActiveOrders(LeaveStop) – снять активные заявки.
LeaveStop – булевая переменная, управляющая снятием стопа к позиции.
• true – оставить стоп к позиции.
• false – снять все.

CurrentPL() – возвращает текущий доход по открытой позиции в валюте инструмента (рубли или пункты).
CurrentPLper() – возвращает изменение цены в процентах относительно учетной цены по открытой позиции в процентах.

TrailingStopLoss(ValueStop, SignalPriceType) – выставить защитную трейлинг стоп-маркет заявку к текущей позиции

SignalPriceType – тип задаваемого значения,
• Price – значения ValueStop и ValueTake задаются в абсолютных величинах (как цены стоп уровня и уровня тейк профита):
• DeltaFromAveragePrice – значения ValueStop и ValueTake задаются как отклонения от учетной цены позиции робота в валюте цены (значения задаются больше 0, робот сам определяет направление отклонения);
• DeltaInPercentFromAveragePrice – значения ValueStop и ValueTake задаются в виде отклонения от учетной цены открытия позиции робота в процентах (значения задаются больше 0, робот сам определяет направление отклонения).

AddGlobalVariable(Name, Types, Value) – функция создания статической переменной, которая сохраняет значение при следующем обращении к функции Evaluate() и OnUpdate(). В скрипте может быть определено несколько глобальных переменных.
Параметры:
• Name – строка - имя параметра.
• Types – тип переменной
o Int
o Long
o Double
o Boolean
o String
o DateTime
o IntList
o DoubleList
o DoubleDictionary
• Value – значение по умолчанию
никогда такого не было и вот опять

Orange2000
Сообщения: 47
Зарегистрирован: 13 мар 2019, 00:45
Благодарил (а): 37 раз
Поблагодарили: 1 раз

Re: StopLoss и TakeProfit

Непрочитанное сообщение Orange2000 » 17 июн 2020, 11:03

Евгений спасибо. Логику понял.
по поводу цены. Допустим купили по 124 000. Если дошли до 125 000 то трейлинг включается в 200 пп от 125 уже.
trsto это что именно?
И обязательно CancelStop делать?

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: StopLoss и TakeProfit

Непрочитанное сообщение evge » 17 июн 2020, 11:36

если до этого ставили стоп, то надо его снять и это в доп. информации и описано, конкретно здесь:

CancelStopLoss() – отменить (снять) стоп-заявку, выставленную для защиты текущей позиции робота. Функция используется для отмены или редактирования положения текущего стопа. Повторный вызов функции выставления стопа не снимает старый и не выставляет новый стоп. Поэтому необходимо использовать данную функцию для отмены ранее выставленной заявки.

по поводу trsto это в данном примере конкретная цена, т.е. в примере должно быть задано trsto = 125000 - 200. Текущая позиция минус 200 пунктов. AverPrice() - 200, например.

AverPrice() – возвращает учетную цену открытой позиции

Код: Выделить всё

function Initialize()
{
//...
AddGlobalVariable("TS", Types.Boolean, false);
//...
}

function OnUpdate()
{
//...
if ( условие на лонг)
   {
      EnterLong();
      BreakingStop(sto, tak, SignalPriceType.DeltaFromAveragePrice);
      TS = false;
   }
   
   if (CurrentPL() > 1000 && !TS && CurrentPosition() > 0)
   {
      var trsto = AverRrice() - 200;
      CancelStopLoss();
      TrailingStopLoss(trsto, SignalPriceType.Price)
      TS = true;   
   }
//...
}


но есть варианты типа delta, при установке параметра SignalPriceType

• DeltaFromAveragePrice – значения ValueStop и ValueTake задаются как отклонения от учетной цены позиции робота в валюте цены (значения задаются больше 0, робот сам определяет направление отклонения);
• DeltaInPercentFromAveragePrice – значения ValueStop и ValueTake задаются в виде отклонения от учетной цены открытия позиции робота в процентах (значения задаются больше 0, робот сам определяет направление отклонения).

в этом случае в trsto должно быть уже не конкретное значение цены, а дельта от цены позиции, в пунктах или % в зависимости от параметра SignalPriceType
никогда такого не было и вот опять

Orange2000
Сообщения: 47
Зарегистрирован: 13 мар 2019, 00:45
Благодарил (а): 37 раз
Поблагодарили: 1 раз

Re: StopLoss и TakeProfit

Непрочитанное сообщение Orange2000 » 17 июн 2020, 11:51

я не совсем понял про AverPrice()?
учетная цена, т.е. это цена по которой была открыта позиция ?

В Вашем примере, если цена без отката уйдет на 126000, уровень стопа подтянется на 125800?

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: StopLoss и TakeProfit

Непрочитанное сообщение evge » 17 июн 2020, 12:58

да,

AverPrice() учетная (средняя)

Позицию могли набирать не сразу (частями) и AverPrice() это покажет как среднюю цену (учетную цену)

126000 - 200 = 125800 - да
никогда такого не было и вот опять

Orange2000
Сообщения: 47
Зарегистрирован: 13 мар 2019, 00:45
Благодарил (а): 37 раз
Поблагодарили: 1 раз

Re: StopLoss и TakeProfit

Непрочитанное сообщение Orange2000 » 18 июн 2020, 10:04

Я извиняюсь, возможно туплю. Проверить тестер не даст. Поэтому хочу точно прояснить ситуацию.

по двум строчкам вопрос:
var trsto = AverRrice() - 200; - тут получается если был лонг по 124 000 , то trsto=124000 - 200=123800 ? правильно?

и дальше мне надо что бы если улетим на 126000, то стоп стал 125800.
строчка TrailingStopLoss(123800, SignalPriceType.Price) это ведь не сделает???

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 361 раз
Контактная информация:

Re: StopLoss и TakeProfit

Непрочитанное сообщение evge » 18 июн 2020, 11:17

да. не сделает. эта строчка выставит трейлинг стоп на 2200 от текущей цены (126000), т.е. от цены позиции ниже на 200 пунктов.

Если нужно как описано от 126000 (точнее даже текущей цены, которая выше 126000) - 200, то

trsto задаем по другому

Код: Выделить всё

var trsto = Input1.Close[0] - 200;


на 200 пунктов ниже цены закрытия последнего бара
никогда такого не было и вот опять

Orange2000
Сообщения: 47
Зарегистрирован: 13 мар 2019, 00:45
Благодарил (а): 37 раз
Поблагодарили: 1 раз

Re: StopLoss и TakeProfit

Непрочитанное сообщение Orange2000 » 18 июн 2020, 11:25

Теперь все срослось )))Спасибо огромное


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей