Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1076

 

Всем хорошего дня! Еще один вопрос... 

Есть MQL5 программа, она имеет настройки (много) "Входные параметры". Программа выполняет вычисления и по мере необходимости создает / удаляет и управляет графическими объектами.

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

Вопрос: как исключить инициализацию программы при событии Init если  входные параметры не изменялись но оставить инициализацию при запуске программы(терминала)?

Возможный вариант: запоминать установленные значения и сравнивать по наступлению события Init и если они отличаются разрешать инициализацию, но входных параметров достаточно много...

 
Anzhela Sityaeva:

Всем хорошего дня! Еще один вопрос... 

Есть MQL5 программа, она имеет настройки (много) "Входные параметры". Программа выполняет вычисления и по мере необходимости создает / удаляет и управляет графическими объектами.

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

Вопрос: как исключить инициализацию программы при событии Init если  входные параметры не изменялись но оставить инициализацию при запуске программы(терминала)?

Возможный вариант: запоминать установленные значения и сравнивать по наступлению события Init и если они отличаются разрешать инициализацию, но входных параметров достаточно много...

Вот несколько советов для другой, похожей проблемы

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

В советнике работает, а в индикаторе не правильно, музыка при старте индикатора

Ihor Herasko, 2019.06.17 14:12

Да.

  1. При запуске индикатор создает глобальную переменную терминала. Мол - я загрузился.
  2. Проигрывается приветствие.
  3. При выгрузке (проверяется в OnDeinit) глобальная переменная терминала удаляется.
  4. Если в процессе работы переключен ТФ или изменены параметры, то при выходе в OnInit проверяется наличие глобальной переменной терминала. Если есть, то приветствие не проигрывается. Если нет - звучит.

 
Alexey Viktorov:

Вот несколько советов для другой, похожей проблемы



Благодарю за ответ, похоже что в нашем случае придется отслеживать состояние пары десятков изменений соответствий описав это через "пустышку" на графике, чтобы следить за их изменением, либо смириться с не нужной инициализацией пока объектов не так много...
 
Anzhela Sityaeva:
Благодарю за ответ, похоже что в нашем случае придется отслеживать состояние пары десятков изменений соответствий описав это через "пустышку" на графике, чтобы следить за их изменением, либо смириться с не нужной инициализацией пока объектов не так много...

Но ведь в вашем вопросе было

Anzhela Sityaeva:

Всем хорошего дня! Еще один вопрос... 

Есть MQL5 программа, она имеет настройки (много) "Входные параметры". Программа выполняет вычисления и по мере необходимости создает / удаляет и управляет графическими объектами.

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

Вопрос: как исключить инициализацию программы при событии Init если  входные параметры не изменялись но оставить инициализацию при запуске программы(терминала)?

Возможный вариант: запоминать установленные значения и сравнивать по наступлению события Init и если они отличаются разрешать инициализацию, но входных параметров достаточно много...

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как удалить глобальную переменную терминала при закрытии графика?

Alexey Viktorov, 2019.06.29 08:40

Обратите внимание на эту таблицу

REASON_PROGRAM

0

Эксперт прекратил свою работу, вызвав функцию ExpertRemove()

REASON_REMOVE

1

Программа удалена с графика

REASON_RECOMPILE

2

Программа перекомпилирована

REASON_CHARTCHANGE

3

Символ или период графика был изменен

REASON_CHARTCLOSE

4

График закрыт

REASON_PARAMETERS

5

Входные параметры были изменены пользователем

REASON_ACCOUNT

6

Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета

REASON_TEMPLATE

7

Применен другой шаблон графика

REASON_INITFAILED

8

Обработчик OnInit() вернул ненулевое значение

REASON_CLOSE

9

Терминал был закрыт


и на эту строку вашего кода

   if(reason==1) GlobalVariableDel("val");

Но, если я правильно помню начало вашей проблемы, то лучше условие поставить так

   if(reason != REASON_CHARTCHANGE) GlobalVariableDel("val");

 
Alexey Viktorov:

Но ведь в вашем вопросе было

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


Направление понятно, попробуем... Благодарю за ответ.
[Удален]  
Так и не нашел в Codebase пример советника, где условие закрытие позиции можно прописать, а не только стандартно SL/TP. Может кто подскажет?
 
Sprut112:
Так и не нашел в Codebase пример советника, где условие закрытие позиции можно прописать, а не только стандартно SL/TP. Может кто подскажет?

А чем условие открытия отличается от условия закрытия?

 
Sprut112:
Так и не нашел в Codebase пример советника, где условие закрытие позиции можно прописать, а не только стандартно SL/TP. Может кто подскажет?

У Владимира Карпутова были в кодах такие условия, но чтобы его код прочитать нужно самому научиться)

 
Fast235:

У Владимира Карпутова были в кодах такие условия, но чтобы его код прочитать нужно самому научиться)

Учиться нечему - понимать как собрана программа путём соединения её из готовых блоков стандартной библиотеки - даже не нужно знать программирование на среднем уровне - достаточно начального. Не пугайте народ - там всё легко и просто.

[Удален]  
Alexey Viktorov:

А чем условие открытия отличается от условия закрытия?

Например:
Возьмём Macd.
Buy: if(main<0 &&signal<0 &&main<signal)
 И закрывается если: signal>0