Скачать MetaTrader 5

МТ4 - непонятные параметры в OnCalculate(...)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Volchanskiy
20878
Alexey Volchanskiy  

Сейчас обратил внимание, что в примере \MQL4\Indicators\Examples\SimplePanel\SimplePanel.mq4 в обработчике события объявлены 4 параметра вместо 11, причем параметр begin не передается, как массив по ссылке, а как просто const int

Как это понимать? Как какие-то очередные выверты в духе "старого" MQL4, который вообще никаким стандартам не соответствовал?

 Из SimplePanel.mq4

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
// do nothing
//--- return value of prev_calculated for next call
   return(rates_total);
  }

 Пример их Справки

//+------------------------------------------------------------------+ 
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+ 
int OnCalculate(const int rates_total, 
                const int prev_calculated, 
                const datetime& time[], 
                const double& open[], 
                const double& high[], 
                const double& low[], 
                const double& close[], 
                const long& tick_volume[], 
                const long& volume[], 
                const int& spread[]) 
  { 
Alexander Bereznyak
23259
Alexander Bereznyak  
в MQL5 есть оба эти формата
Alexey Volchanskiy
20878
Alexey Volchanskiy  
Alexander Bereznyak:
в MQL5 есть оба эти формата
Спасибо, и правда так. А в МТ4 в Справке только один формат - с 11 параметрами, хотя все компилируется и с 4-мя. Написал в СД.
Alexey Volchanskiy
20878
Alexey Volchanskiy  
Alexey Volchanskiy:
Спасибо, и правда так. А в МТ4 в Справке только один формат - с 11 параметрами, хотя все компилируется и с 4-мя. Написал в СД.
В СД ответили, что поддерживается только формат с 11 параметрами, а то, что с 4-мя компилируется, но не работает - задел на будущее.
Slava
Модератор
6961
Slava  
Alexey Volchanskiy:
В СД ответили, что поддерживается только формат с 11 параметрами, а то, что с 4-мя компилируется, но не работает - задел на будущее.

Про задел на будущее разве кто-то говорил.?

В четвёрке вряд ли будет OnCalculate на одном ценовом массиве. Только на всех таймсериях

Slava
Модератор
6961
Slava  
Alexey Volchanskiy:

Сейчас обратил внимание, что в примере \MQL4\Indicators\Examples\SimplePanel\SimplePanel.mq4 в обработчике события объявлены 4 параметра вместо 11, причем параметр begin не передается, как массив по ссылке, а как просто const int

Как это понимать? Как какие-то очередные выверты в духе "старого" MQL4, который вообще никаким стандартам не соответствовал?

 Из SimplePanel.mq4

 Пример их Справки

Это просто взяли готовый пример из пятёрки, переименовали в mq4, скомпилировали и запустили. Всё заработало

Для панелей входные данные для расчётов никак не используются, поэтому OnCalculate может быть любым

Alexey Volchanskiy
20878
Alexey Volchanskiy  
Slawa:

Про задел на будущее разве кто-то говорил.?

В четвёрке вряд ли будет OnCalculate на одном ценовом массиве. Только на всех таймсериях

Про задел на будущее я спросил )) Получил ответ - Да. 

-----------------------------------

Support Team 2015.11.16 12:53

В четвёрке не поддерживается OnCalculate на буфере ценовых данных.

Только OnCalculate с таймсериями

Alexey Volchanskiy 2015.11.16 15:19

В самом деле, при запуске примера пишет

2015.11.16 17:15:21.813 SimplePanel EURUSD.e,M1: indicator on custom buffer is not supported yet

Почему тогда пример компилируется - задел на будущее?

SimplePanel.mq4

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
// do nothing
//--- return value of prev_calculated for next call
    Print("price[0]= ", DoubleToString(price[0], Digits()),    "price[1]=",  DoubleToString(price[1], Digits()));
   return(rates_total);
  }

 

Support Team 2015.11.16 15:20

VDev #

задел на будущее?

Да 

----------------------------------- 

Alexey Volchanskiy
20878
Alexey Volchanskiy  
Slawa:

Это просто взяли готовый пример из пятёрки, переименовали в mq4, скомпилировали и запустили. Всё заработало

Для панелей входные данные для расчётов никак не используются, поэтому OnCalculate может быть любым

Про готовый пример я догадался. А вот про допущения при компиляции, исходя из того, используются данные или нет - это новость.
Slava
Модератор
6961
Slava  

Компилятор настолько умный, что контролирует наличие функции OnCalculate в компилируемом индикаторе.

А использовать входные данные или нет - это дело разработчика

Alexey Volchanskiy
20878
Alexey Volchanskiy  
Slawa:

Компилятор настолько умный, что контролирует наличие функции OnCalculate в компилируемом индикаторе.

А использовать входные данные или нет - это дело разработчика

Он не умный, а с недоработками. Если вызов функции с такими параметрами не поддерживается, должна быть выдана ошибка компиляции. Понятно, что копипастить из исходников компилятора МТ5 в исходники  МТ4 проще всего, но это непорядок, ибо ведет к бардаку.
Slava
Модератор
6961
Slava  

А общность кода?

Зачем ошибка компиляции? Вы можете писать любую свою функцию с любыми параметрами по правилам MQL4. В том числе такую OnCalculate

И вообще сообщение о неприменимости данного формата OnCalculate выводится в журнал при загрузке индикатора и то при отсутствии "правильной" OnCalculate

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий