Имя индикатора и функция OnInit()

 

Здравствуйте!

Определённо зашёл в тупик на ровном месте.

В документации сказано, что "Событие Init генерируется сразу после загрузки эксперта или индикатора". То есть, даже при некорректных входных параметрах, я для начала попадаю в OnInit() и дальше либо продолжаю работу, либо выхожу с return(INIT_FAILED); И если в начале функции OnInit() я вставлю Print("Init...");, то я должен видеть это сообщение каждый раз при запуске индикатора. Правильно? Выходит, что нет.

Есть простой индикатор (даже не индикатор, так, пустышка). После запуска просто рисует текстовую метку в определённом месте. Место зависит от индекса индикатора. Индекс можно задать вручную, либо посчитать автоматически (по имени объекта метки, если текущий индекс занят - выбирает следующий). То есть входной параметр inp_index может быть равен 0...3 или AUTO. Проблема в следующем: если на графике уже добавлен такой индикатор, то добавить второй (с таким же значением индекса, например AUTO, чтобы посчитать его автоматически) - не получается. Более того, я не вижу даже запуска инициализации, то есть Print("Init..."); не отрабатывается. Но если переименовать, перекомпилить и запустить индикатор под другим именем - всё честно работает, и автополучение индекса в том числе.

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

Подскажите выход из данной ситуации.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
Файлы:
test_test.mq5  4 kb
 
decanium:

терминал блокирует запуск одинаковых индикаторов с идентичными параметрами.

вы сами ответили

Подскажите выход из данной ситуации.

разве непонятно?

измените любой параметр в индикаторе

 
sergeev:

вы сами ответили

разве непонятно?

измените любой параметр в индикаторе

Хотелось без лишних движений получить автоматический пересчёт параметров в функции инициализации. Принцип простой, если такой индикатор с такими же параметрами уже добавлен, то параметры текущего (который хотим добавить) рассчитываются, исходя из ситуации. Например, если таймфрейм основного окна - H1, то первый добавляемый индикатор устанавливает себе таймфрейм М30, вторая копия индикатора автоматом выбирает таймфрейм М15 и т.д.. С таймфреймами - частный случай, аналогичных примеров может быть куча, опираясь на конкретную стратегию. Всё сводится к тому, что при установленных по-умолчанию входных параметрах AUTO, добавление индикатора(ов) сводится к перетаскиванию, без затрат времени на коррекцию параметров.
 
decanium:
Хотелось без лишних движений получить...

пока что рекомендую проверенное средство - антигубораскатин :)

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

вы не пишите ни кто добавляет, ни про ситуацию.

без этих данных рекомендовать вам что-либо нельзя. конкретизируйте условия вашей работы с индикатором и необходимые ситуации.

PS
Имя темы вы сделали вообще непонятное. как связано имя индикатора с тем что вы спрашиваете?

 
sergeev:


PS
Имя темы вы сделали вообще непонятное. как связано имя индикатора с тем что вы спрашиваете?

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

это все что вы решили процитировать из моего поста?

Ну, снят - так снят.

 

А нужен ли индикатор? Пусть это будет скрипт.

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

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

На мой взгляд, это просто "защита от дурака". И данный запрет, по-моему, вполне логичен. Запуск двух индикаторов и идентичными параметрами врядли может иметь какой-то практический смысл. А вот потенциальные сложности с разделением ресурсов этот случай скорее всего, имеет.  

Причина обращения: