Стратегии и роботы > Установка беубыточного стопа с профитом

Обсуждение, описание стратегий и роботов, идеи для стратегий
dkostiunin
Сообщения: 38
Зарегистрирован: 10 июн 2017, 20:50
Благодарил (а): 1 раз

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение dkostiunin » 11 июн 2017, 13:25

а если написать

StopLoss(-1, SignalPriceType.DeltaInPercentFromAveragePrice);

тогда ведь он выставит на 1% выше учетной цены?

Учитывая более раннее условие заданное, что выставлять такой стоплосс только при достижении текущей цены выше на 3%, от учетной, должно сработать?

или отрицательные значения нельзя использовать?

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

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение evge » 11 июн 2017, 21:25

Может быть сработает, надо пробовать
никогда такого не было и вот опять

vlad195050
Сообщения: 16
Зарегистрирован: 03 июн 2017, 17:50

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение vlad195050 » 19 июн 2017, 16:30

Установил безубыточный стоп как Вы рекомендовали, не работает. что не так? Зто программа для Фьючерса нефти.

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

         function Initialize()
{
   StrategyName = "Нефть с профитом";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");                                                                        AddGlobalVariable("SLSet", Types.Boolean, false)
   LongLimit = 0;
   ShortLimit = 0;
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (Input1.Close > Input1.Close[1]) && (ADX(Input1, 14).GetValue("ADX", 0) > ADX(Input1, 14).GetValue("ADX", 1)) && (CrossAbove(Input1.Close, EMA(Input1.Close, P1)) == true) && (Input1.Close > MY.NRTR(Input1.Close, 0.2)) )
   {
      EnterLong();
      StopLoss(0.2, SignalPriceType.DeltaInPercentFromAveragePrice);
      SLSet = true;                                                                                                                }

   /// ПРАВИЛО 2
   if ( (Input1.Close < Input1.Close[1]) && (ADX(Input1, 14).GetValue("ADX", 0) > ADX(Input1, 14).GetValue("ADX", 1)) && (CrossBelow(Input1.Close, EMA(Input1.Close, P1)) == true) && (Input1.Close < MY.NRTR(Input1.Close, 0.2)) )
   {
      EnterShort();
      StopLoss(0.2, SignalPriceType.DeltaInPercentFromAveragePrice);                                                                                                                                          SLSet = true;
   }

   /// ПРАВИЛО 3
   if ( (CurrentPLper() > 0.2) )         
   {                                                                                                                                                                                                                                                          CancelStopLoss();
   StopLoss(AverPrice() + 2 * GetPriceStep() * CurrentPosition() > 0 ? 1 : -1, SignalPriceType.Price);
   SLSet = false;
   }

}

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

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение evge » 19 июн 2017, 16:50

не проверяете в последнем правиле флаг на установку стопа, но это повлиять не должно было

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

   /// ПРАВИЛО 3
   if ( (CurrentPLper() > 0.2) ) 

заменить на

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

   /// ПРАВИЛО 3
   if ( CurrentPLper() > 0.2 && SLSet ) 
никогда такого не было и вот опять

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

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение evge » 19 июн 2017, 17:10

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

   StopLoss(AverPrice() + 2 * GetPriceStep() * CurrentPosition() > 0 ? 1 : -1, SignalPriceType.Price);

заменить на

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

   StopLoss(AverPrice() + 2 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);


Ранее было с ошибкой, нужно взять в () CurrentPosition() > 0 ? 1 : -1.

Ранее в тексте тоже поправил.
никогда такого не было и вот опять

vlad195050
Сообщения: 16
Зарегистрирован: 03 июн 2017, 17:50

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение vlad195050 » 19 июн 2017, 18:32

Спасибо, теперь заработало!

vlad195050
Сообщения: 16
Зарегистрирован: 03 июн 2017, 17:50

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение vlad195050 » 19 июн 2017, 19:13

Еще один вопрос. Если цена продолжает идти в мою сторону, то можно ли отменить предыдущий стоп с профитом и назначить другой. с более высоким профитом, например:

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

 /// ПРАВИЛО 3
        if ( CurrentPLper() > 0.1 && SLSet )       
   {                                                                                                                                                                                                                                                          CancelStopLoss();
    StopLoss(AverPrice() + 2 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
   SLSet = false;
   }
/// ПРАВИЛО 4
        if ( CurrentPLper() > 0.3 && SLSet )       
   {                                                                                                                                                                                                                                                          CancelStopLoss();
    StopLoss(AverPrice() + 7 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
   SLSet = false;
   }
т . е получить ступенчатый треллинг- стоп .

vlad195050
Сообщения: 16
Зарегистрирован: 03 июн 2017, 17:50

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение vlad195050 » 19 июн 2017, 19:24

То что я написал не отменяет предыдущий стоп с профитом и не переносит на более высокий уровень, ПРАВИЛО 4 НЕ РАБОТАЕТ. Работает только правило 3

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 12 раз
Поблагодарили: 66 раз

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение oxi » 20 июн 2017, 00:04

Всегда срабатывает правило 3 . Его надо ограничить

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

/// ПРАВИЛО 3
if ( CurrentPLper() > 0.1 && CurrentPLper() <= 0.3 && SLSet )
{ CancelStopLoss();
StopLoss(AverPrice() + 2 * GetPriceStep() * (CurrentPosition() > 0 ? 1 : -1), SignalPriceType.Price);
SLSet = false;
}

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

Re: Установка беубыточного стопа с профитом

Непрочитанное сообщение evge » 20 июн 2017, 07:04

oxi писал(а):Всегда срабатывает правило 3


помимо этого, ещё флаг SLSet установлен в false правилом 3 и в правиле 4 не выполнится условие SLSet (true)

лучше вообще переписать код перестановки стопа

Вот полный код с изменениями:

Здесь перенос стопа осуществляется от цены предыдущего стопа, т.е. на учетную цену не ориентируемся.

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

function Initialize()
{
   StrategyName = "BRProfit";
   AddParameter("P1", 30, "", 1);
   
   // % стоплосс при открытии позиции
   AddParameter("StopStart", 0.4, "", 1);
   
   // если текущая цена больше (меньше) на S % от текущей цены стоплосс, то переносим его.
   AddParameter("StopShift", 0.4, "", 1);

   // на какой % цены переносим стоплосс, должен быть не больше StopShift
   AddParameter("StopStep", 0.1, "", 1);
   
   AddInput("Input1", Inputs.Candle, 1, true, "");                                                                       
   
   //Здесь сохраняем цену текущего стоплосс
   AddGlobalVariable("SL", Types.Double, 0.0);
   
   LongLimit = 1;
   ShortLimit = -1;
}

function OnUpdate()
{
   var isLong = (Input1.Close > Input1.Close[1]) && (ADX(Input1, 14).GetValue("ADX", 0) > ADX(Input1, 14).GetValue("ADX", 1)) && (CrossAbove(Input1.Close, EMA(Input1.Close, P1)) == true) && (Input1.Close > MY.NRTR(Input1.Close, 0.2));
   
   var isShort = (Input1.Close < Input1.Close[1]) && (ADX(Input1, 14).GetValue("ADX", 0) > ADX(Input1, 14).GetValue("ADX", 1)) && (CrossBelow(Input1.Close, EMA(Input1.Close, P1)) == true) && (Input1.Close < MY.NRTR(Input1.Close, 0.2));

   // Long
   if ( isLong )
   {
      EnterLong();
      StopLoss(StopStart, SignalPriceType.DeltaInPercentFromAveragePrice);
      SL = Input1.Close - Input1.Close * 0.01 * StopStart;
   }

   // Short
   if ( isShort )
   {
      EnterShort();
      StopLoss(StopStart, SignalPriceType.DeltaInPercentFromAveragePrice);                                                                                                                                         
      SL = Input1.Close + Input1.Close * 0.01 * StopStart;
   }

   // StopLoss
   if ( SL > 0.0 && CurrentPosition() != 0 && (Input1.Close / SL * 100 - 100) * (CurrentPosition() > 0 ? 1 : -1) > StopShift )
   {
   CancelStopLoss();
   var NS = SL + SL * 0.01 * StopStep * (CurrentPosition() > 0 ? 1 : -1);
   StopLoss(NS, SignalPriceType.Price);
   SL = NS;
   }
   
}
никогда такого не было и вот опять


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

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

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