Ошибки, баги, вопросы - страница 276

 
Yedelkin:
Посмотрите     Справочник MQL5 / Технические индикаторы / iCustom

большое спасибо за оперативность) 

 

По теме. Я почти уловил, но СОВЕТНИК не запускается в журнале терминала пишет


removed

loaded successfully


заработало!!
 

здесь у вас ошибка

   v161_handle=iCustom(NULL,0,"ErolМТ5");                            
   v162_handle=iCustom(NULL,0,"ErolМТ5");
   Sum_handle=iCustom(NULL,0,"ErolМТ5");
в данном случае все три переменные будут иметь один и тот же хендл. так как вы вызываете три раза один и тот же индикатор.
 
sergey1294:

здесь у вас ошибка

в данном случае все три переменные будут иметь один и тот же хендл. так как вы вызываете три раза один и тот же индикатор.

Да но как я понял, значения индексов линий индикатора (значения 3-х линий)

мы получаем через:

CopyBuffer(v161_handle,1,0,3,Spr1Buffer)
CopyBuffer(v162_handle,2,0,3,Spr2Buffer)
CopyBuffer(Sum_handle,4,0,3,SumBuffer)

здесь 1, 2 и 4 - значения индексов линий индикатора, которые хранятся в буфере,

которые потом мы сравниваем между собой.

Но это не беда, у меня он не расчитывает правильно по этим индексам линий индикатора

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Линии индикаторов - Документация по MQL5
 

Подскажите куда пойти или чегось тут сделать.


void OnTick()
{  
   ArraySetAsSeries(Spr1Buffer,true);
   ArraySetAsSeries(Spr2Buffer,true);
   ArraySetAsSeries(SumBuffer,true);

   if(CopyBuffer(v161_handle,1,0,3,Spr1Buffer)<0 || CopyBuffer(v162_handle,2,0,3,Spr2Buffer)<0 || CopyBuffer(Sum_handle,4,0,3,SumBuffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      }
   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
   bool SellSum1 =(SumBuffer[1]>=Sp);
   if(SellSpr1 && SellSum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =(Spr1Buffer[1] < Spr2Buffer[1]);
   bool BuySum1 =(SumBuffer[1]>=Sp);
   if(BuySpr1 && BuySum1 && !PositionSelect(_Symbol))     
      {
        PositionOpenBuy1();
      }
 
alexluek:

Да но как я понял, значения индексов линий индикатора (значения 3-х линий)

мы получаем через:

здесь 1, 2 и 4 - значения индексов линий индикатора, которые хранятся в буфере,

которые потом мы сравниваем между собой.

Но это не беда, у меня он не расчитывает правильно по этим индексам линий индикатора

Достаточно загрузить одну копию индикатора, и обращаться уже через копибуфер уже к нужному индкесу буфера
 
sergey1294:
Достаточно загрузить одну копию индикатора, и обращаться уже через копибуфер уже к нужному индкесу буфера

не не то, не получается получить значения 2-й линии

т.к. сравниваются значения 2 индексов линий хранящихся в разных буферах.


   bool SellSpr1 =(Spr1Buffer[1] > Spr2Buffer[1]);
 
alexluek:

не не то, не получается получить значения 2-й линии

т.к. сравниваются значения 2 индексов линий хранящихся в разных буферах.


возможно ошибки есть в самом индикаторе
 
sergey1294:
возможно ошибки есть в самом индикаторе

 индикатор считает правильно

 

Спасение утопающих - дело рук самих утопающих.

На будущее может кому пригодится:

Для вызова в советнике 2 и больше значений линий индикатора нв текущий бар

нужно выбрать 1 хэндл и вызвать индюк, потом через копибуфер сохр. знач. индексов

а потом работать с этими буферами. sergey1294 спасибо за помощь!

int OnInit()
  {
   v161_handle=iCustom(NULL,0,"LeroyMТ5");                            
   if(v161_handle<0)
     {
      Alert("Ошибка при создании индикаторов: ",GetLastError());
      return(-1);
     }
   return(0);
  }


void OnTick()
{  
   ArraySetAsSeries(Sp1Buffer,true);
   ArraySetAsSeries(Sp2Buffer,true);
   ArraySetAsSeries(Sp3Buffer,true);
   if(CopyBuffer(v161_handle,1,0,1,Sp1Buffer)<0 || CopyBuffer(v161_handle,2,0,1,Sp2Buffer)<0 || CopyBuffer(v161_handle,4,0,1,Sp3Buffer)<0)
      {
      Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
      return;
      }    
   bool SellSpr1 =( Sp1Buffer[0]> Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(SellSpr1  && !PositionSelect(_Symbol))     
      {
        PositionOpenSell1();
      }
   bool BuySpr1 =( Sp1Buffer[0]< Sp2Buffer[0] && Sp3Buffer[0]>=Sp );
   if(BuySpr1 && !PositionSelect(_Symbol));   
      {
        PositionOpenBuy1();
      }
}     
Причина обращения: