Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 503

 
Vladimir Fionov:
По валютной паре если ставить ограничение все работает, а вот по таймфрейму почемуто не работает, дже если ставишь на h1 индикатор не работает

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes 

 Возвращаемое значение Период текущего графика (в минутах).

if(Period() != 60)  return(-1); // для H1

 Попробуйте, может так заработает.

if(Period() != PERIOD_H1)  return(-1);

 Или убрать кавычки.

Period - Документация на MQL4
  • docs.mql4.com
Period - Документация на MQL4
 
Vladimir Zubov:

https://docs.mql4.com/ru/chart_operations/periodwindow

https://docs.mql4.com/ru/constants/chartconstants/enum_timeframes 

 Возвращаемое значение Период текущего графика (в минутах).

 Попробуйте, может так заработает.

Спасибо большое, заработало!!!
 
Еще вопрос, при добавлении в начале когда #property strict индикатор выдает ошибку  array out of range in 'Название индикатора' (100,41) как с этим боротся

 
Vladimir Fionov:
Еще вопрос, при добавлении в начале когда #property strict индикатор выдает ошибку  array out of range in 'Название индикатора' (100,41) как с этим боротся

Нужно исправить выход за пределы массива. Локализация проблемы в Вашем коде: строка 100, символ на 42 позиции.
 
Vladimir Fionov:

и че тут не так? 

  1. Правильно вставляем код на форуме
  2. Нужно исправить ошибку выхода за пределы массива "ema[]". Вероятно Вы неправильно вычисляете переменную "limit".
 
Karputov Vladimir:
  1. Правильно вставляем код на форуме
  2. Нужно исправить ошибку выхода за пределы массива "ema[]". Вероятно Вы неправильно вычисляете переменную "limit".
Извините, не знал, по поводу вставки кода, а по поводу самого кода, почемуже это происходит когда вставляешь #property strict а без нее все работает
 
Vladimir Fionov:
Извините, не знал, по поводу вставки кода, а по поводу самого кода, почемуже это происходит когда вставляешь #property strict а без нее все работает

Справку смотрели в MetaEditor'e?

Изменилась также работа с функциями, областью видимости переменных и освобождением памяти в локальных массивах. Так как изменений оказалось достаточно много, то для обеспечения максимальной совместимости со старым подходом к написанию программ MQL4 было решено ввести новое свойство #property strict. При создании новой программы MQL4 с помощью Мастера MQL4 это свойство всегда добавляется в шаблон.

 и далее:

Таблица отличий между компиляторами:

Старый компилятор MQL4

Новый компилятор MQL4

Новый компилятор MQL4 с #property strict

Точки входа init(), start(), deinit() могут иметь любые параметры и любой тип возврата

init(), start(), deinit(), оставленные для совместимости,

и новые OnInit()OnStart()OnCalculate()OnTick(),OnTimer()OnChartEvent()OnTester()OnDeinit()должны точно соответствовать своим сигнатурам

То же

Результат возврата из функции init() никак не анализируется исполняющей подсистемой

Результат возврата из функций init() и OnInit() никак не анализируется исполняющей подсистемой

При возврате из OnInit() ненулевого значения выполнение эксперта или индикатора прекращается, программа выгружается

Имена переменных практически любые (кроме зарезервированных слов), включая спецсимволы и точки

Имена переменных не могут иметь спецсимволы и точки.

Список зарезервированных слов расширен, поэтому именами не могут быть такие широко распространенные слова, как short, long, const и т.д.

То же

Область видимости переменной - от объявления (даже во вложенном блоке) до конца функции

То же

Область видимости переменной - от объявления до конца блока, в котором переменная объявлена

Неявная инициализация всех переменных (и глобальных и локальных) нулями

То же

Инициализация только глобальных переменных. Из локальных переменных неявно инициализируются только строки

Локальные массивы при выходе из функции не освобождаются

Локальные массивы освобождаются при выходе из функции

Локальные массивы освобождаются при выходе из блока {}

Ошибка "Array out of range" (индекс за пределами массива) не приводит к критической ошибке*

То же. Кроме массивов структур и классов, для которых эта ошибка является критической

"Array out of range" - критическая ошибка и приводит к остановке программы

Структур и классов нет

Структуры и классы есть. Появились дополнительные типы данных

То же

Строки - однобайтовые.

datetime - 32-битное целое

Предопределенная переменная Volume имеет тип double

Строки - юникодные.

datetime - 64-битное целое

Предопределенная переменная Volume имеет тип long

То же

ArrayCopyRates() производит виртуальное копирование в массив double[][6]

ArrayCopyRates() производит виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

То же

Функции могут не возвращать значения, даже если они имеют тип. Для этого в конце функции компилятором автоматически проставляется return(0)

То же

Функции любого типа всегда должны возвращать значение

Количество одновременно открытых файлов - 32

Количество одновременно открытых файлов - 64

То же

Файлы всегда открываются в режиме совместного использования **

Режим совместного использования нужно указывать явно с помощью FILE_SHARE_READ и/или FILE_SHARE_WRITE

То же

Для скриптов в окне входных параметров показываются имена extern переменных

Для скриптов в режиме show_inputs в окне входных параметров показываются имена extern и input-переменных

Для скриптов в режиме show_inputs в окне входных параметров показываются строчные комментарии вместо имен extern- и input-переменных

* Следует обратить особое внимание на ошибку "Array out of range" - многие старые пользовательские индикаторы при запуске на графике будут выдавать эту ошибку в новом компиляторе в режиме strict. Желательно найти причину и устранить её.

**  В новом MQL4 и MQL5 за режим совместного использования файлов отвечают флаги FILE_SHARE_READ и FILE_SHARE_WRITE, которых не было в старом MQL4. 

Препроцессор - Документация на MQL4
  • docs.mql4.com
Препроцессор - Документация на MQL4
 
Vladimir Fionov:
скажите что тут не так?
  int idx;
  int counted = IndicatorCounted();
  if (counted < 0) return (-1);
  if (counted > 0) counted--;
  int limit = Bars - counted;
  if(counted == 0) limit-=1;
Попробуйте добавить такую строчку.
 
Vladimir Fionov:

Извините канешн если я вас достал, но теперь тут ошибку эту выдает 

 39 позиция

Туже самую ошибку,  array out of range ?
 
Vladimir Zubov:
Туже самую ошибку,  array out of range ?
ДА
Причина обращения: