Советники: Parabolic_TrailingStop

 

Parabolic_TrailingStop:

Утилита для ведения трейлинг стопа по индикатору "Parabolic SAR".

Значение Stop Loss открытой позиции меняется при осуществлении следующих условий:

  1. Значение индикатора "Parabolic SAR" на индексе 1 больше/меньше цены открытия (для сделок buy и sell, соответственно);
  2. Значение индикатора "Parabolic SAR" на индексе 1 меньше/больше Low/High бара с индексом 1 (для сделок buy и sell, соответственно);
  3. Индикатор "Parabolic SAR" на индексе 1 сформирован после времени открытия позиции.

Входные параметры утилиты:

  • base_tf - таймфрейм, по которому будет формироваться индикатор "Parabolic SAR" для изменения Stop Loss позиции;
  • SAR_step - шаг изменения цены (параметр индикатора "Parabolic SAR", по умолчанию 0.1);
  • maximum_step - максимум изменения цены (параметр индикатора "Parabolic SAR", по умолчанию 0.11);

Входные параметры

Изменение значения Stop Loss открытой позиции

Автор: Almat Kaldybay

 

лучше использовать такой способ модификации:

  double OP_double,TP_double;
   int P_type,P_opentime;
   string P_symbol;
   if(PositionsTotal()>0)
     {
      for(int i=PositionsTotal();i>=0;i--)
        {
         if(PositionGetTicket(i))
           {
            OP_double=double (PositionGetDouble(POSITION_PRICE_OPEN));
            TP_double=double (PositionGetDouble(POSITION_TP));
            P_type=int(PositionGetInteger(POSITION_TYPE));
            P_opentime=int(PositionGetInteger(POSITION_TIME));
            P_symbol=string(PositionGetString(POSITION_SYMBOL));
            if(P_symbol==Symbol())
              {
               if(P_type==0 && Sar_array_base[1]>OP_double && Sar_array_base[1]<Low_base[1] && Sar_time_base[1]>P_opentime)
                 {
                  trade.PositionModify(PositionGetInteger(POSITION_TICKET),Sar_array_base[1],TP_double);
                 }
               if(P_type==1 && Sar_array_base[1]<OP_double && Sar_array_base[1]>High_base[1] && Sar_time_base[1]>P_opentime)
                 {
                  trade.PositionModify(PositionGetInteger(POSITION_TICKET),Sar_array_base[1],TP_double);
                 }
              }
           }
        }
     }
Причина обращения: