Нужна помощь разработчиков 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, ни старую, ни новую, Вы не читали