iATR MQL4 to MQL5

 

Есть индикатор который был написан на MQL4 в нем используется

https://docs.mql4.com/ru/indicators/iatr

в новом он же https://www.mql5.com/ru/docs/indicators/iatr

только там уже возвращается хендл на iATR

последнее значение из массива iATR MQL5  = результат iATR MQL4 ?

iATR - Технические индикаторы - Справочник MQL4
iATR - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
iATR - Технические индикаторы - Справочник MQL4
 
Pro2x:

Есть индикатор который был написан на MQL4 в нем используется

https://docs.mql4.com/ru/indicators/iatr

в новом он же https://www.mql5.com/ru/docs/indicators/iatr

только там уже возвращается хендл на iATR

последнее значение из массива iATR MQL5  = результат iATR MQL4 ?


Есть хорошая статья по переходу с MQL4 на MQL5

https://www.mql5.com/ru/articles/81

Добавлю свои пять копеек :) там есть функция

double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }

теперь:

1. Зачем динамический массив куда эффективнее статический

2. Зачем после return идет команда break она не когда не выполнится

3. Зачем вообще нужен switch можно проще сделать

//+------------------------------------------------------------------+ 
//| Copy CopyBuffer function from MQL4                               | 
//+------------------------------------------------------------------+ 
double CopyBufferMQL4(int handle, int index, int shift) {
  //--- Инициализация 
  double buf[1];
  //--- Если удалось скопировать то возвращаем значение 
  if (CopyBuffer(handle, index, shift, 1, buf) > 0) return(buf[0]);
  //--- Иначе пустое значение из индикаторного буфера
  else return(EMPTY_VALUE);
}

Главное можно напороться на проблему второго параметра в функции CopyBuffer

>> номер буфера индикатора

ладно если один индикатор а если несколько,

Вопрос к разработчикам MQL5:

зачем нужен второй параметр в функции CopyBuffer  если у нас и так есть handle ?

То есть нужны просто значения без привязки к графическим объектам.

Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • 2010.05.11
  • Sergey Pavlov
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 

И ещё инициализацию лучше индикатора выносить в OnInit

насчет второго параметра в функции CopyBuffer  странно но видимо это не одно и тоже 

номер буфера индикатора != номер буфера индикатора (индекс буфера)

https://www.mql5.com/ru/docs/customind/setindexbuffer

Документация по MQL5: Пользовательские индикаторы / SetIndexBuffer
Документация по MQL5: Пользовательские индикаторы / SetIndexBuffer
  • www.mql5.com
Пользовательские индикаторы / SetIndexBuffer - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Причина обращения: