Функция iLowest - страница 2

 
Вот что написал, однако...
 
double MA_temp[];
double MA_min[];
double MA_max[];
 
int MA_min_pos;
int MA_max_pos;
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   int limit;
   limit=Bars-counted_bars;
   
   //----
   for(int j=limit; j>=0; j--)
    {
     MA_temp[j]=iMA(0,0,MA_Period,MA_Shift,MA_Method,MA_Price,j);
    }   
   for(int i=limit-30-MA_Period; i>=0; i--) 
    { 
     MA_min_pos=ArrayMinimum(MA_temp,29,i);
     MA_max_pos=ArrayMaximum(MA_temp,29,i); 
              
     MA_min[i]=MA_temp[MA_min_pos];
     MA_max[i]=MA_temp[MA_max_pos];
    }
 
   return(0);
  }
в индикаторе работает безупречно- в окне данных отображаются все три буфера



однако, если индикатор вызывается с советника- передаётся только первый буфер, ( вот вывод через Print() ), почему ???
а второй и третий выдают какую то ерунду. Что я опять напутал ?
Никак не могу понять в чём дело
 
Where is the Print() here? And where EA?
 
Rosh:
Where is the Print() here? And where EA?

//>>>>>>>>>>>>>>>>>>>>>>> Check Signal>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
int CheckSignal()          
{ 
double up, down;
 
  for(int i=0;i<=5;i++)
   {
    up=iCustom(0,0,"testind",i,1); 
    Print(" Buffer",i,": ",up);
   }
 
 return(0);    
}
//======================= End Check Signal ======================================================
 
 
//>>>>>>>>>>>>>>>>>>  Start  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void start()
 {
   if(Bars<100){ Print(" bars less than 100 "); return;}
   if(CheckSignal()!=0) 
      {
      CheckCloseTrade(); 
      CheckOpenTrade(); 
      if(TrailingStop != 0)   CheckTrailingStop();
      if(BreakEven != 0)      CheckBreakEven();
      }
  
  } 
//======================= End Start =============================================================
параметры в индикатор не передаю, так как экстерных переменных нет
 
такое впечатление, что второй цикл индикатора из эксперта не расчитывается
 
komposter писал (а):

Во-первых, limit=Bars-30-MA_Period-counted_bars
А во-вторых, MA_min[i]=MA_temp[MA_min_pos] а MA_max = MA_temp[MA_max_pos]
Наконец разобрался - чуть не посинел :)
Интерестная штука - вот эта вот вещь
limit=Bars-30-MA_Period-counted_bars;
в индикаторе работает безупречно, а вот из советника делает проблемы - непонятно.
и выходит, все переменные, зависящие от цикла, где limit тким образом представлен - не передаютсья
 
wlad:

//>>>>>>>>>>>>>>>>>>>>>>> Check Signal>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
int CheckSignal()          
{ 
double up, down;
 
  for(int i=0;i<=5;i++)
   {
    up=iCustom(0,0,"testind",i,1); 
    Print(" Buffer",i,": ",up);
   }
 
 return(0);    
}
//======================= End Check Signal ======================================================
 
 
//>>>>>>>>>>>>>>>>>>  Start  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void start()
 {
   if(Bars<100){ Print(" bars less than 100 "); return;}
   if(CheckSignal()!=0) 
      {
      CheckCloseTrade(); 
      CheckOpenTrade(); 
      if(TrailingStop != 0)   CheckTrailingStop();
      if(BreakEven != 0)      CheckBreakEven();
      }
  
  } 
//======================= End Start =============================================================
параметры в индикатор не передаю, так как экстерных переменных нет

Пользовательские индикаторы можно вызывать только с указанием имени инструмента (тип string ) или с указанием макроподстановки NULL. То есть:
int CheckSignal()          
{ 
double up, down;
 
  for(int i=0;i<=5;i++)
   {
    up=iCustom(NULL,0,"testind",i,1); 
     //или
    up=iCustom("EURUSD",0,"testind",i,1); 

    Print(" Buffer",i,": ",up);
   }
 
 return(0);    
}
 
Rosh:

Пользовательские индикаторы можно вызывать только с указанием имени инструмента (тип string ) или с указанием макроподстановки NULL. То есть:
int CheckSignal()          
{ 
double up, down;
 
  for(int i=0;i<=5;i++)
   {
    up=iCustom(NULL,0,"testind",i,1); 
     //или
    up=iCustom("EURUSD",0,"testind",i,1); 

    Print(" Buffer",i,": ",up);
   }
 
 return(0);    
}


спасибо, буду на будующее учитывать
правда результат на данный момент не меняетсья
ошибка была действительно в лимите
 
wlad:
Rosh:

Пользовательские индикаторы можно вызывать только с указанием имени инструмента (тип string ) или с указанием макроподстановки NULL. То есть:
int CheckSignal()          
{ 
double up, down;
 
  for(int i=0;i<=5;i++)
   {
    up=iCustom(NULL,0,"testind",i,1); 
     //или
    up=iCustom("EURUSD",0,"testind",i,1); 

    Print(" Buffer",i,": ",up);
   }
 
 return(0);    
}


спасибо, буду на будующее учитывать
правда результат на данный момент не меняетсья
ошибка была действительно в лимите

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