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

 
Renat:
Будьте добры, посчитайте результат своего отрицательного значения, соотнесите его с 32 битами инта, потом почитайте про арифметическое переполнение и найдите свои 17 дней.

Добро пожаловать в мир реального программирования.

Да я не задавал вопроса "откуда взялись именно 17 дней?" :)  Повторяюсь: выявил непонятную для себя ситуацию в тестере, рассказал - получил пояснения, что (1) функция Sleep() работает и с отрицательными значениями, выдавая при этом ненулевую задержку, (2) работа функции Sleep() эмулируется в тестере. Если разработчики считают это допустимым, что тут возвразить? Рассчитывать именно 17 дней незачем.

Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Общие функции / Sleep - Документация по MQL5
 
stringo:
Что Вы предлагаете? Аварийно завершать программу?
Трудно предлагать, не зная, как работает система. Моя цель - озвучить вопрос, а дальше - на ваше усмотрение. В этот раз получилось, что вопрос полностью укладывается в текущую идеологию терминала. Ну, значит, буду больше знать.
 
uncleVic:

Да. Слона-то мы и не приметили.

Что-то у меня сильные подозрения вызывает во эта строчка:


а в нашем случае:

Мне кажется компилятор не должен это пропускать. У Вас что? Нет даже предупреждения? Если нет, ставьте заявку в Сервисдеск. Ок?


оформил заявку #154746

Как получить порядковый номер элемента с максимальным/минимальным значением в массиве s1.open? 

 
Yedelkin:

 В данном случае мне было бы достаточно наличия в разделе "Функция Sleep" указания  ...  (2) "Функция Sleep() полностью поддерживается тестером".

Мы специально основные вопросы по тестированию осветили в отдельной статье Основы тестирования в MetaTrader 5. В ней мы постарались дать объяснение большинства нюансов при использовании тех или иных функций в тестере. В том числе и для функции Sleep():

Функция Sleep() в тестере

Функция Sleep() позволяет в эксперте или скрипте приостановить выполнение mql5-программы на некоторое время при работе на графике. Это может понадобиться при запросе каких-либо данных, которые в момент запроса еще не готовы и необходимо дождаться момента их готовности. Подробный пример использования функции Sleep() можно посмотреть в разделе Организация доступа к данным.

В тестере же вызовы Sleep() не задерживают процесс тестирования. При вызове Sleep() "проигрываются" сгенерированные тики в пределах указанной задержки, в результате чего могут сработать отложенные ордера, стопы и т.д. После вызова Sleep() cмоделированное  в тестере время увеличивается на интервал, указанный в параметре функции Sleep.

Если в результате выполнения функции Sleep() текущее время в тестере вышло за  конец периода тестирования, то  будет получена ошибка "бесконечный цикл в Sleep". При получение такой ошибки результаты тестирования не отбрасываются,  все вычисления производятся в полном объеме (количество сделок, просадка и т.д.) и результаты данного тестирования передаются терминалу.

Функция Sleep() не будет работать в OnDeinit(), так как после ее вызова тестерное время гарантированно окажется за пределами интервала тестирования.



Рис. 7. Схема использования функции Sleep()  в тестере терминала MetaTrader 5.

 
Rosh:

Мы специально основные вопросы по тестированию осветили в отдельной статье Основы тестирования в MetaTrader 5. В ней мы постарались дать объяснение большинства нюансов при использовании тех или иных функций в тестере. В том числе и для функции Sleep():

Извините, вот это действительно мой косяк. 9 месяцев тестированием не занимался - и пропустил статью.

..Было бы неплохо, если бы упоминание про ключевые статьи включалось в соответствующие разделы Справочника (в прошлом году уже предлагал нечто подобное, но сегодня - удобный случай повторить). Мы же все в первую очередь используем F1.

 
То есть, Вы не сделали то, что я просил.

Вам тут несколько человек пытаются указать на вашу простейшую ошибку с арифметическим переполнением.
 
Renat:
То есть, Вы не сделали то, что я просил.

Вам тут несколько человек пытаются указать на вашу простейшую ошибку с арифметическим переполнением.

==============================================================

Вы просили:

Renat:
Будьте добры, посчитайте результат своего отрицательного значения, соотнесите его с 32 битами инта, потом почитайте про арифметическое переполнение и найдите свои 17 дней...

Я ответил: Да я не задавал вопроса "откуда взялись именно 17 дней?" :) И т.д.

Отвечаю на Ваш текущий вопрос. То, что Вы просили, - не сделал. Поскольку это было сделано мною ещё вчера (при этом у меня были несколько другие исходные данные, но суть происходящего я понял). Набросал скрипт. Если бы кто-нибудь скомпилировал тот скрипт, то выдалось бы целых два предупреждения.  Переполнение/усечение - с этим я вчера сам разобрался.

Вопросы были в том, почему функция (1) оперирует отрицательными значениями аргумента и (2) выдаёт задержку в тестере при наличии подобных аргументов. Вы же в который раз указываете на "ошибку программиста" с переполнением типа int. - Т.е. отвергаете мой тестовый пример только из-за того, что при выборе аргумента функции Sleep() было указано "переполненное значение". Но не в "переполненности значения" суть вопроса. Это всего лишь дополнительный штрих к тестовому примеру. Вроде участники обсуждения это поняли... В конце концов, в тестовом примере можно вставить "непереполненное значение" - при прочих равных условиях суть вопроса останется той же (с самим вопросом уже разобрались).

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

 

Какие есть ограничения на использование?    W            =(long)ChartGetInteger(Chart_ID[i],CHART_WIDTH_IN_PIXELS,0);
                                                                     H             =(long)ChartGetInteger(Chart_ID[i],CHART_HEIGHT_IN_PIXELS,0);
                                                                     W_B        =(long)ChartGetInteger(Chart_ID[i],CHART_WIDTH_IN_BARS,0);

Вызываю функции из    void OnInit() все правильно, а из  void OnTick() данные неправильные в часности CHART_WIDTH_IN_BARS выдает количество видимых баров, хотя я понимаю должно выдавать количество баров помещающихся на графике без смещения

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Virty:

Извините за примитивный вопрос.

Торговый запрос не выполняется. Ошибка 10014 - неправильный объём в запросе.

Как понять/посчитать изнутри советника какой максимальный и минимальный объём лотов я в данный момент могу купить?

Функция OrderCheck не подходит, т.к. она только проверяет, а сколько лотов максимально можно купить не говорит.

Посмотрите перечисление ENUM_SYMBOL_INFO_DOUBLE и соответствующую  функцию. Вы об этом?
 
Yedelkin:
Посмотрите перечисление ENUM_SYMBOL_INFO_DOUBLE и соответствующую  функцию. Вы об этом?
Да. Спасибо. SYMBOL_VOLUME_MAX и сам нашёл, и вы помогли.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5