Ошибки, баги, вопросы - страница 2484
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уважаемые разработчики, столкнулся с проблемой. Необходимо ваше внимание.
Дело в том, что TesterStop() и ExpertRemove() не останавливают тест немедленно. Иллюстрация ошибки тут. Извините за некоторую несдержанность в том посте.
Подумалось, что было бы более правильно ввести константу MQL_TESTER_STOP - признак остановки тестирования по TesterStop() или ExpertRemove().
В таком случае можно было бы выбирать дальнейшие действия:
Немедленная остановка эксперта означает порчу памяти. После немедленной остановки эксперта могут остаться неосвобождённые блоки памяти. Поэтому немедленная остановка эксперта используется только при завершении клиентского терминала или тестерного агента и только в том случае, если эксперт не обрабатывает стоп-флаг и продолжает выполнение.
TesterStop даёт команду на завершение тестирования. Это означает, что после завершения текущего обработчика OnInit, OnTick, OnTimer, OnChartEvent, никакие события тестера больше не будут обрабатываться, так как цикл обработки будет завершён. А вызовется OnTester и OnDeinit
Немедленная остановка эксперта означает порчу памяти. После немедленной остановки эксперта могут остаться неосвобождённые блоки памяти. Поэтому немедленная остановка эксперта используется только при завершении клиентского терминала или тестерного агента и только в том случае, если эксперт не обрабатывает стоп-флаг и продолжает выполнение.
TesterStop даёт команду на завершение тестирования. Это означает, что после завершения текущего обработчика OnInit, OnTick, OnTimer, OnChartEvent, никакие события тестера больше не будут обрабатываться, так как цикл обработки будет завершён. А вызовется OnTester и OnDeinit
Спасибо, я это уже понял. Но это не решает проблему. Решить её можно либо константой MQL_TESTER_STOP, либо изменением возврата с void на bool.
Неожиданное решение подсказал Alexey Viktorov. Если после TesterStop() использовать return, то вроде всё нормализуется. Как и почему это происходит лично я догнать не могу... Тем не менее...
Отсюда, либо добавить этот момент в документацию, либо изменить void на bool.
П.С. С этой проблемой я столкнулся на билде 2085. До этого проблем не было. На мой взгляд, это о чём-то да говорит? )))
Здравствуйте,
почему в тестере иногда используемые индикаторы не отрисовываются?
перезапускаю терминал - начинают отрисовываться...
потом снова перестают - хотя код не менялся...
Также хочется задать второй вопрос:
почему в тестере не обновляются графические объекты несмотря на принудительное ChartRedraw(0); ?
на самом деле тестер их потом обновляет но с огромными задержкам и рывками...
Спасибо.
EDIT: прошу прощения, ложная тревога, этот вопрос снимается (проблема была в моём глючнокоде)
но вопрос по индикаторам остаётся в силе.
@Slava подскажите, ведь в билде 2007 TesterStop() передавал управление только в OnDeinit ? Передачи управления в OnTester не было?
Поэтому мой код и работал нормально, и результатом теста в таком случае был 0.
@Slava подскажите, ведь в билде 2007 TesterStop() передавал управление только в OnDeinit ? Передачи управления в OnTester не было?
Поэтому мой код и работал нормально, и результатом теста в таком случае был 0.
Заведите свой глобальный флаг, взводите его перед вызовом ТестерСтоп, и анализируйте в ОнТестер.
Заведите свой глобальный флаг, взводите его перед вызовом ТестерСтоп, и анализируйте в ОнТестер.
Завёл ))) Не всё так просто оказалось. В принципе проблема решена, просто хочется услышать подтверждение, что раньше TesterStop работал несколько иначе.
Если ссылки в описании нет, то эффект не проявляется.
Возможно у Вас 32x битная операционная система. Или оперативной памяти мало.