Подскажите насчет TrailingStop

 

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

Функция TrailingStop() работает, если вместо sl()

вставить постояное значение (например 15*Point).

 


int TrailingStop()

{  


double ts = 1*Point;


double s = sl();


{

for(int i=OrdersTotal()-1;i>=0;i--)

  {

 

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

    {

      if( OrderSymbol()!=Symbol()) continue;

      { 

         if(OrderType()==OP_BUY)

         {

         if(Bid - OrderStopLoss() > s + ts)

         OrderModify(OrderTicket(),OrderOpenPrice(),Bid - s,OrderTakeProfit(),0,CLR_NONE);  

         }

         if(OrderType() == OP_SELL)

         {

         if(OrderStopLoss() - Ask > s + ts)

         OrderModify(OrderTicket(),OrderOpenPrice(),Ask + s,OrderTakeProfit(),0,CLR_NONE);

         }

      }

    }

  }

 } 

 return(0);

 } 


Почему она не работает если я использую функцию sl()?

 double sl()

{

double s = 0, h = 0, l = 0, r = 0;

for(int i = 1; i <= 50; i++)

  {

  h = iHigh(Symbol(),1440,i);

  l = iLow(Symbol(),1440,i);

  s += h - l;

  }

r = NormalizeDouble(s/50/k,4);  

return(r);

}

 

Наверное потому что в строке r = NormalizeDouble(s/50/k,4);  

Вы пытаетесь поделить на ноль, т.к. "к" еще не определена.

 
Определена как input переменная
 

Извините!

Спасибо что указали (не тот коэффициент использовала).

Все работает. 

Причина обращения: