Version: 4.00 Build 670
(4 Jul 2014)
Новые сборки терминала MT4 не производят де-инициализацию и новую инициализацию советника при изменении пользователем значений входных параметров. Это приводит к принципиальной несовместимости существующих советников с новыми сборками MT4. Причём под несовместимость попадают наиболее оптимизированные советники, где все однократные вычисления вынесены в блок init().
Здравствуйте.
Новые сборки терминала MT4 не производят де-инициализацию и новую инициализацию советника при изменении пользователем значений входных параметров. Это приводит к принципиальной несовместимости существующих советников с новыми сборками MT4. Причём под несовместимость попадают наиболее оптимизированные советники, где все однократные вычисления вынесены в блок init().
Доходит до смешного: чтобы гарантировано заменить значение того или иного входного параметра, пользователь должен снять советник с графика и поставить его вновь. (Я не пробовал загружать параметры из SET-файла кнопкой, но подозреваю, что это эквивалентно замене значений параметров вручную).
Очень прошу разработчиков MT4 вернуть вызов функций deinit(), init() к здравому смыслу.
С уважением.
PS Если кто-то в курсе механизма программного определения момента и факта замены пользователем значений входных параметров советника, пожалуйста напишите об этом здесь.
Это происки маркетмейкеров :-7, чтоб пену сдуть с устоявшихся советников
PS. (Я вроде не очень-то похож на такого, который впустую треплет языком на форуме.) Советник прикрепил. Попробуйте изменить на ходу значение параметра A1 или A2. Время "идёт", а советник не "видит" новых значений параметров. Правда заставить его пройти инициализацию можно, дважды нажав кнопку "AutoTrading". Это конечно быстрее, чем снимать с графика и повторно устанавливать. Но всё равно как-то нелогично. Впрочем решать вам.
Конечно мне намного проще внести в советник изменения, чем ждать у моря погоды. Поэтому повторно задам один простой вопрос. Может кто-нибудь в курсе, как программно получить информацию о том, что пользователь на ходу заменил значение входного параметра? В смысле факт изменения значения и момент времени.
Действительно новые сборки терминала MT4 значительно лучше старых. Замена значения параметра происходит в данном случае во время выполнения функции Sleep(). Безусловно это прогресс. Старые сборки в таких случаях вообще не позволяли менять значения, точнее даже не позволяли пользователю получить окно со входными параметрами. Я говорил заказчикам, что следует сначала выключить советники кнопкой на панели терминала, изменить параметры, а потом снова включить советники. Но сейчас у пользователя нет никаких препятствий, у него возникает иллюзия, что входные параметры изменены. Причём новый пример показывает, что не только копии, получаемые в блоке init(), но и оригиналы входных параметров не изменяются в советнике, зато изменяются в окне свойств на вкладке "Inputs". Несоответствие очевидно.
PS. (Я вроде не очень-то похож на такого, который впустую треплет языком на форуме.) Советник прикрепил. Попробуйте изменить на ходу значение параметра A1 или A2. Время "идёт", а советник не "видит" новых значений параметров. Правда заставить его пройти инициализацию можно, дважды нажав кнопку "AutoTrading". Это конечно быстрее, чем снимать с графика и повторно устанавливать. Но всё равно как-то нелогично. Впрочем решать вам.
Конечно мне намного проще внести в советник изменения, чем ждать у моря погоды. Поэтому повторно задам один простой вопрос. Может кто-нибудь в курсе, как программно получить информацию о том, что пользователь на ходу заменил значение входного параметра? В смысле факт изменения значения и момент времени.
Действительно новые сборки терминала MT4 значительно лучше старых. Замена значения параметра происходит в данном случае во время выполнения функции Sleep(). Безусловно это прогресс. Старые сборки в таких случаях вообще не позволяли менять значения, точнее даже не позволяли пользователю получить окно со входными параметрами. Я говорил заказчикам, что следует сначала выключить советники кнопкой на панели терминала, изменить параметры, а потом снова включить советники. Но сейчас у пользователя нет никаких препятствий, у него возникает иллюзия, что входные параметры изменены. Причём новый пример показывает, что не только копии, получаемые в блоке init(), но и оригиналы входных параметров не изменяются в советнике, зато изменяются в окне свойств на вкладке "Inputs". Несоответствие очевидно.
А причины деинициализации пробовали использовать?
UninitializeReason()
REASON_PARAMETERS
Мож я по диагонали вас читал конечно... Но вот использую же ...
PS. (Я вроде не очень-то похож на такого, который впустую треплет языком на форуме.) Советник прикрепил. Попробуйте изменить на ходу значение параметра A1 или A2. Время "идёт", а советник не "видит" новых значений параметров. Правда заставить его пройти инициализацию можно, дважды нажав кнопку "AutoTrading". Это конечно быстрее, чем снимать с графика и повторно устанавливать. Но всё равно как-то нелогично. Впрочем решать вам.
Конечно мне намного проще внести в советник изменения, чем ждать у моря погоды. Поэтому повторно задам один простой вопрос. Может кто-нибудь в курсе, как программно получить информацию о том, что пользователь на ходу заменил значение входного параметра? В смысле факт изменения значения и момент времени.
Действительно новые сборки терминала MT4 значительно лучше старых. Замена значения параметра происходит в данном случае во время выполнения функции Sleep(). Безусловно это прогресс. Старые сборки в таких случаях вообще не позволяли менять значения, точнее даже не позволяли пользователю получить окно со входными параметрами. Я говорил заказчикам, что следует сначала выключить советники кнопкой на панели терминала, изменить параметры, а потом снова включить советники. Но сейчас у пользователя нет никаких препятствий, у него возникает иллюзия, что входные параметры изменены. Причём новый пример показывает, что не только копии, получаемые в блоке init(), но и оригиналы входных параметров не изменяются в советнике, зато изменяются в окне свойств на вкладке "Inputs". Несоответствие очевидно.
PS. (Я вроде не очень-то похож на такого, который впустую треплет языком на форуме.)
Очень похож.
1. Языку MQL4 посвящён специальный форум. Не этот.
2. Документацию по MQL4, ни старую, ни новую, Вы не читали
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Новые сборки терминала MT4 не производят де-инициализацию и новую инициализацию советника при изменении пользователем значений входных параметров. Это приводит к принципиальной несовместимости существующих советников с новыми сборками MT4. Причём под несовместимость попадают наиболее оптимизированные советники, где все однократные вычисления вынесены в блок init().
Доходит до смешного: чтобы гарантировано заменить значение того или иного входного параметра, пользователь должен снять советник с графика и поставить его вновь. (Я не пробовал загружать параметры из SET-файла кнопкой, но подозреваю, что это эквивалентно замене значений параметров вручную).
Очень прошу разработчиков MT4 вернуть вызов функций deinit(), init() к здравому смыслу.
С уважением.
PS Если кто-то в курсе механизма программного определения момента и факта замены пользователем значений входных параметров советника, пожалуйста напишите об этом здесь.