В 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);
}
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i=0;
if ExtFunc("s",60,i,high) == 1)
Buffer[i] = high[i];
}
Функция SymbolInfoInteger() возвращает значение типа long (см. Справочник), а DIGITS у Вас объявлен как int. Вот и происходит неявное приведение типов. Смотрите раздел "Приведение типов".
Значение этого сообщение различно, в зависимости от контекста в котором оно рассматривается.
Например:
1. "Сделайте явное приведение типов!"
int DIGITS = (int)SymbolInfoInteger(Symb,SYMBOL_DIGITS);
2. "Возможна подеря данных при неявном приведении типов." // Это дословный перевод.
Это понятно, так как тип лонг, возвращаемый функцией, имеет больший размер и покрывает более широкий диапазон значений.
Ещё вариант, который мне чаще всего приходит в голову в последнее время:
3. "Сотрудники MetaQuotes не понимают, как было бы круто, привлекательно, и эффективно для изучения, если бы сообщения об ошибках и предупреждения компилятора mql5 выдавались на родном языке пользователя."
... как было бы круто, привлекательно, и эффективно для изучения, если бы сообщения об ошибках и предупреждения компилятора mql5 выдавались на родном языке пользователя."
Да было бы не плохо. Хоть я лично уже подкован немного в английском, да и переводчиков сейчас пруд пруди, но это опять же отнимает то драгоценное время, которого не так много. У некоторых его очень мало, чтобы ещё и в переводчик лезть при и так весьма сложной теме, которая касается торговли на финансовых рынках + программирование. MetaTrader 5 ведь многоязычная платформа. Пусть бы и сообщения и комментарии в примерах справки (попадается иногда) были на том языке, который выбран в терминале.
Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?
Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ?
Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?
Всё зависит от того, какая логика заложена в пользовательский индикатор. В принципе, может и раз в сутки пересчитывать свои значения, пропуская все остальные тики. По воле автора, так сказать.
masharov:
Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ?
В принципе, некоторые пытаются использовать такой чудовищный подход: создать копию индикатора через iCustom, скопировать нужные данные, уничтожить копию индикатора. По мере необходимости процедуру повторяют.
..Ещё есть функция OnTimer(). Сам с ней не работал, но, может быть, Вам удастся её скомпоновать под свою задачу.
При вызову моей функции передать массив по ссылке, через указатель или как-то ещё?
Прочитайте раздел Справочника про передачу параметров по значению и по ссылке:
Справочник MQL5 / Основы языка / Функции / Передача параметров
Прочитайте раздел Справочника про передачу параметров по значению и по ссылке:
Справочник MQL5 / Основы языка / Функции / Передача параметров
В общем-то, я только что оттуда и указанные в предыдущем сообщении ошибки компиляции были как раз после прочтения раздела.
Сейчас перечитал повнимательнее - всё дело в const и в том, куда его приткнуть.
Спасибо, разобрался.
В OnCalculate я с лёгкостью могу использовать элементы массива вроде high по индексу. Возможно ли так же доступиться к индексным элементам этого массива в ExtFunc? При вызове моей функции передать массив-аргумент по ссылке, через указатель или как-то ещё? Пока удалось минимизировать сообщения об ошибках до: "'high' - parameter conversion is not allowed" и "'high' - constant variable cannot be passed as reference" в отношении одной и той же строки вызова моей функции с аргументом-массивом из OnCalculate. Безнадёжно или есть решение?
Пока в OnCalculate прибегаю к копированию high в другой массив:
а затем использую CopyOfHigh в ExtFunc вместо прямого использования high-массива.Надо просто передать массив в вашу функцию по ссылке
Всех приветствую!
Что означает предупреждение:
possible loss of data due to type conversion эксперт.mq5
при компиляции??? Ругается вот на это:
что не так?
Надо просто передать массив в вашу функцию по ссылке
Не совсем так:
Всех приветствую!
Что означает предупреждение:
possible loss of data due to type conversion эксперт.mq5
при компиляции??? Ругается вот на это:
что не так?
Что означает предупреждение:
possible loss of data due to type conversion
Значение этого сообщение различно, в зависимости от контекста в котором оно рассматривается.
Например:
1. "Сделайте явное приведение типов!"
2. "Возможна подеря данных при неявном приведении типов." // Это дословный перевод.
Это понятно, так как тип лонг, возвращаемый функцией, имеет больший размер и покрывает более широкий диапазон значений.
Ещё вариант, который мне чаще всего приходит в голову в последнее время:
3. "Сотрудники MetaQuotes не понимают, как было бы круто, привлекательно, и эффективно для изучения, если бы сообщения об ошибках и предупреждения компилятора mql5 выдавались на родном языке пользователя."
... как было бы круто, привлекательно, и эффективно для изучения, если бы сообщения об ошибках и предупреждения компилятора mql5 выдавались на родном языке пользователя."
Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?
Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ?
Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?
Всё зависит от того, какая логика заложена в пользовательский индикатор. В принципе, может и раз в сутки пересчитывать свои значения, пропуская все остальные тики. По воле автора, так сказать.
Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ?
В принципе, некоторые пытаются использовать такой чудовищный подход: создать копию индикатора через iCustom, скопировать нужные данные, уничтожить копию индикатора. По мере необходимости процедуру повторяют.
..Ещё есть функция OnTimer(). Сам с ней не работал, но, может быть, Вам удастся её скомпоновать под свою задачу.