Скачать MetaTrader 5

Б188 деинициализация

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114282
Forex Trader  
После срабатывания deinit()
срабатывает start() ???
MetaQuotes Software Corp.
Модератор
185968
MetaQuotes Software Corp.  
Проверил - start после deinit не вызывается. Можете кусок кода привести?
Forex Trader
114282
Forex Trader  
Извиняюсь за поспешный, не обдуманный вопрос,
конечно start после deinit не вызывается - это понятно.

Для полного прояснения, хотелось-бы знать
почему в логах экспертов строка "deinitialized" принтуется дважды?
Пример лога прилагаю.
Спасибо.
MetaQuotes Software Corp.
Модератор
185968
MetaQuotes Software Corp.  
По логу видно, что эксперт не желает самостоятельно закрываться и терминал его принудительно и аварийно(именно аварийно, возможны утечки памяти и прочие неприятности) глушит.

Строки shutdown by timeout, terminated by timeout не зря выдаются.
Видимо эксперт излишне эгоистичен, зациклен и не проверяет через IsStopped() флаг закрытия советника. Это очень плохой случай, от таких экспертов можно получить только неприятности.

Еще важно: эксперт использует DLL?
Forex Trader
114282
Forex Trader  
Еще важно: эксперт использует DLL?

Да, DLL используется.
MetaQuotes Software Corp.
Модератор
185968
MetaQuotes Software Corp.  
Еще важно: эксперт использует DLL?

Да, DLL используется.

Именно DLL (он не управляется виртуальной машиной MQL4) отъедает все время , в результате терминал не может остановить эксперта. Обычный MQL4 код автоматически содержит проверяющий код статуса состояния и может корректно завершаться, когда родитель просит его остановиться.

Рекомендую хотя бы раз в секунду вылезать из DLL и самостоятельно проверять флаг IsStopped(), чтобы корректно завершать свою работу.
Forex Trader
114282
Forex Trader  
Извиняюсь за назойливость, все же до конца не все ясно.
А именно: Почему-то именно при деинициализации начинают срабатывать функции из start(),
которые должны срабатывать только один раз при первом start.
MetaQuotes Software Corp.
Модератор
185968
MetaQuotes Software Corp.  
Извиняюсь за назойливость, все же до конца не все ясно.


А это:

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

Строки shutdown by timeout, terminated by timeout не зря выдаются.
Видимо эксперт излишне эгоистичен, зациклен и не проверяет через IsStopped() флаг закрытия советника. Это очень плохой случай, от таких экспертов можно получить только неприятности.


Терминал жестоко прерывает(не останавливает, а терминирует) рабочий поток эксперта.
Напишите корректного эксперта и проверьте снова. Если у своего эксперта видите строки "shutdown by timeout, terminated by timeout ", то будьте уверены, что процесс эксперта снимают "по-грязному", как зависший процесс со всеми вытекающими (печальными) последствиями.
Forex Trader
114282
Forex Trader  
Понимаю, что уже порядком надоел...
но всеже рискну утверждать:
Закрытие графика вызывает start{}, при условии, что с момента пуска на график не приходило тиков.
Прошу еще раз проверить.
Forex Trader
114282
Forex Trader  
Какие именно события к чему приводят утверждать не берусь.
Однако есть некоторые события, приводящие (видимо) к запуску start() индикатора. По моим наблюдениям, это - переход мышкой между любыми (!) окнами валют и при изменении размеров окна.

Я писал недавно о небольших исследованиях задержек между временем поступления тиков (понимать: исполнением первых программных строк) в идикатор и советник. В указанных здесь случаях задержка составляет ровно столько времени, сколько проходит от тыканья мышкой в соседний таймфрейм до поступления реального тика (котировки). В ночное время - минуты.

Получается, что на этих событиях индикатор воспроизводит несанкционированный тик, т.е ведёт себя так, как будто тик пришёл, хотя на самом деле его нет.
Forex Trader
114282
Forex Trader  
Кстати, эффект наблюдается и при компиляции в ME "больших" файлов, более 300 строк.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий