Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Будьте добры, посчитайте результат своего отрицательного значения, соотнесите его с 32 битами инта, потом почитайте про арифметическое переполнение и найдите свои 17 дней.
Добро пожаловать в мир реального программирования.
Да я не задавал вопроса "откуда взялись именно 17 дней?" :) Повторяюсь: выявил непонятную для себя ситуацию в тестере, рассказал - получил пояснения, что (1) функция Sleep() работает и с отрицательными значениями, выдавая при этом ненулевую задержку, (2) работа функции Sleep() эмулируется в тестере. Если разработчики считают это допустимым, что тут возвразить? Рассчитывать именно 17 дней незачем.
Что Вы предлагаете? Аварийно завершать программу?
Да. Слона-то мы и не приметили.
Что-то у меня сильные подозрения вызывает во эта строчка:
а в нашем случае:
Мне кажется компилятор не должен это пропускать. У Вас что? Нет даже предупреждения? Если нет, ставьте заявку в Сервисдеск. Ок?
оформил заявку #154746
Как получить порядковый номер элемента с максимальным/минимальным значением в массиве s1.open?
В данном случае мне было бы достаточно наличия в разделе "Функция Sleep" указания ... (2) "Функция Sleep() полностью поддерживается тестером".
Мы специально основные вопросы по тестированию осветили в отдельной статье Основы тестирования в MetaTrader 5. В ней мы постарались дать объяснение большинства нюансов при использовании тех или иных функций в тестере. В том числе и для функции Sleep():
Функция Sleep() в тестере
Функция Sleep() позволяет в эксперте или скрипте приостановить выполнение mql5-программы на некоторое время при работе на графике. Это может понадобиться при запросе каких-либо данных, которые в момент запроса еще не готовы и необходимо дождаться момента их готовности. Подробный пример использования функции Sleep() можно посмотреть в разделе Организация доступа к данным.
В тестере же вызовы Sleep() не задерживают процесс тестирования. При вызове Sleep() "проигрываются" сгенерированные тики в пределах указанной задержки, в результате чего могут сработать отложенные ордера, стопы и т.д. После вызова Sleep() cмоделированное в тестере время увеличивается на интервал, указанный в параметре функции Sleep.
Если в результате выполнения функции Sleep() текущее время в тестере вышло за конец периода тестирования, то будет получена ошибка "бесконечный цикл в Sleep". При получение такой ошибки результаты тестирования не отбрасываются, все вычисления производятся в полном объеме (количество сделок, просадка и т.д.) и результаты данного тестирования передаются терминалу.
Функция Sleep() не будет работать в OnDeinit(), так как после ее вызова тестерное время гарантированно окажется за пределами интервала тестирования.
Рис. 7. Схема использования функции Sleep() в тестере терминала MetaTrader 5.
Мы специально основные вопросы по тестированию осветили в отдельной статье Основы тестирования в MetaTrader 5. В ней мы постарались дать объяснение большинства нюансов при использовании тех или иных функций в тестере. В том числе и для функции Sleep():
Извините, вот это действительно мой косяк. 9 месяцев тестированием не занимался - и пропустил статью.
..Было бы неплохо, если бы упоминание про ключевые статьи включалось в соответствующие разделы Справочника (в прошлом году уже предлагал нечто подобное, но сегодня - удобный случай повторить). Мы же все в первую очередь используем F1.
Вам тут несколько человек пытаются указать на вашу простейшую ошибку с арифметическим переполнением.
То есть, Вы не сделали то, что я просил.
Вам тут несколько человек пытаются указать на вашу простейшую ошибку с арифметическим переполнением.
==============================================================
Вы просили:
Будьте добры, посчитайте результат своего отрицательного значения, соотнесите его с 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 выдает количество видимых баров, хотя я понимаю должно выдавать количество баров помещающихся на графике без смещения
Извините за примитивный вопрос.
Торговый запрос не выполняется. Ошибка 10014 - неправильный объём в запросе.
Как понять/посчитать изнутри советника какой максимальный и минимальный объём лотов я в данный момент могу купить?
Функция OrderCheck не подходит, т.к. она только проверяет, а сколько лотов максимально можно купить не говорит.
Посмотрите перечисление ENUM_SYMBOL_INFO_DOUBLE и соответствующую функцию. Вы об этом?