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

Обсуждение, описание стратегий и роботов, идеи для стратегий
ilya0610
Сообщения: 16
Зарегистрирован: 03 май 2018, 21:20

StopLoss и TakeProfit

Непрочитанное сообщение ilya0610 » 20 авг 2018, 20:10

Здравствуйте, просьба рассказать, как правильно ставить стопы и профит при создание робота, приведу пример, у нас появляется красная свеча, мы открываем шорт и устанавливаем тейк на определенной цене(у меня в коде через процент, как лучше сделать, чтобы от цены), и тоже самое со стопом, далее если сработал одно из действий, то хотелось бы остановить робота без дальнейшего открытия позиции, если наоборот, то есть зеленая свеча, то открываем лонг и расставляем стопы и тейки и ждем, пока не наступит какое-либо событие и выключаем робота

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

/**

**/

function Initialize()
{
   StrategyName = "Forts_bar";
   AddParameter("procent_stop", 0, "", 1);
   AddParameter("procent_take", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 0;
   ShortLimit = 0;
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (Input1.Open < Input1.Close) )
   {
   
      EnterLong();
      BreakingStop(procent_stop, procent_take, SignalPriceType.DeltaInPercentFromAveragePrice);
      Stop()
   }

   /// ПРАВИЛО 2
   if ( (Input1.Open > Input1.Close) )
   {
   
      EnterShort();
      BreakingStop(procent_stop, procent_take, SignalPriceType.DeltaInPercentFromAveragePrice);
      Stop()
   }

}



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

Re: StopLoss и TakeProfit

Непрочитанное сообщение evge » 21 авг 2018, 09:37

ilya0610 писал(а):Здравствуйте, просьба рассказать, как правильно ставить стопы и профит при создание робота


Здравствуйте!

Из документации:

Закрытие позиции по стопу

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

Пример. Выставление стопа на уровне минимума текущего бара

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

StopLoss(Input1.Low[0], SignalPriceType.Price);

Пример. Выставление стопа на уровне 1.2 рубля от цены открытия позиции

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

StopLoss(1.2, SignalPriceType.DeltaFromAveragePrice);

Пример. Выставление стопа на уровне 0.5% от цены открытия позиции

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

StopLoss(0.5, SignalPriceType.DeltaInPercentFromAveragePrice);


Пример. Выставление стопа на уровне 0.5% и тейк профита на уровне 2,0% от цены открытия позиции

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

BreakingStop(0.5, 2.0, SignalPriceType.DeltaInPercentFromAveragePrice);
никогда такого не было и вот опять

ilya0610
Сообщения: 16
Зарегистрирован: 03 май 2018, 21:20

Re: StopLoss и TakeProfit

Непрочитанное сообщение ilya0610 » 21 авг 2018, 18:49

А есть вариант остановить работу робота, пока не будет исполнен выставденный стоп заявка?

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

Re: StopLoss и TakeProfit

Непрочитанное сообщение evge » 21 авг 2018, 19:14

В условиях на открытие позиции можно добавить проверку на текущую позицию и открывать позицию только если текущей позиции нет.
Пока не исполнится ваш BRS ордер робот будет в ожидании:

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

/**

**/

function Initialize()
{
   StrategyName = "Forts_bar";
   AddParameter("procent_stop", 0, "", 1);
   AddParameter("procent_take", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 0;
   ShortLimit = 0;
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( Input1.Open < Input1.Close && CurrentPosition() == 0)
   {
   
      EnterLong();
      BreakingStop(procent_stop, procent_take, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

   /// ПРАВИЛО 2
   if ( Input1.Open > Input1.Close && CurrentPosition() == 0 )
   {
   
      EnterShort();
      BreakingStop(procent_stop, procent_take, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

}
никогда такого не было и вот опять

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

Re: StopLoss и TakeProfit

Непрочитанное сообщение Orange2000 » 27 мар 2020, 01:13

а как правильно trail stop прописать? на примере, например трайлинг 500пп.

что нужно указывать после SignalPriceType. ?

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

Re: StopLoss и TakeProfit

Непрочитанное сообщение evge » 27 мар 2020, 10:53

DeltaFromAveragePrice

TrailingStopLoss(500, SignalPriceType.DeltaFromAveragePrice);
никогда такого не было и вот опять

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

Re: StopLoss и TakeProfit

Непрочитанное сообщение Orange2000 » 27 мар 2020, 13:24

Евгений, приветствую.
Так и сделал, но не работает как трейлинг.
Т.е. код

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

if ( (delta[0] > line[0] && delta[1] < line[1]) && (oi > line2) )
   {
         EnterLong();
         TrailingStopLoss(sto, SignalPriceType.DeltaFromAveragePrice);

            }


работает при тесте так же как:

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

if ( (delta[0] > line[0] && delta[1] < line[1]) && (oi > line2) )
   {
         EnterLong();
         StopLoss(sto, SignalPriceType.DeltaFromAveragePrice);

            }

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

Re: StopLoss и TakeProfit

Непрочитанное сообщение evge » 27 мар 2020, 13:40

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

Только в живую или в советнике и смотреть потом отчет.

В тестировании трейлинг будет работать как обычный стоп.
никогда такого не было и вот опять

BugsDigger
Сообщения: 533
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 91 раз

Re: StopLoss и TakeProfit

Непрочитанное сообщение BugsDigger » 27 мар 2020, 17:16

> не тестируется, т.к. внутри бара нет информации

При желании все же можно было бы сделать тестирование по худшему/лучшему/рандомному (на выбор пользователя) сценарию срабатывания следящего стопа внутри бара. Конечно, такое тестирование не даст абсолютно точной картины (тестирование и так не дает ее в любом случае), но даст больше возможностей для тестов.

Дорогие разработчики, пожалуйста, сделайте такую фичу, это не д.б. так уж трудно.

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

Re: StopLoss и TakeProfit

Непрочитанное сообщение Orange2000 » 16 июн 2020, 23:22

Евгений, приветствую. Спрошу тут, вроде тоже по теме стопов.

есть конструкция:

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

if ( условие на лонг)
   {
      EnterLong();
       BreakingStop(sto, tak, SignalPriceType.DeltaFromAveragePrice);
   }


нужно вписать сюда трейлинг стоп, но что бы он включался только когда прибыль от лонга превысит 1000 пп.


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

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

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