Выгрузить индикатор с графика при неудачной инициализации нет возможности что-ли?

 

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

  MqlParam inputParameters[];
  setInputParameters(inputParameters, "НАЗВАНИЕ ИНДИКАТОРА", i_ZZ_tf);
  if (!createHandle(inputParameters)) {
    int retCode = MessageBox("Indicator '" + inputParameters[0].string_value + "' wasn't created", "", MB_OK | MB_ICONSTOP);
    if (retCode == IDOK)
      ExpertRemove();
  }

Всё работает кк и нужно.

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

Поэтому это странно.

Я переписал иначе:

if (!createHandle(inputParameters)) {
  return INIT_FAILED;
}
Всё-равно, индикатор не выгружается.

Как заставить его выгрузится в случает не успешной инициализации? Ведь это не адекватно. Зачем индюку висеть на графике, если он не смог инициализироваться? Например, у меня есть индикатор, который используется в другом для расчёта и разрисовки уровней. Если первый не инициализировался, то другой уже не покажет нужных значений...

 

Вот мы и вернулись к старой доброй теме. )))))

 
Sergey Savinkin:

Вот мы и вернулись к старой доброй теме. )))))

Неа. Не вернулись)) Сергей, здесь вопрос другой. Я как-бы не сторонник использования индикаторов, поэтому особо с ними не работаю.

 Но вот пришлось т.к. щяс замороченный алгоритм пишу и постоянно перелопачивать определённые операции не вариант. Как удалить индюк с графика я уже понял. Есть же функция ChartIndicatorDelete()

Тока всё-равно, чушь какая-то получается. Объясню что я думаю. Например, вот типа OnInit() такой абстрактный:

int OnInit(){
строка 1
строка 2
строка 3
..
строка 4
..
строка 5
}

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

По логике, если возврат из OnInit() будет, например, INIT_FAILED, то по логике нужно выгрузить всё с графика. Дальше нет резона уже продолжать что-то делать. Иначе получается абсурд. Например, делать так:

  IndicatorSetString(INDICATOR_SHORTNAME, "m_IndicatorName");
  MqlParam inputParameters[];
  setInputParameters(inputParameters, "_myIndicators/ZigZag_HightLow_MTF", i_ZZ_tf);
  if (!createHandle(inputParameters)) {
    ChartIndicatorDelete(0, 0, "m_IndicatorName");
    return INIT_FAILED;
  }

Абсурд в том, что строка:

ChartIndicatorDelete(0, 0, "m_IndicatorName");

здесь как-бы лишняя. Должно быть по уму сразу выгружение всего, т.к. инициализация увенчалась провалом..

 
Viktar Dzemikhau:
Неа. Не вернулись)) Сергей, здесь вопрос другой. Я как-бы не сторонник использования индикаторов, поэтому особо с ними не работаю.

 Но вот пришлось т.к. щяс замороченный алгоритм пишу и постоянно перелопачивать определённые операции не вариант. Как удалить индюк с графика я уже понял. Есть же функция ChartIndicatorDelete()

Тока всё-равно, чушь какая-то получается. Объясню что я думаю. Например, вот типа OnInit() такой абстрактный:

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

По логике, если возврат из OnInit() будет, например, INIT_FAILED, то по логике нужно выгрузить всё с графика. Дальше нет резона уже продолжать что-то делать. Иначе получается абсурд. Например, делать так:

Абсурд в том, что строка:

здесь как-бы лишняя. Должно быть по уму сразу выгружение всего, т.к. инициализация увенчалась провалом..

Если увенчалась провалом, то можно попробовать ещё несколько попыток инициализации.

Нынешний алгоритм работает правильно!

 
Vitaly Muzichenko:

Если увенчалась провалом, то можно попробовать ещё несколько попыток инициализации.

Нынешний алгоритм работает правильно!

Несколько попыток можно сделать в любом случае. Поэтому это как-бы не оправдание этого аспекта.
 
Viktar Dzemikhau:

По логике, если возврат из OnInit() будет, например, INIT_FAILED, то по логике нужно выгрузить всё с графика. Дальше нет резона уже продолжать что-то делать. Иначе получается абсурд. Например, делать так:

всё выгружается, если указано

#property strict
 
Taras Slobodyanik:

всё выгружается, если указано

#property strict

В MT5 это тоже работает?

 
Sergey Savinkin:

В MT5 это тоже работает?

проверил - таки да, НЕ работает в МТ5

...индикатор висит дальше, "странная логика разработчиков" )
в МТ4 удаляется сразу, и пишется сообщение в лог

 
Taras Slobodyanik:

проверил - таки да, НЕ работает в МТ5

...индикатор висит дальше, "странная логика разработчиков" )
в МТ4 удаляется сразу, и пишется сообщение в лог

Про "работает" вспомнил анекдот:

Два полицейских едут в машине. Один говорит:

- Что-то у нас мигалка глючит. Глянь, она работает?

Второй высовывается из окна, смотрит на крышу:

- Работает - не работает, работает - не работает...

 
Sergey Savinkin:

Про "работает" вспомнил анекдот:

Два полицейских едут в машине. Один говорит:

- Что-то у нас мигалка глючит. Глянь, она работает?

Второй высовывается из окна, смотрит на крышу:

- Работает - не работает, работает - не работает...

еще проверил - не работает)

 
Sergey Savinkin:

В MT5 это тоже работает?

В mql5 нет необходимости это указывать, там изначально в режиме strict
Причина обращения: