Нужна помощь разработчиков MT4 и программистов

 

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

Новые сборки терминала MT4 не производят де-инициализацию и новую инициализацию советника при изменении пользователем значений входных параметров. Это приводит к принципиальной несовместимости существующих советников с новыми сборками MT4. Причём под несовместимость попадают наиболее оптимизированные советники, где все однократные вычисления вынесены в блок init().

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

Очень прошу разработчиков MT4 вернуть вызов функций deinit(), init() к здравому смыслу.

С уважением.

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

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

Version: 4.00  Build 670

  (4 Jul 2014)

 
Wex:


Новые сборки терминала MT4 не производят де-инициализацию и новую инициализацию советника при изменении пользователем значений входных параметров. Это приводит к принципиальной несовместимости существующих советников с новыми сборками MT4. Причём под несовместимость попадают наиболее оптимизированные советники, где все однократные вычисления вынесены в блок init().

У меня производят. Билд 670. Проверьте простыми принтами. 
 
Wex:

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

Новые сборки терминала MT4 не производят де-инициализацию и новую инициализацию советника при изменении пользователем значений входных параметров. Это приводит к принципиальной несовместимости существующих советников с новыми сборками MT4. Причём под несовместимость попадают наиболее оптимизированные советники, где все однократные вычисления вынесены в блок init().

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

Очень прошу разработчиков MT4 вернуть вызов функций deinit(), init() к здравому смыслу.

С уважением.

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

Это происки маркетмейкеров :-7, чтоб пену сдуть с устоявшихся советников
 
IvanIvanov:
Это происки маркетмейкеров :-7, чтоб пену сдуть с устоявшихся советников
+
 
А переписать советника не вариант?
 

PS. (Я вроде не очень-то похож на такого, который впустую треплет языком на форуме.) Советник прикрепил. Попробуйте изменить на ходу значение параметра A1 или A2. Время "идёт", а советник не "видит" новых значений параметров. Правда заставить его пройти инициализацию можно, дважды нажав кнопку "AutoTrading". Это конечно быстрее, чем снимать с графика и повторно устанавливать. Но всё равно как-то нелогично. Впрочем решать вам.

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

Действительно новые сборки терминала MT4 значительно лучше старых. Замена значения параметра происходит в данном случае во время выполнения функции Sleep(). Безусловно это прогресс. Старые сборки в таких случаях вообще не позволяли менять значения, точнее даже не позволяли пользователю получить окно со входными параметрами. Я говорил заказчикам, что следует сначала выключить советники кнопкой на панели терминала, изменить параметры, а потом снова включить советники. Но сейчас у пользователя нет никаких препятствий, у него возникает иллюзия, что входные параметры изменены. Причём новый пример показывает, что не только копии, получаемые в блоке init(), но и оригиналы входных параметров не изменяются в советнике, зато изменяются в окне свойств на вкладке "Inputs". Несоответствие очевидно.

Файлы:
PROBLEM.mq4  2 kb
 
Wex:

PS. (Я вроде не очень-то похож на такого, который впустую треплет языком на форуме.) Советник прикрепил. Попробуйте изменить на ходу значение параметра A1 или A2. Время "идёт", а советник не "видит" новых значений параметров. Правда заставить его пройти инициализацию можно, дважды нажав кнопку "AutoTrading". Это конечно быстрее, чем снимать с графика и повторно устанавливать. Но всё равно как-то нелогично. Впрочем решать вам.

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

Действительно новые сборки терминала MT4 значительно лучше старых. Замена значения параметра происходит в данном случае во время выполнения функции Sleep(). Безусловно это прогресс. Старые сборки в таких случаях вообще не позволяли менять значения, точнее даже не позволяли пользователю получить окно со входными параметрами. Я говорил заказчикам, что следует сначала выключить советники кнопкой на панели терминала, изменить параметры, а потом снова включить советники. Но сейчас у пользователя нет никаких препятствий, у него возникает иллюзия, что входные параметры изменены. Причём новый пример показывает, что не только копии, получаемые в блоке init(), но и оригиналы входных параметров не изменяются в советнике, зато изменяются в окне свойств на вкладке "Inputs". Несоответствие очевидно.

А причины деинициализации пробовали использовать?

UninitializeReason()
REASON_PARAMETERS

Мож я по диагонали вас читал конечно... Но вот использую же ...

 
Wex:

PS. (Я вроде не очень-то похож на такого, который впустую треплет языком на форуме.) Советник прикрепил. Попробуйте изменить на ходу значение параметра A1 или A2. Время "идёт", а советник не "видит" новых значений параметров. Правда заставить его пройти инициализацию можно, дважды нажав кнопку "AutoTrading". Это конечно быстрее, чем снимать с графика и повторно устанавливать. Но всё равно как-то нелогично. Впрочем решать вам.

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

Действительно новые сборки терминала MT4 значительно лучше старых. Замена значения параметра происходит в данном случае во время выполнения функции Sleep(). Безусловно это прогресс. Старые сборки в таких случаях вообще не позволяли менять значения, точнее даже не позволяли пользователю получить окно со входными параметрами. Я говорил заказчикам, что следует сначала выключить советники кнопкой на панели терминала, изменить параметры, а потом снова включить советники. Но сейчас у пользователя нет никаких препятствий, у него возникает иллюзия, что входные параметры изменены. Причём новый пример показывает, что не только копии, получаемые в блоке init(), но и оригиналы входных параметров не изменяются в советнике, зато изменяются в окне свойств на вкладке "Inputs". Несоответствие очевидно.

Этот же код, но без цикла внутри start() работает нормально. Видимо в этом проблема.
Файлы:
PROBLEM.mq4  2 kb
 
Wex:

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


Очень похож.

1. Языку MQL4 посвящён специальный форум. Не этот.

2. Документацию по MQL4, ни старую, ни новую, Вы не читали

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