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

 
Vladimir Pastushak #:

Это криво написанный индикатор, проблема  не с терминалом

он очевидно не то имел в виду :

при аварийном завершении, терминал не запоминает что в нём было запущено с предыдущего успешного запуска. 

то есть добавил индикатор/советник, тот пахал как лошадь и упал с терминалом (или виндовсом в целом)..вот при перезапуске лошади не будет :-)

--

кстати это хорошая фича, и исправлять её ни в коем случае не надо

 
Maxim Kuznetsov #:

он очевидно не то имел в виду :

при аварийном завершении, терминал не запоминает что в нём было запущено с предыдущего успешного запуска. 

то есть добавил индикатор/советник, тот пахал как лошадь и упал с терминалом (или виндовсом в целом)..вот при перезапуске лошади не будет :-)

--

кстати это хорошая фича, и исправлять её ни в коем случае не надо

Наоборот, что было, т.е. что работало в момент аварии терминал помнит. А вот то что было, потом было удалено - не помнит факт удаления. Т.е. запускаешь терминал и он начинает пахать как лошадь ни с того ни с сего :)

 
prosvetlenniy_mudrec #:

Наоборот, что было, т.е. что работало в момент аварии терминал помнит. А вот то что было, потом было удалено - не помнит факт удаления. Т.е. запускаешь терминал и он начинает пахать как лошадь ни с того ни с сего :)

собственный профиль терминал запоминает при штатном завершении работы.

традиционно на серверах, общая рекомендация - терминал запустил, настроил, завершил, запустил, перепроверил и перезапустил :-)

 
prosvetlenniy_mudrec #:

Спасибо. Чего не хватает в индикаторе? А терминал почему не может записать где-то факт удаления индикатора с графика?

Индикатор имеет большой цикл, Вы индикатор удалили с графика, но по факту индикатор еще работает так как цикл запущен. Это часто вызывает зависание терминала в целом. 

В итоге при перезапуске терминала Вы имеете индикатор на графике так как индикатор не завершил работу корректно.

 
prosvetlenniy_mudrec #:

Спасибо. Чего не хватает в индикаторе? А терминал почему не может записать где-то факт удаления индикатора с графика?

Нужно взять исходный код индикатора и модифицировать его, в частности в функции DeInit() нужно дописать обработку кодов причин выгрузки индикатора.

Можно все настройки при определенных причинах выгрузки индикатора сохранять например в файл и т.д. , а при следующем старте их автоматически подгружать в OnInit().

Значит и для настроек в коде индикатора могут понадобиться переменные-посредники такого же типа. Масса вариантов есть. Сам вопрос не четкий, т.к. скринов и логов с описанием проблемы нет.

Более того, можно сделать через OnTimer() кастомный глобальный мьютекс, который выбрасывает из цикла вешающего индикатор при прошествии определенного кол-ва секунд, или там аналог std::lock_guard<Mutex>(свой мини класс-оболочку для переменной с функцией мьютекса), например для того что-бы цикл гарантированно завершался к следующему вызову.

https://www.mql5.com/en/docs/event_handlers/ondeinit




Documentation on MQL5: Event Handling / OnDeinit
Documentation on MQL5: Event Handling / OnDeinit
  • www.mql5.com
The function is called in indicators and EAs when the Deinit event occurs. It is used to deinitialize a running MQL5 program. Parameters reason...
 

Спасибо, пишу по шагам.

1. Запускается терминал.

2. Терминал работает в выходные или нет эффект один.

3. На пустой график загружается индикатор. В функции "init" только установка графических буферов. Весь код в функции "start". В функции "deinit" ничего нет кроме "return (0);"

4. Индикатор обращается к dll, рсует линию.

5. Индикатор после отрисовки ничего не делает.

6. Индикатор удаляется с графика через штатное меню терминала -> ПКМ "список индикаторов" -> выделение -> удалить.

7. Диспетчером задач виндоус снимется дерево процессов терминала (имитируется отключение света).

8. Запускается терминал на котором запускается и отображается ранее удаленный индикатор.

Т.е. терминал нигде у себя не сохранил статус окна с графиком после удаления индикатора, что оно пустое, чтобы прочитать это при своем запуске.

 
prosvetlenniy_mudrec #:

Спасибо, пишу по шагам.

1. Запускается терминал.

2. Терминал работает в выходные или нет эффект один.

3. На пустой график загружается индикатор. В функции "init" только установка графических буферов. Весь код в функции "start". В функции "deinit" ничего нет кроме "return (0);"

4. Индикатор обращается к dll, рсует линию.

5. Индикатор после отрисовки ничего не делает.

6. Индикатор удаляется с графика через штатное меню терминала -> ПКМ "список индикаторов" -> выделение -> удалить.

7. Диспетчером задач виндоус снимется дерево процессов терминала (имитируется отключение света).

8. Запускается терминал на котором запускается и отображается ранее удаленный индикатор.

Т.е. терминал нигде у себя не сохранил статус окна с графиком после удаления индикатора, что оно пустое, чтобы прочитать это при своем запуске.

Вкратце: судя по всему ваши ожидания превышают фактический функционал индикатора, значит индикатор нужно переписывать либо модифицировать. Если сами не программируете, то вам на фриланс, создайте там задачу, выберите исполнителя и он сделает так, что индикатор будет работать как вам нужно.
Создание заказа - Фриланс-сервис на MQL5.com
Создание заказа - Фриланс-сервис на MQL5.com
  • www.mql5.com
Закажи во Фрилансе технический индикатор, торгового робота или любое другое приложение для торговли на рынках
 
Igor Zakharev #:
Вкратце: судя по всему ваши ожидания превышают фактический функционал индикатора, значит индикатор нужно переписывать либо модифицировать. Если сами не программируете, то вам на фриланс, создайте там задачу, выберите исполнителя и он сделает так, что индикатор будет работать как вам нужно.

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

но тогда будет геморой с отладкой и действительно багованными индикаторами/советниками :-) потребуется более высокая квалификация от пользователей и разработчиков советников/индикаторов

сейчас юзеру надо : добавил или удалил индикатор - сохрани профиль (или перезапусти терминал). Сам по себе он не сохранится

 
Igor Zakharev #:
Вкратце: судя по всему ваши ожидания превышают фактический функционал индикатора, значит индикатор нужно переписывать либо модифицировать. Если сами не программируете, то вам на фриланс, создайте там задачу, выберите исполнителя и он сделает так, что индикатор будет работать как вам нужно.

Индикатор работает как нужно. Все в порядке. Просто терминал не запоминает факт его удаления с графика, при нештатном завершении работы терминала. Вот и все, детский вопрос. Я программирую немного и могу его решить, если влезу в работу терминала на уровне перехвата системных сообщений виндоус с использованием недокументированного апи виндоус Zw, только это большая работа. И мне кажется вопрос проще решить разработчикам терминала парой строк.

 
Maxim Kuznetsov #:

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

но тогда будет геморой с отладкой и действительно багованными индикаторами/советниками :-) потребуется более высокая квалификация от пользователей и разработчиков советников/индикаторов

сейчас юзеру надо : добавил или удалил индикатор - сохрани профиль (или перезапусти терминал). Сам по себе он не сохранится

Спасибо, изучу. :) Правда, лучше разработчикам поправить, ведь не хотелось бы чтобы кто-то пострадал от недочета. А с другой стороны и Максим Кузнецов прав. Оставим решение разработчикам, у них опыта побольше.


Все-таки, как это здорово когда много людей, каждый что-то знает и всегда можно разобраться. Пытался Алису яндекс сегодня поймать на хитром вопросе и ничего не получилось. Кажется, ИИ это очень перспективно, в будущем сможет сильно помогать людям.