Особенности языка mql4, тонкости и приёмы работы - страница 36

 

У меня вопрос возник. Функция 

int OnInit() { 
        return(INIT_SUCCEEDED); 
} 

возвращает терминалу значение INIT_SUCCEEDED. А что это такое  она возвращает терминалу? Что это за целочисленный код? Какие коды можно возвращать помимо этого и что они обозначают? В справке найти не удалось. В Гугле тоже.

Вопрос не праздный. У меня возникла надобность уже в блоке инициализации проверить корректность параметра и если он не вверен, то остановить работу советника вообще. Понимаете, хотелось бы остановить а не останавливать на каждом тике, как это можно сделать в функции OnTick(). Тут вот в чём дело. Мне нужно чтоб переменная проинициализировалась значением 1 и только 1 раз за всё время работы эксперта. Ну нет нужды инициализировать её на каждом тике а затем на каждом тике проверять её корректность. Вот тут то у меня взгляд и упал на это самый INIT_SUCCEEDED. Если то значение, которое содержит в себе эта константа, говорит, мол всё нормально, проинициализировались, можно советнику работать, то можо ли послать терминалу другой код возврата, который не позволит советнику отреагировать даже на 1 тик?

 
Vitaly Murlenko #:

У меня вопрос возник. Функция 

возвращает терминалу значение INIT_SUCCEEDED. А что это такое  она возвращает терминалу? Что это за целочисленный код? Какие коды можно возвращать помимо этого и что они обозначают? В справке найти не удалось. В Гугле тоже.

Вопрос не праздный. У меня возникла надобность уже в блоке инициализации проверить корректность параметра и если он не вверен, то остановить работу советника вообще. Понимаете, хотелось бы остановить а не останавливать на каждом тике, как это можно сделать в функции OnTick(). Тут вот в чём дело. Мне нужно чтоб переменная проинициализировалась значением 1 и только 1 раз за всё время работы эксперта. Ну нет нужды инициализировать её на каждом тике а затем на каждом тике проверять её корректность. Вот тут то у меня взгляд и упал на это самый INIT_SUCCEEDED. Если то значение, которое содержит в себе эта константа, говорит, мол всё нормально, проинициализировались, можно советнику работать, то можо ли послать терминалу другой код возврата, который не позволит советнику отреагировать даже на 1 тик?

https://www.mql5.com/ru/docs/event_handlers/oninit

 
 
Vitaly Murlenko #:

У меня вопрос возник. Функция 

возвращает терминалу значение INIT_SUCCEEDED. А что это такое  она возвращает терминалу? Что это за целочисленный код? Какие коды можно возвращать помимо этого и что они обозначают? В справке найти не удалось. В Гугле тоже.

Вопрос не праздный. У меня возникла надобность уже в блоке инициализации проверить корректность параметра и если он не вверен, то остановить работу советника вообще. Понимаете, хотелось бы остановить а не останавливать на каждом тике, как это можно сделать в функции OnTick(). Тут вот в чём дело. Мне нужно чтоб переменная проинициализировалась значением 1 и только 1 раз за всё время работы эксперта. Ну нет нужды инициализировать её на каждом тике а затем на каждом тике проверять её корректность. Вот тут то у меня взгляд и упал на это самый INIT_SUCCEEDED. Если то значение, которое содержит в себе эта константа, говорит, мол всё нормально, проинициализировались, можно советнику работать, то можо ли послать терминалу другой код возврата, который не позволит советнику отреагировать даже на 1 тик?


https://docs.mql4.com/ru/basis/function/events#enum_init_retcode
 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 

Столкнулся с ошибкой: 

'iCustom' - wrong parameters count

Эта ошибка возникает если в функцию  iCustom передавать слишком много параметров. Не считая обязательных параметров, можно передать еще 59 параметров пользовательского индикатора. Если у пользовательского индикатора более 59 параметров, то параметры будут использованы по умолчанию. И все бы ничего, но есть такие разработчики, которые пихают до сотни параметров в свои творения, при чем параметры, которые ни на что не влияют при использовании в советнике, ставят по списку на первые места, а например отключение звуковых сигналов ставят на последние места, и когда клиент заказывает советник, дает файл индикатора и просит, чтобы я отключил звуковой сигнал индикатора при использовании в советнике, то я как разработчик просто не могу этого сделать:

- во-первых, из-за ограничения количества передаваемых параметров в функцию  iCustom

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

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

 
Maksym Mudrakov #:

Столкнулся с ошибкой: 

'iCustom' - wrong parameters count

Эта ошибка возникает если в функцию  iCustom передавать слишком много параметров. Не считая обязательных параметров, можно передать еще 59 параметров пользовательского индикатора. Если у пользовательского индикатора более 59 параметров, то параметры будут использованы по умолчанию. И все бы ничего, но есть такие разработчики, которые пихают до сотни параметров в свои творения, при чем параметры, которые ни на что не влияют при использовании в советнике, ставят по списку на первые места, а например отключение звуковых сигналов ставят на последние места, и когда клиент заказывает советник, дает файл индикатора и просит, чтобы я отключил звуковой сигнал индикатора при использовании в советнике, то я как разработчик просто не могу этого сделать:

- во-первых, из-за ограничения количества передаваемых параметров в функцию  iCustom

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

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

Это просьба в пустоту. Разработчики MQ делать не будут потому, что прекратили поддержку МТ4. А разработчики таких индикаторов делают это умышленно, если нет открытого кода. С расчётом, если что-то надо обращайтесь непосредственно……… сами знаете к кому.

Вывод: Если нет открытого кода индикатора, лучше выбросить его и забыть как страшный сон.

 

Встречал много примеров на сравнение, но что самое оптимальное?

Есть код

if(Open[1] == Close[1]) return(1);

Отрабатывает через раз

Тоже самое и это

if(Open[1] - Close[1] == 0) return(1);

Если сделать так, то нормально, но ресурсозатратно

if(NormalizeDouble(Open[1],_Digits) - NormalizeDouble(Close[1],_Digits) == 0) return(1);

--

Какие есть варианты?

 
Vitaly Muzichenko #:
if(NormalizeDouble(Open[1],_Digits) - NormalizeDouble(Close[1],_Digits) == 0) return(1);

Везде говорится о нормализованной разности, но не о разнице нормализованных значений. Понимаете это?

if(NormalizeDouble(Open[1]-Close[1],_Digits) == 0)
 
Vitaly Muzichenko #:

Отрабатывает через раз

Выглядит, как баг. Т.к. цены баров должны быть уже нормализованы и, соответственно, сравниваться напрямую.