Lowest, Highest

 
В эксперте используется Эти функции, но почемуто при открытии позиции в столбце S/L одни нули стоят. Вот фрагмент:
   if (OrdersTotal()>=1)
      {
      if (OrderType()==OP_SELL)
         {
         SL=Highest(NULL,0,MODE_HIGH,NBars,0);
         }
      if (OrderType()==OP_BUY)
         {
         SL=Lowest(NULL,0,MODE_LOW,NBars,0);
         }
      return(0);
      }       
   
   AverageCur = iMA(NULL,0,Length,0,MODE_SMA,PRICE_CLOSE,1);
   AveragePre = iMA(NULL,0,Length,0,MODE_SMA,PRICE_CLOSE,2);
   
   if ((AverageCur > AveragePre) && (Close[1] < Open[1]) && (Close[2] > Open[2])
      && (Close[1] < Open[2]) && (Open[1] > Close[2]) && ((Open[1]-Close[1]) > 0.0010)
      /*&& (iRSI(NULL,0,LenRSI,PRICE_CLOSE,1) >= 70)*/) 
      {
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,Bid-TakeProfit*Points,001,0,Blue);
      SetIndexArrow(0,226);
      return(0);
      }
 
функции Highest и Lowest возвращают индекс максимального или минимального значения, а не само значение
 
функции Highest и Lowest возвращают индекс максимального или минимального значения, а не само значение

А как мне найти значение?
 
функции Highest и Lowest возвращают индекс максимального или минимального значения, а не само значение

А как мне найти значение?

Обратиться по индексу к нужному массиву: Time[index], High[index], etc
 
функции Highest и Lowest возвращают индекс максимального или минимального значения, а не само значение

А как мне найти значение?

Обратиться по индексу к нужному массиву: Time[index], High[index], etc

Исправил
 if (OrdersTotal()>=1)
      {
      if (OrderType()==OP_SELL)
         {
         SL=High[Highest(NULL,0,MODE_HIGH,NBars,0)];
         }
      if (OrderType()==OP_BUY)
         {
         SL=Low[Lowest(NULL,0,MODE_LOW,NBars,0)];
         }
      return(0);
      }       


Ничего не изменилось

 
 
А где вызов OrderSelect?

Если вот так:
for(cnt=0;cnt<OrdersTotal();cnt++) 
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrdersTotal()>=1)
         {
         if (OrderType()==OP_SELL)
            {
            SL=High[Highest(NULL,0,MODE_HIGH,NBars,1)];
            }
         if (OrderType()==OP_BUY)
            {
            SL=Low[Lowest(NULL,0,MODE_LOW,NBars,1)];
            }
         return(0);
         }
      }      


Тоже нету SL.

 
В данном случае if (OrdersTotal()>=1) лишний оператор.
Кроме того непонятен смысл оператора return(0) - это выход из функции.
После него ничего в функции выполняться не будет до следующего тика.
(это очень вероятная причина)

Ну и поставте вывод в лог (Print(sl, .....))
 
В данном случае if (OrdersTotal()>=1) лишний оператор.
Кроме того непонятен смысл оператора return(0) - это выход из функции.
После него ничего в функции выполняться не будет до следующего тика.
(это очень вероятная причина)

Ну и поставте вывод в лог (Print(sl, .....))

for(cnt=0;cnt<OrdersTotal();cnt++) 
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderType()==OP_SELL)
         {
         SL=High[Highest(NULL,0,MODE_HIGH,NBars,1)];
         }
      if (OrderType()==OP_BUY)
         {
         SL=Low[Lowest(NULL,0,MODE_LOW,NBars,1)];
         }
     }
   Print("SL ",SL);


Опять SL 0. Что еще может быть?

 
:))
Может не быть ордеров типа OP_SELL, OP_BUY.
Может вообще не быть ордеров ...
Поставте принт после каждого оператора ... :)

Текст вроде бы правильный, а логика ....
Это только вам известно ...
 
:))
Может не быть ордеров типа OP_SELL, OP_BUY.
Может вообще не быть ордеров ...
Поставте принт после каждого оператора ... :)

Текст вроде бы правильный, а логика ....
Это только вам известно ...

Ордера были, ведь позиции открывались, пока все условия совпадали, интересно вот что, если
Comment("SL= ",SL);, на экране SL=0, если Comment("SL= ", Low[Lowest(NULL,0,MODE_LOW,NBars,1)]), тада все правильно показывает. Почему? Не понятно.
Причина обращения: