Вопросы от "чайника" - страница 65

 
x100intraday:

 При вызову моей функции передать массив по ссылке, через указатель или как-то ещё?  

Прочитайте раздел Справочника про передачу параметров по значению и по ссылке:

Справочник MQL5 / Основы языка / Функции / Передача параметров  

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Yedelkin:

Прочитайте раздел Справочника про передачу параметров по значению и по ссылке:

Справочник MQL5 / Основы языка / Функции / Передача параметров  

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

 Сейчас перечитал повнимательнее - всё дело в const и в том, куда его приткнуть. 

 Спасибо, разобрался.

 
x100intraday:

 В OnCalculate я с лёгкостью могу использовать элементы массива вроде high по индексу. Возможно ли так же доступиться к индексным элементам этого массива в ExtFunc? При вызове моей функции передать массив-аргумент по ссылке, через указатель или как-то ещё? Пока удалось минимизировать сообщения об ошибках до: "'high' - parameter conversion is not allowed" и "'high' - constant variable cannot be passed as reference" в отношении одной и той же строки вызова моей функции с аргументом-массивом из OnCalculate. Безнадёжно или есть решение?

 Пока в OnCalculate прибегаю к копированию high в другой массив:

а затем использую CopyOfHigh в ExtFunc вместо прямого использования high-массива.

 

Надо просто передать массив в вашу функцию по ссылке

bool ExtFunc (string str, int P, int i, double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

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[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 

Всех приветствую! 

Что означает предупреждение:

possible loss of data due to type conversion эксперт.mq5 

при компиляции???  Ругается вот на это:

   string Symb="EURJPY";
   int DIGITS = SymbolInfoInteger(Symb,SYMBOL_DIGITS);

 что не так?

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
sergey1294:

Надо просто передать массив в вашу функцию по ссылке

Не совсем так:

bool ExtFunc (string str, int P, int i, const double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

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[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 
RomanS:

Всех приветствую! 

Что означает предупреждение:

possible loss of data due to type conversion эксперт.mq5 

при компиляции???  Ругается вот на это:

 что не так?

Функция SymbolInfoInteger() возвращает значение типа long (см. Справочник), а DIGITS у Вас объявлен как int. Вот и происходит неявное приведение типов. Смотрите раздел "Приведение типов". 
 
RomanS:

Что означает предупреждение:

possible loss of data due to type conversion

Значение этого сообщение различно, в зависимости от контекста в котором оно рассматривается.

Например:

1.  "Сделайте явное приведение типов!" 

   int DIGITS = (int)SymbolInfoInteger(Symb,SYMBOL_DIGITS);

2. "Возможна подеря данных при неявном приведении типов."  // Это дословный перевод.

   Это понятно, так как тип лонг, возвращаемый функцией, имеет больший размер и покрывает более широкий диапазон значений.

Ещё вариант, который мне чаще всего приходит в голову в последнее время:

3.  "Сотрудники MetaQuotes не понимают, как было бы круто, привлекательно, и эффективно для изучения, если бы сообщения об ошибках и предупреждения компилятора mql5 выдавались на родном языке пользователя."

 
MetaDriver:

... как было бы круто, привлекательно, и эффективно для изучения, если бы сообщения об ошибках и предупреждения компилятора mql5 выдавались на родном языке пользователя."

Да было бы не плохо. Хоть я лично уже подкован немного в английском, да и переводчиков сейчас пруд пруди, но это опять же отнимает то драгоценное время, которого не так много. У некоторых его очень мало, чтобы ещё и в переводчик лезть при и так весьма сложной теме, которая касается торговли на финансовых рынках + программирование. MetaTrader 5 ведь многоязычная платформа. Пусть бы и сообщения и комментарии в примерах справки (попадается иногда) были на том языке, который выбран в терминале.
 

Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?

Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ? 

 
masharov:

Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?

Всё зависит от того, какая логика заложена в пользовательский индикатор. В принципе, может и раз в сутки пересчитывать свои значения, пропуская все остальные тики. По воле автора, так сказать.

masharov:

Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ? 

 В принципе, некоторые пытаются использовать такой чудовищный подход: создать копию индикатора через iCustom, скопировать нужные данные, уничтожить копию индикатора. По мере необходимости процедуру повторяют.

 ..Ещё есть функция OnTimer(). Сам с ней не работал, но, может быть, Вам удастся её скомпоновать под свою задачу.

Причина обращения: