Ошибки, баги, вопросы - страница 2933

 
x572intraday:

 Отловил-таки ошибку, цитата из справки:

 Принтовал в Журнал — получил:

 Что теперь с ней делать, куда идти? У меня ли кривые руки или?..

Точно должно быть присваивание

ArraySize(Arr)=0

а не сравнение?

ArraySize(Arr)==0
 
Vitaly Muzichenko:

Точно должно быть присваивание

а не сравнение?

 Так это не код программы, а результат Print'а в Журнале терминала. А вот и сам код:

   int c=CopyTime(_Symbol,tf,0,1,Arr);
   if(c<1)
   {
      Print("ArraySize(Arr)=",ArraySize(Arr),
            "; copied=",c,
            "; TF=",EnumToString((ENUM_TIMEFRAMES)tf)
            //"; Arr[0]=",Arr[0]
           );
      Print("Error Code = ",GetLastError());
      ResetLastError();
      return;
   }
 То есть это не я промазал мимо диапазона массива, а многострадальная история почему-то не всегда якобы подгружается. Я всегда думал, что история подгружается слева и при неполной загрузке её может не хватить. Но чтобы не хватало истории справа (новые бары) — это для меня нонсенс! Тем паче у меня ArraySetAsSeries=false, если это вообще имеет значение.
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Print - Общие функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

 Так это не код программы, а результат Print'а в Журнале терминала. А вот и сам код:

 То есть это не я промазал мимо диапазона массива, а многострадальная история почему-то не всегда якобы подгружается. Я всегда думал, что история подгружается слева и при неполной загрузке её может не хватить. Но чтобы не хватало истории справа (новые бары) — это для меня нонсенс! Тем паче у меня ArraySetAsSeries=false.

Читает пустой массив, в котором ничего нет?

ArraySize(Arr)

Попробуйте так

Print("ArraySize(Arr)=",Arr[0],
 
Vitaly Muzichenko:

Читает пустой массив, в котором ничего нет?

Попробуйте так

 У меня строка вывода Arr[0] специально закомментирована (см. выше), так как при попытке вывести её в Журнал дело не доходит до сообщения об ошибке 4401, а всё заканчивается выводом ошибки "array out of range".

 ...Пока покурю https://www.mql5.com/ru/docs/series/timeseries_access, но раздувать свой код этим кодом — жуть...
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Ошибки компиляции - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday:

 У меня строка вывода Arr[0] специально закомментирована (см. выше), так как при попытке вывести её в Журнал дело не доходит до сообщения об ошибке 4401, а всё заканчивается выводом ошибки "array out of range".

 
Vitaly Muzichenko:

 Да, массив оказывается пустой, то есть не происходит копирование в него ни одного нового бара.

 
x572intraday:

 Да, массив оказывается пустой, то есть не происходит копирование в него ни одного нового бара.

так бывает при первом запросе

 
Vitaly Muzichenko:

так бывает при первом запросе

 Маразм в том, что по https://www.mql5.com/ru/docs/series/timeseries_access в статье о подгрузке истории в коде упоминается Sleep(), а справка по Sleep() гласит: "Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить." А мне, получается, подгружать историю нужно как раз в индикаторе.

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

 Маразм в том, что по https://www.mql5.com/ru/docs/series/timeseries_access в статье о подгрузке истории в коде упоминается Sleep(), а справка по Sleep() гласит: "Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить." А мне, получается, подгружать историю нужно как раз в индикаторе.

ну так сделайте выход, если данные не скопированы

int c=CopyTime(_Symbol,tf,0,1,Arr);
if(c<1) return;

При повторном тике уже всё будет скопировано и код отработает правильно

 

Здравствуйте, я тестирую своего робота, после окончания тестирования увидел в Журнале много полей с реквотами, что означают эти пачки сообщений и что можно в коде дописать чтобы они не появлялись? Спасибо, с наступающим НГ! 

Файлы:
1.jpg  412 kb
Причина обращения: