Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй задачу в сервисе Фриланс и разработчики выполнят ее.
A.R.Wex
17366
A.R.Wex 2014.07.14 11:57 

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

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

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

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

С уважением.

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

o_o
Модератор
23690
o_o 2014.07.14 11:59  
хотя бы распринтовку в качестве доказательства покажите.
A.R.Wex
17366
A.R.Wex 2014.07.14 12:08  

Version: 4.00  Build 670

  (4 Jul 2014)

Andrey Barinov
39238
Andrey Barinov 2014.07.14 13:15  
Wex:


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

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

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

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

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

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

С уважением.

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

Это происки маркетмейкеров :-7, чтоб пену сдуть с устоявшихся советников
Sergey Chalyshev
4487
Sergey Chalyshev 2014.07.14 16:01  
IvanIvanov:
Это происки маркетмейкеров :-7, чтоб пену сдуть с устоявшихся советников
+
Vasiliy Aseev
276
Vasiliy Aseev 2014.07.15 03:33  
A.R.Wex
17366
A.R.Wex 2014.07.16 00:46  

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

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

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

Файлы:
PROBLEM.mq4 2 kb
Artyom Trishkin
Модератор
75517
Artyom Trishkin 2014.07.16 01:57  
Wex:

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

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

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

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

UninitializeReason()
REASON_PARAMETERS

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

Andrey Barinov
39238
Andrey Barinov 2014.07.16 06:33  
Wex:

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

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

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

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

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


Очень похож.

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

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

/ /12345678
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий